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

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (7)  (0)

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.


Noticia_RicardoRodney.gif 

(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).

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Ficou com alguma dúvida?