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?
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?
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?
==========================================================
[]'s,
Fabio I.