Transação - Uma transação é um conjunto de operações, delimitadas por um início e um fim. Iniciando quando se executa o primeiro comando SQL e terminando de acordo com as seguintes situações:
Commit | Comando que grava definitivamente os efeitos dos comandos de uma transação (insert, delete e update) |
---|---|
Rollback | Comando que desfaz os efeitos dos comandos da transação (insert, delete e update) |
Fim da sessão | Quando a sessão é encerrada sem problemas, ocorre um commit implícito, caso haja algum problema, ocorre um rollback implícito. |
Comando DDL ou DCL | Todo comando DDL (create, alter e drop) e DCL (grant e revoke) provocam o fim da transação corrente, havendo um commit implícito. |
Commit - Quando o comando commit é executado, as alterações nos dados são gravadas no banco de dados.
Veja um exemplo na Listagem 1.
SQL> select matricula, nome from alunos;
Matricula aluno
----------- -------
Florentina de Jesus
Arthur Antunes Coimbra
Fidélio da Conceição Barreto
3 rows selected.
SQL> insert into alunos (matricula, nome) values (4, `Ricardo Esteves Kneipp`);
1 row created.
SQL> commit;
Commit complete.
Após o commit, verificaremos as matriculas e nomes existentes na tabela alunos (Listagem 2).
SQL> select matricula, nome from alunos;
Matricula aluno
----------- -------
01 Florentina de Jesus
02 Arthur Antunes Coimbra
03 Fidélio da Conceição Barreto
04 Ricardo Esteves Kneipp
4 rows selected.
Façamos agora uma nova inserção, seguida de um novo select (Listagem 3).
SQL> insert into alunos (matricula, nome) values (5, `Rodney Cezar de Albuquerque`);
1 row created.
SQL> select matricula, nome from alunos;
Matricula aluno
----------- -------
01 Florentina de Jesus
02 Arthur Antunes Coimbra
03 Fidélio da Conceição Barreto
04 Ricardo Esteves Kneipp
05 Rodney Cezar de Albuquerque
5 rows selected.
É importante ressaltar que este select somente é válido para a sessão que acabou de fazer o insert. Uma outra sessão não verá as 5 linhas, uma vez que o commit não foi dado.
Rollback - Quando o comando rollback é executado, as alterações nos dados são descartadas, voltando os dados ao seu estado anterior (Listagem 4).
SQL> rollback;
Rollback complete.
Verifique no exemplo da Listagem 5 que o insert feito foi desfeito.
SQL> Select matricula, nome from alunos;
Matricula aluno
----------- -------
01 Florentina de Jesus
02 Arthur Antunes Coimbra
03 Fidélio da Conceição Barreto
04 Ricardo Esteves Kneipp
4 rows selected.
O Oracle permite que sejam definidas marcas, denominadas savepoints, a fim de possibilitar um rollback de apenas partes da transação. Essas marcas são especificadas com a utilização do comando savepoint.
Vejamos o exemplo:
Faremos à inserção do aluno Tiririca do Brejo (Listagem 6)
SQL> insert into alunos (matricula, nome) values (5, `Tiririca do Brejo`);
1 row created.
Savepoint
Utilizaremos o comando savepoint para definir uma marca na transação corrente (Listagem 7).
SQL> savepoint teste_artigo;
Savepoint created.
Na Listagem 8 é feito o insert de um aluno e de uma nova aluna em nossa tabela alunos.
SQL> insert into alunos (matricula, nome) values (6, `Eloir Kneipp`);
1 row created.
SQL> insert into alunos (matricula, nome) values (7, `Darli Esteves Kneipp`);
1 row created.
Agora vamos utilizar o rollback para desfazer a transação (Listagem 9).
SQL> rollback to teste_artigo;
Rollback complete.
Verifique no exemplo da Listagem 10 que apenas o insert referente ao aluno Tiririca do Brejo foi realizado, pois o rollback desfez a transação até o último savepoint criado.
SQL> Select matricula, nome from alunos;
Matricula aluno
----------- -------
01 Florentina de Jesus
02 Arthur Antunes Coimbra
03 Fidélio da Conceição Barreto
04 Ricardo Esteves Kneipp
05 Tiririca do Brejo
Este artigo se propôs a apresentar de forma prática a importância da gerencia de transações, através da utilização dos comandos commit, rollback e savepoint.