Transacciones (Azure Synapse Analytics)

Se aplica a: síAzure Synapse Analytics síAlmacenamiento de datos paralelos

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.

El principio y el final de las transacciones depende de la configuración de AUTOCOMMIT y de las instrucciones BEGIN TRANSACTION, COMMIT y ROLLBACK. Azure Synapse Analytics admite los siguientes tipos de transacciones:

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

  • Las transacciones de confirmación automática se inician automáticamente dentro de una sesión y no se inician con la instrucción BEGIN TRANSACTION. Cuando el valor de AUTOCOMMIT es ON, cada instrucción se ejecuta en una transacción y no se necesita COMMIT o ROLLBACK de forma explícita. Cuando el valor de AUTOCOMMIT es OFF, se requiere una instrucción COMMIT o ROLLBACK para determinar el resultado de la transacción. En Azure Synapse Analytics, las transacciones de confirmación automática comienzan inmediatamente después de una instrucción COMMIT o ROLLBACK, o bien después de una instrucción SET AUTOCOMMIT OFF.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL (Transact-SQL)

Sintaxis

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

Argumentos

BEGIN TRANSACTION
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 TRAN y 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 TRAN y ROLLBACK TRANSACTION.

SET AUTOCOMMIT { ON | OFF }
Determina cómo se pueden iniciar y finalizar las transacciones.

ACTIVAR
Cada instrucción se ejecuta en su propia transacción y no se necesita ninguna instrucción COMMIT o ROLLBACK explícita. Las transacciones explícitas se permiten cuando AUTOCOMMIT es ON.

Apagado
Azure Synapse Analytics inicia automáticamente una transacción cuando no hay en curso una transacción. Todas las instrucciones siguientes se ejecutan como parte de la transacción y se necesita COMMIT o ROLLBACK para determinar el resultado de la transacción. Cuando una transacción se confirma o revierte en este modo de funcionamiento, el modo permanece en OFF, y Azure Synapse Analytics inicia una nueva transacción. Cuando AUTOCOMMIT es OFF las transacciones explícitas no se permiten.

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

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

SET IMPLICIT_TRANSACTIONS { ON | OFF }
Esto alterna los mismos modos que SET AUTOCOMMIT. Cuando es ON, SET IMPLICIT_TRANSACTIONS establece la conexión en el modo de transacción implícita. Cuando es OFF, restablece la conexión al modo de confirmación automática. Para obtener más información, vea 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.

Tratamiento de errores

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

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

Si un error que no sea de una instrucción de tiempo de ejecución impide la terminación correcta de una transacción, Azure Synapse Analytics revierte automáticamente la transacción y libera todos los recursos que mantiene. Por ejemplo, si se interrumpe la conexión de red del cliente con una instancia de Azure Synapse Analytics o si el cliente se desconecta de la aplicación, las transacciones pendientes de la conexión se revierten al estado anterior cuando la red notifica la interrupción a la instancia.

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

Notas generales

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 de SQL usar COMMIT solo en el punto donde todos los datos a los que hace referencia la transacción sean lógicamente correctos.

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 AUTOCOMMIT en OFF, o bien IMPLICIT_TRANSACTIONS en ON, no tiene ningún efecto en los modos de transacción de otras sesiones.

Limitaciones y restricciones

No se puede revertir una transacción después de ejecutar una instrucción COMMIT, porque las modificaciones sobre los datos ya son parte permanente de la base de datos.

Los comandos CREATE DATABASE (Azure Synapse Analytics) y DROP DATABASE (Transact-SQL) no se pueden utilizar 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 del bloqueo

En Azure Synapse Analytics se usa el bloqueo para garantizar 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 de Azure Synapse Analytics 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.

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

A. Usar una transacción explícita

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

B. Revertir una transacción

En el ejemplo siguiente se muestra el efecto de revertir una transacción. En este ejemplo, la instrucción ROLLBACK revertirá la instrucción INSERT, 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. Configuración de AUTOCOMMIT

En el ejemplo siguiente se establece el valor de AUTOCOMMIT en ON.

SET AUTOCOMMIT ON;  

En el ejemplo siguiente se establece el valor de AUTOCOMMIT en OFF.

SET AUTOCOMMIT OFF;  

D. Uso de una transacción implícita de múltiples instrucciones

SET AUTOCOMMIT OFF;  
CREATE TABLE ValueTable (id INT);  
INSERT INTO ValueTable VALUES(1);  
INSERT INTO ValueTable VALUES(2);  
COMMIT;  

Vea también

SET IMPLICIT_TRANSACTIONS (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
@@TRANCOUNT (Transact-SQL)