Usuário com melhor resposta
Transacoes implicitas / explicitas

Pergunta
-
Pessoal,
Até onde sei por default o SQL trabalha com transações implicitas, ou seja, eu não preciso obrigatoriamente dar um commit no final de uma instrução para que o dado seja confirmado.
Mas me chamou atenção ao passear pelas configurações da instância (connection) a opção implicit transactions estar desabilitada.
Qual a relação de iniciar uma transação impliciamente ao executar uma instrução com o commit ?
Confesso que fiquei meio confusso...
Valeu !
Felipe Souza Rasche
Respostas
-
Boa Noite,
Acho que alguns conceitos estão ficando um pouco confusos (transações implícitas não significa que o commit é ou não necessário). O SQL Server permite três configurações básicas para trabalhar com transações:
Transações Autocomitadas (Default)
Nesse modo, cada comando individual é uma transação que se autocomita. Um bloco com 10 INSERTs por exemplo, considera que cada INSERT individual é uma transação a parte e não é necessário (nem possível) colocar um commit, pois, cada transação individual será comitada por si só
Transações Explícitas
Nesse modo, abre-se um bloco de transações com o BEGIN TRAN, coloca-se vários comandos e ao final é necessário efetuar um commit para que os efeitos da transação sejam efetivados ou um rollback para desfazê-los. É obrigatório o uso de um commit para que os efeitos da transação sejam permanentes. A ausência de um commit provocará um rollback posteriormente.
Transações Implícitas
Esse modo é muito comum para quem trabalha com outros SGBDs como o Oracle e o DB2. Nesse modo, após conectar-se é aberta uma transação. Diz-se "implícita" porque o usuário não irá explicitar, basta conectar-se e o SGBD já faz isso, ou seja, já providencia um contexto transacional. Usar o modo de transações implícitas, permitirá que um bloco de 10 INSERTs sejam todos uma única transação (mesmo que isso não esteja explícito). Isso significa que ao final é obrigatório o uso de um COMMIT ou de um ROLLBACK para decidir se os efeitos são permanentes ou devem ser desfeitos.
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comA Impedância, o Mapeamento Objeto Relacional e Implementações – Parte III
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!899.entry
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Richard Juhasz terça-feira, 23 de outubro de 2012 14:50
Todas as Respostas
-
Felipe,
Realmente por padrão o SQL Server não necessita que você passe um Commit para confirmar a transação, mas existem vários níveis de isolamento que você poderá trabalhar para realizar este tipo de controle.
O commit representa uma instrução T-SQL para confirmar os comandos que estão sendo processados dentro de um bloco transacional, quando passamos o commit o SQL Server entende que aquela instrução deve ser confirmada dentro de banco de dados.
O que você ficou confuso?
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA -
-
Boa Noite,
Acho que alguns conceitos estão ficando um pouco confusos (transações implícitas não significa que o commit é ou não necessário). O SQL Server permite três configurações básicas para trabalhar com transações:
Transações Autocomitadas (Default)
Nesse modo, cada comando individual é uma transação que se autocomita. Um bloco com 10 INSERTs por exemplo, considera que cada INSERT individual é uma transação a parte e não é necessário (nem possível) colocar um commit, pois, cada transação individual será comitada por si só
Transações Explícitas
Nesse modo, abre-se um bloco de transações com o BEGIN TRAN, coloca-se vários comandos e ao final é necessário efetuar um commit para que os efeitos da transação sejam efetivados ou um rollback para desfazê-los. É obrigatório o uso de um commit para que os efeitos da transação sejam permanentes. A ausência de um commit provocará um rollback posteriormente.
Transações Implícitas
Esse modo é muito comum para quem trabalha com outros SGBDs como o Oracle e o DB2. Nesse modo, após conectar-se é aberta uma transação. Diz-se "implícita" porque o usuário não irá explicitar, basta conectar-se e o SGBD já faz isso, ou seja, já providencia um contexto transacional. Usar o modo de transações implícitas, permitirá que um bloco de 10 INSERTs sejam todos uma única transação (mesmo que isso não esteja explícito). Isso significa que ao final é obrigatório o uso de um COMMIT ou de um ROLLBACK para decidir se os efeitos são permanentes ou devem ser desfeitos.
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comA Impedância, o Mapeamento Objeto Relacional e Implementações – Parte III
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!899.entry
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Richard Juhasz terça-feira, 23 de outubro de 2012 14:50