Transações (Azure Synapse Analytics e Microsoft Fabric)
Aplica-se a:Azure Synapse AnalyticsAnalytics Analytics Platform System (PDW)Warehouse no Microsoft Fabric
Uma transação é um grupo de uma ou mais instruções de banco de dados que são totalmente comprometidas ou totalmente revertidas. Cada transação é atômica, consistente, isolada e durável (ACID). Se a transação for bem-sucedida, todas as declarações dentro dela serão confirmadas. Se a transação falhar, ou seja, pelo menos uma das instruções no grupo falhar, todo o grupo será revertido.
O início e o fim das transações dependem da configuração AUTOCOMMIT e das instruções BEGIN TRANSACTION, COMMIT e ROLLBACK.
Os seguintes tipos de transações são suportados:
As transações explícitas começar com a instrução BEGIN TRANSACTION e terminar com a instrução COMMIT ou ROLLBACK.
transações de confirmação automática iniciadas automaticamente dentro de uma sessão e não começam com a instrução BEGIN TRANSACTION. Quando a configuração AUTOCOMMIT está ON, cada instrução é executada em uma transação e nenhum COMMIT ou ROLLBACK explícito é necessário. Quando a configuração AUTOCOMMIT está OFF, uma instrução COMMIT ou ROLLBACK é necessária para determinar o resultado da transação. As transações de confirmação automática começam imediatamente após uma instrução COMMIT ou ROLLBACK, ou após uma instrução SET AUTOCOMMIT OFF.
Transact-SQL convenções de sintaxe
Observação
Para obter mais informações sobre transações no Microsoft Fabric, consulte transações no Microsoft Fabric.
Sintaxe
BEGIN TRANSACTION [;]
COMMIT [ TRAN | TRANSACTION | WORK ] [;]
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]
SET AUTOCOMMIT { ON | OFF } [;]
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]
Argumentos
INICIAR TRANSAÇÃO
Marca o ponto de partida de uma transação explícita.
COMPROMETER [ TRABALHO ]
Marca o fim de uma transação explícita ou de confirmação automática. Essa instrução faz com que as alterações na transação sejam confirmadas permanentemente no banco de dados. A instrução COMMIT é idêntica a COMMIT WORK, COMMIT TRAN e COMMIT TRANSACTION.
REVERSÃO [ TRABALHO ]
Reverte uma transação para o início da transação. Nenhuma alteração para a transação é confirmada no banco de dados. A instrução ROLLBACK é idêntica a ROLLBACK WORK, ROLLBACK TRAN e ROLLBACK TRANSACTION.
SET AUTOCOMMIT { NO | DESLIGADO }
Determina como as transações podem começar e terminar.
EM
Cada instrução é executada em sua própria transação e nenhuma instrução explícita COMMIT ou ROLLBACK é necessária. Transações explícitas são permitidas quando AUTOCOMMIT está ATIVADO.
DESLIGADO
O Azure Synapse Analytics e o Microsoft Fabric iniciam automaticamente uma transação quando ela ainda não está em andamento. Quaisquer instruções subsequentes são executadas como parte da transação e um COMMIT ou ROLLBACK é necessário para determinar o resultado da transação. Assim que uma transação é confirmada ou revertida sob este modo de operação, o modo permanece OFF, uma nova transação é iniciada. Transações explícitas não são permitidas quando a confirmação automática está desativada.
Se você alterar a configuração AUTOCOMMIT dentro de uma transação ativa, a configuração afetará a transação atual e não terá efeito até que a transação seja concluída.
Se AUTOCOMMIT estiver ON, a execução de outra instrução SET AUTOCOMMIT ON não terá efeito. Da mesma forma, se AUTOCOMMIT estiver OFF, executar outro SET AUTOCOMMIT OFF não terá efeito.
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Isso alterna os mesmos modos que SET AUTOCOMMIT. Quando ON, SET IMPLICIT_TRANSACTIONS define a conexão no modo de transação implícita. Quando OFF, ele retorna a conexão para o modo de confirmação automática. Para obter mais informações, consulte SET IMPLICIT_TRANSACTIONS (Transact-SQL).
Permissões
Não são necessárias permissões específicas para executar as instruções relacionadas à transação. São necessárias permissões para executar as instruções dentro da transação.
Tratamento de erros
Se COMMIT ou ROLLBACK forem executados e não houver nenhuma transação ativa, um erro será gerado.
Se uma START TRANSACTION for executada enquanto uma transação já está em andamento, um erro será gerado. Isso pode ocorrer se uma transação BEGIN ocorrer após uma instrução BEGIN TRANSACTION bem-sucedida ou quando a sessão estiver em SET AUTOCOMMIT OFF.
Se um erro diferente de um erro de instrução em tempo de execução impedir a conclusão bem-sucedida de uma transação explícita, o mecanismo de banco de dados reverterá automaticamente a transação e liberará todos os recursos mantidos pela transação. Por exemplo, se a conexão de rede do cliente for interrompida ou o cliente fizer logoff do aplicativo, todas as transações não confirmadas para a conexão serão revertidas quando a rede notificar a instância da interrupção.
Se ocorrer um erro de instrução em tempo de execução em um lote, o Azure Synapse Analytics e o Microsoft Fabric se comportarão de forma consistente com o SQL ServerXACT_ABORT definido como ON e toda a transação será revertida. Para obter mais informações sobre a configuração XACT_ABORT, consulte SET XACT_ABORT (Transact-SQL).
Observações gerais
Uma sessão só pode executar uma transação de cada vez; Não há suporte para salvar pontos e transações aninhadas.
É da responsabilidade do programador emitir COMMIT apenas num momento em que todos os dados referenciados pela transação estejam logicamente corretos.
Quando uma sessão é encerrada antes da conclusão de uma transação, a transação é revertida.
Os modos de transação são gerenciados no nível da sessão. Por exemplo, se uma sessão iniciar uma transação explícita ou definir AUTOCOMMIT como OFF, ou definir IMPLICIT_TRANSACTIONS como ON, isso não terá efeito nos modos de transação de qualquer outra sessão.
Limitações e Restrições
Não é possível reverter uma transação depois que uma instrução COMMIT é emitida porque as modificações de dados foram feitas como parte permanente do banco de dados.
Os comandos CREATE DATABASE (Azure Synapse Analytics) e DROP DATABASE (Transact-SQL) não podem ser usados dentro de uma transação explícita.
O Azure Synapse Analytics e o Microsoft Fabric não têm um mecanismo de compartilhamento de transações. Isso implica que, em qualquer momento, apenas uma sessão pode estar fazendo trabalho em qualquer transação no sistema.
Comportamento de bloqueio
O bloqueio garante a integridade das transações e mantém a consistência dos bancos de dados quando vários usuários estão acessando dados ao mesmo tempo. O bloqueio é usado por transações implícitas e explícitas. Cada transação solicita bloqueios de tipos diferentes nos recursos, como tabelas ou bancos de dados dos quais a transação depende.
Todos os bloqueios são de nível de tabela ou superior. Os bloqueios impedem que outras transações modifiquem os recursos de uma forma que causaria problemas para a transação que solicita o bloqueio. Cada transação libera seus bloqueios quando não tem mais uma dependência dos recursos bloqueados; As transações explícitas retêm bloqueios até que a transação seja concluída quando for confirmada ou revertida.
Exemplos:
Um. Usando uma transação explícita
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. Reverter uma transação
O exemplo a seguir mostra o efeito de reverter uma transação. Neste exemplo, a instrução ROLLBACK reverterá a instrução INSERT, mas a tabela criada ainda existirá.
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;
C. Definindo AUTOCOMMIT
O exemplo a seguir define a configuração AUTOCOMMIT como ON
.
SET AUTOCOMMIT ON;
O exemplo a seguir define a configuração AUTOCOMMIT como OFF
.
SET AUTOCOMMIT OFF;
D. Usando uma transação implícita de várias instruções
SET AUTOCOMMIT OFF;
CREATE TABLE ValueTable (id INT);
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
COMMIT;