Página Inicial > Estudo, Tutorial > Transaçoes de banco de dados – Commit e Rollback

Transaçoes de banco de dados – Commit e Rollback

O servidor RDMS (Oracle), garante a consistência de dados com base em transações. As transações permitem mais flexibilidade e controle durante a alteração de dados e garantem a consistência de dados em caso de falha de processo do usuário ou falha do sistema.
As transações consistem em instruções em DML que formam uma alteração consistente dos dados. Por exemplo, uma transferência de fundos entre duas contas deve incluir o débito em uma conta e o crédito em outra conta no mesmo valor. As duas ações deverão apresentar falha ou ser bem-sucedidas; o crédito não deverá ser submetido a commit sem o débito.

Quando uma Transação Começa e Termina?

Uma transação começa quando a primeira instrução DML é encontrada e termina quando uma destas ações ocorre:
• Uma instrução COMMIT ou ROLLBACK é executada.
• Uma instrução DDL, como CREATE, é executada.
• Uma instrução DCL é executada.
• O usuário sai do iSQL*Plus.
• Ocorre uma falha de máquina ou do sistema.
Após o término de uma transação, a próxima instrução SQL executável inicia automaticamente a transação seguinte.
Uma instrução DDL ou DCL é submetida a commit automaticamente e, portanto, encerra uma transação de forma implícita.

Vantagens de Instruções COMMIT e ROLLBACK

• Garantir a consistência de dados
• Visualizar alterações de dados antes de torná-las permanentes
• Agrupar operações relacionadas logicamente
• As instruções COMMIT e ROLLBACK permitem controlar as alterações permanentes nos dados.

Vamos ao que interessa
//Criamos uma tabela:

CREATE TABLE filmes (
nome VARCHAR(30),
ano NUMBER(4),
genero VARCHAR (10)
);
table FILMES created.

//Inserindo alguns dados:

INSERT INTO filmes
VALUES  (‘Coracao Valente’, 1996, ‘Aventura’);

INSERT INTO filmes
VALUES  (‘Senhor dos aneis’, 2006, ‘Aventura’);

INSERT INTO filmes
VALUES  (‘O discurso do rei’, 2010, ‘Drama’);

INSERT INTO filmes
VALUES  (‘Professor aloprado’, 2000, ‘Comedia’);

INSERT INTO filmes
VALUES  (‘a pequena sereia’, 2000, ‘Desenho’);
1 rows inserted.
1 rows inserted.
1 rows inserted.
1 rows inserted.
1 rows inserted.

Submetendo Alterações a Commit

Todas as alterações de dados feitas durante a transação serão temporárias até que ela seja submetida a commit.
O estado dos dados antes da execução da instrução COMMIT ou ROLLBACK pode ser descrito da seguinte forma:
• As operações de manipulação de dados afetam principalmente o buffer de banco de dados; portanto, é possível recuperar o estado anterior dos dados.
• O usuário atual pode visualizar os resultados das operações de manipulação de dados consultando as tabelas.
• Outros usuários não podem visualizar os resultados das operações de manipulação de dados executadas pelo usuário atual. O servidor Oracle institui a consistência de leitura para garantir que cada usuário veja os dados da forma como se encontravam no último commit.
• As linhas afetadas são bloqueadas; outros usuários não podem alterar os dados nessas linhas.

Vamos ao exemplo:
//Deletentando todas as linhas, da tabela filmes que contém o genero é Aventura
delete from filmes
WHERE GENERO = ‘Aventura’
2 rows deleted.

//Verificando a tabela filmes

select * from filmes;

NOME ANO GENERO
O discurso do rei 2010 Drama
Professor aloprado 2000 Comedia
a pequena sereia 2000 Desenho

Ótimo, apagamos todas as linhas que continha o gênero Aventura, para confirmamos este comando, precisamos executar o commit.

commit;

commited.

No momento que executamos o commit, não será mais possível efetuar o rollback.

Fazendo Rollback de Alterações

Descarte todas as alterações pendentes com a instrução ROLLBACK. O resultado será:
• As alterações de dados são desfeitas.
• O estado anterior dos dados é restaurado.
• Os bloqueios nas linhas afetadas são liberados.

//Deletando todas as linhas, da tabela filmes

delete from filmes;
3 rows deleted.

// Consultando a tabela filmes

select * from filmes;

NOME ANO GENERO

//Fazendo rollback

rollback;
rollback complete.

//Consultando novamente

select * from filmes;

NOME ANO GENERO
O discurso do rei 2010 Drama
Professor aloprado 2000 Comedia
a pequena sereia 2000 Desenho

Este texto é bem básico em relação as transações do banco, existem muitos detalhes que agora cabe a você procurar e aprender.
Um abraço.

  1. 1, dezembro, 2011 em 12:32 | #1

    Olá Williamdocarmo, ótimo post, sou iniciante no sgbd Oracle, mas não entendi sua explicação referente ao roolback, o resultado não deveria voltar todas as alterações feitas, o resultado seria portanto todos os filmes que foram criados.

  2. Alessandro
  3. Alex
    21, fevereiro, 2015 em 21:10 | #3

    Muito bom…..

  1. Nenhum trackback ainda.