Compartir por


Transacciones (Azure Synapse Analytics)

Se aplica a:Azure Synapse AnalyticsAnalytics Platform System (PDW)

Una transacción es un grupo de una o varias instrucciones de base de datos totalmente confirmadas o totalmente revertidas. Cada transacción es atómica, coherente, aislada y durable (ACID). Si la transacción se realiza correctamente, se confirman todas las instrucciones que contiene. Si se produce un error en la transacción, es decir, se produce un error en al menos una de las instrucciones del grupo, se revierte todo el grupo.

Nota:

El SET AUTOCOMMIT comando no se admite en Microsoft Fabric Data Warehouse. Para obtener más información sobre transacciones, aislamiento, simultaneidad y coherencia en Microsoft Fabric Data Warehouse, vea Transacciones en Fabric Data Warehouse.

El principio y el final de las transacciones dependen de la AUTOCOMMIT configuración y las BEGIN TRANSACTIONinstrucciones , COMMITy ROLLBACK .

Se admiten los siguientes tipos de transacciones:

  • Las transacciones explícitas comienzan con la BEGIN TRANSACTION instrucción y terminan con la COMMIT instrucción o ROLLBACK .

  • Las transacciones de confirmación automática se inician automáticamente dentro de una sesión y no comienzan con la BEGIN TRANSACTION instrucción .

    • Cuando la AUTOCOMMIT configuración es ON, cada instrucción se ejecuta en una transacción y no es necesaria o ROLLBACK explícitaCOMMIT.
    • Cuando la AUTOCOMMIT configuración es OFF, se requiere una COMMIT instrucción o ROLLBACK para determinar el resultado de la transacción. Las transacciones de confirmación automática comienzan inmediatamente después de una COMMIT instrucción o ROLLBACK o después de una SET AUTOCOMMIT OFF instrucción .

Convenciones de sintaxis de Transact-SQL

Sintaxis

BEGIN TRANSACTION [;]  
COMMIT [ TRAN | TRANSACTION | WORK ] [;]  
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]  
SET AUTOCOMMIT { ON | OFF } [;]  
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]  

Argumentos

INICIAR TRANSACCIÓN

Marca el punto de inicio de una transacción explícita.

COMMIT [ WORK ]

Marca el final de una transacción explícita o de confirmación automática. Esta instrucción hace que los cambios en la transacción se confirmen permanentemente en la base de datos. La instrucción COMMIT es idéntica a COMMIT WORK, COMMIT TRANy COMMIT TRANSACTION.

ROLLBACK [ WORK ]

Revierte una transacción al principio de la misma. No se confirman cambios para la transacción en la base de datos. La instrucción ROLLBACK es idéntica a ROLLBACK WORK, ROLLBACK TRANy ROLLBACK TRANSACTION.

SET AUTOCOMMIT { ON | OFF }

Determina cómo se pueden iniciar y finalizar las transacciones.

Si cambia la AUTOCOMMIT configuración dentro de una transacción activa, la configuración afecta a la transacción actual y no surte efecto hasta que se complete la transacción.

Si AUTOCOMMIT es ON, la ejecución de otra SET AUTOCOMMIT ON instrucción no tiene ningún efecto. Del mismo modo, si AUTOCOMMIT es OFF, ejecutar otro SET AUTOCOMMIT OFF no tiene ningún efecto.

ACTIVAR

Cada instrucción se ejecuta bajo su propia transacción y no es necesaria ninguna instrucción o ROLLBACK explícitaCOMMIT. Las transacciones explícitas se permiten cuando AUTOCOMMIT es ON.

Apagado

Azure Synapse Analytics inicia automáticamente una transacción cuando una transacción aún no está en curso. Las instrucciones posteriores se ejecutan como parte de la transacción y es COMMIT necesario o ROLLBACK para determinar el resultado de la transacción. Tan pronto como una transacción confirma o revierte en este modo de operación, el modo permanece OFF, se inicia una nueva transacción. No se permiten transacciones explícitas cuando AUTOCOMMIT es OFF.

SET IMPLICIT_TRANSACTIONS { ON | OFF }

Esto alterna los mismos modos que SET AUTOCOMMIT. Cuando ON, SET IMPLICIT_TRANSACTIONS establece la conexión en modo de transacción implícito. Cuando OFF, devuelve la conexión al modo de confirmación automática. Para más información, consulte SET IMPLICIT_TRANSACTIONS (Transact-SQL).

Permisos

No se necesitan permisos específicos para ejecutar las instrucciones relacionadas con la transacción. Se requieren permisos para ejecutar las instrucciones dentro de la transacción.

Control de errores

Si COMMIT o ROLLBACK se ejecutan y no hay ninguna transacción activa, se genera un error.

BEGIN TRANSACTION Si se ejecuta mientras una transacción ya está en curso, se genera un error. Esto puede ocurrir si BEGIN TRANSACTION se produce después de una instrucción correcta BEGIN TRANSACTION o cuando la sesión está en SET AUTOCOMMIT OFF.

Si un error distinto de un error de instrucción en tiempo de ejecución impide la finalización correcta de una transacción explícita, el motor de base de datos revierte automáticamente la transacción y libera todos los recursos que mantiene la transacción. Por ejemplo, si la conexión de red del cliente se interrumpe o el cliente cierra la sesión de la aplicación, las transacciones no confirmadas para la conexión se revierten cuando la red notifica la instancia de la interrupción.

Si se produce un error de instrucción en tiempo de ejecución en un lote, Azure Synapse Analytics se comporta de forma coherente con SQL Server XACT_ABORT establecido ON en y se revierte toda la transacción. Para obtener más información sobre la XACT_ABORT configuración, vea SET XACT_ABORT (Transact-SQL).

Observaciones

Una sesión solo puede ejecutar una transacción en un momento dado; no se admiten los puntos de retorno y las transacciones anidadas.

Es responsabilidad del programador emitir COMMIT solo en un momento en el que todos los datos a los que hace referencia la transacción son lógicos.

Cuando se termina una sesión antes de que finalice una transacción, se revierte la transacción.

Los modos de transacción se administran en el ámbito de sesión. Por ejemplo, si una sesión inicia una transacción explícita o establece en AUTOCOMMITOFF, o establece en IMPLICIT_TRANSACTIONSON, no tiene ningún efecto en los modos de transacción de cualquier otra sesión.

Limitaciones

No se puede revertir una transacción después de emitir una COMMIT instrucción porque las modificaciones de datos se han realizado una parte permanente de la base de datos.

Los comandos CREATE DATABASE y DROP DATABASE (Transact-SQL) no se pueden usar dentro de una transacción explícita.

Azure Synapse Analytics no tiene un mecanismo de uso compartido de transacciones. Esto implica que en cualquier momento dado, solo una sesión puede estar realizando un trabajo en otras transacciones en el sistema.

Comportamiento de bloqueo

El bloqueo garantiza la integridad de las transacciones y mantener la coherencia de las bases de datos cuando varios usuarios obtienen acceso a los datos al mismo tiempo. El bloqueo se usa tanto en transacciones implícitas como explícitas. Cada transacción solicita diferentes tipos de bloqueo en los recursos, como por ejemplo, las tablas o bases de datos de las que depende la transacción.

Todos los bloqueos son en el nivel de tabla o superior. Estos bloqueos impiden que otras transacciones puedan modificar los recursos de forma que esto provoque problemas para la transacción que solicita el bloqueo. Cada transacción libera sus bloqueos cuando ya no tiene una dependencia en los recursos bloqueados; las transacciones explícitas mantienen los bloqueos hasta que la transacción finaliza cuando se confirma o revierte.

Examples

A. Uso de una transacción explícita

BEGIN TRANSACTION;  
       DELETE FROM HumanResources.JobCandidate  
       WHERE JobCandidateID = 13;
COMMIT;  

B. Reversión de una transacción abierta

En el ejemplo siguiente se muestra el efecto de revertir una transacción. En este ejemplo, la ROLLBACK instrucción revierte la INSERT instrucción , pero la tabla creada seguirá existiendo.

CREATE TABLE ValueTable (id INT);  

BEGIN TRANSACTION;  
       INSERT INTO ValueTable VALUES(1);  
       INSERT INTO ValueTable VALUES(2);  
ROLLBACK;  

C. Establecimiento de AUTOCOMMIT

En el ejemplo siguiente se establece el AUTOCOMMIT valor ONen .

SET AUTOCOMMIT ON;  

En el ejemplo siguiente se establece el AUTOCOMMIT valor OFFen .

SET AUTOCOMMIT OFF;  

D. Uso de una transacción implícita de varias instrucciones

SET AUTOCOMMIT OFF;  

CREATE TABLE ValueTable (id INT);  
INSERT INTO ValueTable VALUES(1);  
INSERT INTO ValueTable VALUES(2);  

COMMIT;