Transações no Oracle - Commit, Rollback e Savepoint

Veja neste artigo um passo-a-passo da utilização dos comandos Commit, Rollback e Savepoint.

Por que eu devo ler este artigo:Nesse artigo apresentaremos um passo a passo sobre a utilização dos comandos commit, rollback e savepoint.

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.
Listagem 1. Exemplo de commit após um insert

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.
Listagem 2. Select após o commit

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.
Listagem 3. Select após um insert, porém antes de um commit

É 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.
Listagem 4. Execução de um rollback

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.
Listagem 5. Select após um rollback

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.
Listagem 6. Inserção de um registro na tabela alunos
Savepoint Utilizaremos o comando savepoint para definir uma marca na transação corrente (Listagem 7). SQL> savepoint teste_artigo; Savepoint created.
Listagem 7. Definição de uma marca na transação

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.
Listagem 8. Duas nova inserções

Agora vamos utilizar o rollback para desfazer a transação (Listagem 9).

SQL> rollback to teste_artigo; Rollback complete.
Listagem 9. Desfazendo a transação

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
Listagem 10. Desfazendo a transação até o savepoint criado

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.

Confira também

Artigos relacionados