Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:Azure Synapse Analytics
Analytics Platform System (PDW)
Uma transação é um grupo de uma ou mais instruções de banco de dados que são totalmente confirmadas ou totalmente revertidas. Cada transação tem ACID (atomicidade, consistência, isolamento e durabilidade). Se a transação tiver êxito, todas as instruções dentro dela serão confirmadas. Se a transação falhar, ou seja, se pelo menos uma das instruções no grupo falhar, todo o grupo será revertido.
Observação
Não SET AUTOCOMMIT há suporte para o comando no Microsoft Fabric Data Warehouse. Para obter mais informações sobre transações, isolamento, simultaneidade e consistência no Microsoft Fabric Data Warehouse, consulte Transações no Fabric Data Warehouse.
O início e o fim das transações dependem da AUTOCOMMIT configuração e das COMMITBEGIN TRANSACTIONinstruções e ROLLBACK das instruções.
Há suporte para os seguintes tipos de transações:
As transações explícitas começam com a instrução
BEGIN TRANSACTIONe terminam com aCOMMITinstrução ouROLLBACKa instrução.As transações de confirmação automática são iniciadas automaticamente em uma sessão e não começam com a instrução
BEGIN TRANSACTION.- Quando a
AUTOCOMMITconfiguração éON, cada instrução é executada em uma transação e não é explícitaCOMMITouROLLBACKnecessária. - Quando a
AUTOCOMMITconfiguração éOFF, uma ouROLLBACKinstruçãoCOMMITé necessária para determinar o resultado da transação. As transações de confirmação automática começam imediatamente após umaCOMMITinstrução ouROLLBACKinstrução ou após umaSET AUTOCOMMIT OFFinstrução.
- Quando a
Convenções de sintaxe de Transact-SQL
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 inicial de uma transação explícita.
COMMIT [ WORK ]
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 TRANe COMMIT TRANSACTION.
REVERSÃO [ TRABALHO ]
Reverte uma transação para o início da transação. Nenhuma alteração da transação é confirmada no banco de dados. A instrução ROLLBACK é idêntica a ROLLBACK WORK, ROLLBACK TRANe ROLLBACK TRANSACTION.
SET AUTOCOMMIT { ON | OFF }
Determina como as transações podem ser iniciadas e terminadas.
Se você alterar a AUTOCOMMIT configuração 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, executar outra SET AUTOCOMMIT ON instrução não terá efeito. Da mesma forma, se AUTOCOMMIT estiver OFF, executar outro SET AUTOCOMMIT OFF não tem efeito.
ATIVADO
Cada instrução é executada em sua própria transação e nenhuma instrução ou ROLLBACK instrução explícita COMMIT é necessária. Transações explícitas são permitidas quando AUTOCOMMIT é ON.
OFF
O Azure Synapse Analytics inicia automaticamente uma transação quando uma transação ainda não está em andamento. Todas as instruções subsequentes são executadas como parte da transação e uma COMMIT ou ROLLBACK é necessária para determinar o resultado da transação. Assim que uma transação for confirmada ou revertida nesse modo de operação, o modo permanecerá OFF, uma nova transação será iniciada. Transações explícitas não são permitidas quando AUTOCOMMIT é OFF.
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Isso alterna os mesmos modos que SET AUTOCOMMIT. Quando ON, SET IMPLICIT_TRANSACTIONS define a conexão em modo de transação implícita. Quando OFF, ele retorna a conexão com o modo de confirmação automática. Para obter mais informações, confira SET IMPLICIT_TRANSACTIONS (Transact-SQL).
Permissões
Nenhuma permissão específica é necessária 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 for executado e não houver nenhuma transação ativa, um erro será gerado.
Se um BEGIN TRANSACTION for executado enquanto uma transação já estiver em andamento, um erro será gerado. Isso pode ocorrer se ocorrer após BEGIN TRANSACTION uma instrução bem-sucedida BEGIN TRANSACTION 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 sair 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 se comportará de forma consistente com o SQL Server XACT_ABORT definido ON e toda a transação será revertida. Para obter mais informações sobre a XACT_ABORT configuração, consulte SET XACT_ABORT (Transact-SQL).
Observações
Uma sessão só pode executar uma única transação em um determinado momento. Não há compatibilidade com pontos de salvamento e transações aninhadas.
É responsabilidade do programador emitir COMMIT somente em um momento em que todos os dados referenciados pela transação estão logicamente corretos.
Quando uma sessão for terminada antes de uma transação ser concluída, a transação será 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, ela não terá efeito nos modos de transação de qualquer outra sessão.
Limitações
Você não pode reverter uma transação depois que uma COMMIT instrução é emitida porque as modificações de dados foram feitas em uma parte permanente do banco de dados.
Os comandos CREATE DATABASE e DROP DATABASE (Transact-SQL) não podem ser usados dentro de uma transação explícita.
O Azure Synapse Analytics não tem um mecanismo de compartilhamento de transações. Isso significa que em um determinado momento, somente uma sessão pode estar executando o trabalho em uma transação no sistema.
Comportamento de bloqueio
O bloqueio garante a integridade das transações e manter a consistência dos bancos de dados quando vários usuários estão acessando os dados ao mesmo tempo. O bloqueio é usado por transações implícitas e explícitas. Cada transação solicita bloqueios de diferentes tipos de recursos, como tabelas ou bancos de dados dos quais a transação depende.
Todos os bloqueios ocorrem no nível da tabela ou acima. Os bloqueios não permitem que outras transações modifiquem os recursos de uma maneira que causaria problemas para a transação que solicita o bloqueio. Cada transação libera seus bloqueios quando deixa de depender dos recursos bloqueados. As transações explícitas mantêm os bloqueios até que a transação seja concluída, como confirmada ou revertida.
Exemplos
a. Usar uma transação explícita
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. Reverter uma transação aberta
O exemplo a seguir mostra o efeito da reversão de uma transação. Neste exemplo, a instrução ROLLBACK reverte a INSERT instrução, 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. Definir AUTOCOMMIT
O exemplo a seguir define a AUTOCOMMIT configuração como ON.
SET AUTOCOMMIT ON;
O exemplo a seguir define a AUTOCOMMIT configuração como OFF.
SET AUTOCOMMIT OFF;
D. Usar uma transação de várias instruções implícita
SET AUTOCOMMIT OFF;
CREATE TABLE ValueTable (id INT);
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
COMMIT;