Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.
Observação
O SET AUTOCOMMIT comando não é suportado 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 dos BEGIN TRANSACTIONdemonstrativos ROLLBACKCOMMIT.
Os seguintes tipos de transações são suportados:
As transações explícitas começam com o
BEGIN TRANSACTIONextrato e terminam com oCOMMITextrato ouROLLBACK.As transações de confirmação automática iniciam-se automaticamente dentro de uma sessão e não começam com a
BEGIN TRANSACTIONinstrução.- Quando a configuração é
ON, cada instrução é executadaAUTOCOMMITem uma transação e não explícitaCOMMITouROLLBACKnecessária. - Quando a
AUTOCOMMITconfiguração éOFF, umaCOMMITinstrução ouROLLBACKé necessária para determinar o resultado da transação. As transações de confirmação automática começam imediatamente após umCOMMITextrato ouROLLBACKapós umSET AUTOCOMMIT OFFextrato.
- Quando a configuração é
Transact-SQL convenções de sintaxe
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 afirmaçã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 para a transação é confirmada no banco de dados. A afirmação ROLLBACK é idêntica a ROLLBACK WORK, ROLLBACK TRANe ROLLBACK TRANSACTION.
DEFINIR AUTOCOMMIT { EM | DESLIGADO }
Determina como as transações podem começar e terminar.
Se você alterar a AUTOCOMMIT configuração dentro de uma transação ativa, a configuração afetará a transação atual e não entrará em vigor até que a transação seja concluída.
Se AUTOCOMMIT for ON, a execução de outra SET AUTOCOMMIT ON instrução não terá efeito. Da mesma forma, se AUTOCOMMIT for OFF, executar outro SET AUTOCOMMIT OFF não tem efeito.
EM
Cada instrução é executada sob sua própria transação e nenhuma declaração explícita COMMIT ou ROLLBACK é necessária. Transações explícitas são permitidas quando AUTOCOMMIT é ON.
DESLIGADO
O Azure Synapse Analytics inicia automaticamente uma transação quando uma transação ainda não está em andamento. Quaisquer declaraçõ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 AUTOCOMMIT é OFF.
SET IMPLICIT_TRANSACTIONS { ON | DESLIGADO }
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 um BEGIN TRANSACTION é executado enquanto uma transação já está em andamento, um erro é gerado. Isso pode ocorrer se ocorrer BEGIN TRANSACTION após 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 como 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 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 inicia uma transação explícita ou define AUTOCOMMIT como OFF, ou define IMPLICIT_TRANSACTIONS como ON, ela não tem efeito sobre os modos de transação de qualquer outra sessão.
Limitações
Não é possível reverter uma transação depois que uma COMMIT instrução é emitida porque as modificações de dados foram feitas como 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 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.
Examples
Um. 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 de reverter uma transação. Neste exemplo, a ROLLBACK instrução 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 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;