Transações no Oracle - Commit, Rollback e Savepoint
Veja neste artigo, dos professores Ricardo E. Kneipp e Rodney C. de Albuquerque, um passo-a-passo da utilização dos comandos Commit, Rollback e Savepoint.
Transações no Oracle
Commit, Rollback e Savepoint.
Por Ricardo Esteves Kneipp e Rodney Cezar de Albuquerque
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.
(1) Prof. Ricardo E. Kneipp (ricardo.kneipp@gmail.com) é autor de 3 obras na área de informática, inclusive em banco de dados. É graduado em Ciência da Computação-UCP, pós-graduado em Informática na Educação-UFLA e em Gestão Estratégica-UCAM. Realizou curso de certificação Oracle e é Mestre em Ensino de Ciências da Saúde e do Ambiente. É Analista de Sistemas e Professor das Universidades UNIG e FAMINAS, nos cursos de graduação e pós-graduação em Biologia, Engenharia da Computação, Sistemas de Informação, Tecnologia de Processamento de Dados e Ciência da Computação. Ministra as Disciplinas: Bioestatística, Análise de Sistemas, Banco de Dados, Linguagens de Programação, Projeto Final, Compiladores e Gerenciamento Eletrônico. É membro da SBC (Sociedade Brasileira de Computação).
(2) Prof. Rodney C. de Albuquerque (rodney_albuquerque@hotmail.com) é autor de 3 obras na área de informática, inclusive em banco de dados. É graduado em Tecnologia de Processamento de Dados-UVA, pós-graduado em Redes Locais-UNESA e em Marketing-UCAM. Realizou cursos de certificação Microsoft e é Mestrando em Educação-UNIPLI. É Analista de Sistemas e Professor da Universidade-UNIG nos cursos de graduação e pós-graduação em Enfermagem, Fisioterapia, Educação Física, Engenharia da Computação, Sistemas de Informação, Tecnologia de Processamento de Dados e Ciência da Computação. Ministra as Disciplinas: Informática Aplicada, Bioestatística, Metodologia, Banco de Dados, Linguagens de Programação, Projeto Final, Redes de Computadores, Segurança e Auditoria de Sistemas. É membro da SBC (Sociedade Brasileira de Computação).



5
0
