1
resposta

Não executar o COMMIT ou ROLLBACK

O que acontece se eu não executar o COMMIT ou ROLLBACK após o BEGIN TRANSACTION? A transação fica guardada em trace por um período?

1 resposta

Márvio,

Eu acho que a transação ficará aberta enquanto o programa estiver aberto, pois a transação estará esperando novos comandos. Agora se você fechar o programa inesperadamente será o mesmo que fazer um "Rollback"...

...mas eu se eu fechar o "Microsoft SQL Server Manager Studio" com a transação aberta... eu tentei agora fazer isto:

use SUCOS_VENDAS

select * from [dbo].[TABELA DE PRODUTOS]
--where [CODIGO DO PRODUTO] = 999

begin transaction

insert into [TABELA DE PRODUTOS]
values (999, 'teste', 'pet', '100ml', 'Uva', '1')

E mandei fechar o programa sem dó... KKKKK!!! O "espertinho" me mandou a seguinte mensagem:

====================

Há transações não confirmadas. Deseja confirmá-las?

====================

Seria um mesmo caso uma queda de energia (claro que o servidor fica ligado em um no-break... mas suponha que o no-break pifou... Ufa! Mais zicado impossível, heim? KKKKK!!!) Mas não se preocupe caso você tenha programado o backup, pois fica tudo guardado no LOG.

Por favor, leia o texto completo dos links abaixo, acho que irá explicar melhor:

==========================================================

Diferença entre COMMIT e ROLLBACK no SQL

Definição de ROLLBACK

ROLLBACK;

A transação ROLLBACK torna-se necessária se ocorrer um erro durante a execução de uma transação. O erro pode ser falha do sistema, queda de energia, erro nas declarações da transação, falha do sistema. No caso de falha de energia ou falha do sistema, o ROLLBACK ocorre quando o sistema reinicia novamente. ROLLBACK pode ocorrer apenas se COMMIT ainda não foi executado.

https://pt.living-in-belgium.com/difference-between-commit-and-rollback-in-sql-125

==========================================================

O Transaction Log de uma transação é liberado quando dou um rollback?

Imagina que você executa um update em milhões de linhas no seu banco de dados (com BEGIN TRAN) e vê o Log crescer vários GBs. Ao concluir a transação, você verifica que fez coisa errada e decide dar um rollback. Todo esse log que foi armazenado será liberado?

https://www.fabriciolima.net/blog/2014/03/06/o-transaction-log-de-uma-transacao-e-liberado-quando-dou-um-rollback/

==========================================================

[]'s,

Fabio I.