Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Controle de Transação

Pessoal, estou estudando a aula 4 de banco de dados que fala sobre o assunto Commit e Rollback. Tenho algumas dúvidas:

1-Estamos realizando o exercício em cima do banco HyperSQL, a funcionalidade de "autocommit(false)" vale pra todos os tipos de bancos?

2-Onde é feito o controle da transação no banco de dados ou na aplicação java? Ou seja, os comandos sqls que foram executados e estão pendentes para serem "comitados" estão armazenados em memoria sob o controle da aplicação java ou é uma area temporária do banco de dados?

3-É necessário executar "rollback" ou só o fato de se definir autocomit = false já faz com que a transação não aconteça no banco caso haja algum problema? O que acontece se o rollback não for executado?

3 respostas
Olá Marcio,

Vamos às respostas:

1. Sim o autocommit é um comportamento do JDBC e não do gerenciador de bancos de dados. Na verdade todos os que eu conheço trabalham executando imediatamente as instruções SQL (Access, SQL Server, MySQL, Oracle, etc.);
2. É controlado pelo driver do banco de dados em conjunto com o próprio gerenciador. no SQL Server por exemplo existe um arquivo de log de transações com a extensão .ldb, que é usado inclusive para reversão de tranasações pendentes no caso de falha do servidor, como uma queda de energia, um HD defeituoso, etc. Em nenhum momento a linguagem de programação (seja ela qual for) vai te dar o controle absoluto sobre as transações, somente o que é disponibilizado pelos drivers. No máximo você pode criar uma transação, executar as instruções e, ao final, dar o commit ou o rollback;
3. Uma transação deve ser encerrada através de um commit ou um rollback explicitamente, mas no caso de uma falha na sua aplicação não permitir a execução explícita de um ou outro, o rollback é o padrão, ou seja, nenhuma alteração é executada.
solução!

Márcio,

Desculpe, revisando a minha resposta, vi que confundi a sua primeira pergunta: O autommit false só funciona realmente com bancos de dados que possuem controle de transação, o que hoje é o mais comum. Mas se voltarmos no tempo um pouco, o MySQL durante um bom tempo não suportou o conceito de transações, acho que até 2005, se não me engano. Nestes casos, não faz diferença, o banco vai executar a instrução de qualquer forma. Mas como eu disse, hoje é bem raro um banco de dados não suportar transações. Elas são peças chave em segurança e manutenção da integridade referencial em um BD.

Muito obrigado Sandro