Vous êtes sur la page 1sur 16

Transaes em Banco de Dados

Definio
Incio e Fim de uma Transao
Estados de Execuo de uma Transao
Controle de Transaes
Savepoint
Exemplo
Manipulao de Dados
Objetivos na Manipulao
Estado dos Dados
Consistncia de Leitura
Exemplo

Definio

Transao uma unidade lgica, que consiste de uma srie de operaes executadas,
onde o sistema de banco de dados precisa manter certas propriedades para garantir o
sucesso sem perda de informaes lgicas.
1) Transao uma unidade lgica de trabalho, envolvendo diversas operaes de
bancos dados (C. J. Date);
2) uma unidade lgica de processamento no BD (Navathe);
3) uma unidade de execuo do programa que acessa e possivelmente atualiza vrios
itens de dados (Silberschatz).

Pode ser um programa inteiro, uma parte dele ou somente um comando. Deve-se
especificar explicitamente o incio da transao e o seu fim. Todas as operaes entre estas
clusulas so consideradas parte de uma transao.

Incio e Fim de uma Transao

Uma transao inicia-se, basicamente, com uma instruo BEGIN e termina com um
COMMIT ou ROLLBACK.

COMMIT
Indica a concluso de uma transao bem-sucedida (parcialmente efetivada), informando
ao gerenciador de transaes do SGBD que uma unidade lgica de trabalho foi concluda
com sucesso. Com essa ao, o banco retoma o seu estado consistente e todas as
atualizaes feitas por essa unidade j podem se tornar permanentes (efetivada).
ROLLBACK
Indica a concluso de uma transao mal sucedida (em falha). Ela informa ao gerenciador a
ocorrncia desta falha. Nesse momento o banco pode estar inconsistente, portanto todas
as atualizaes realizadas pela transao devem ser desfeitas (abortada).

Estados de Execuo de uma Transao

Controle de Transaes

Uma transao uma srie de instrues SQL que pode ser aplicada com sucesso,
falhar, ou cancelar.
Os comandos para controlar transaes so:
COMMIT [WORK] para confirmar uma transao;
ROLLBACK [WORK] [TO SAVEPOINT x] para cancelar parte ou toda uma transao;
SAVEPOINT para criar um ponto de referncia (salvamento) na transao;
SET TRANSACTION para alterar o modo de consistncia de leitura em uma transao.

Savepoint

Especifica um ou mais pontos de referncia (savepoint ou salvamento) a serem criados.


Estes nomes devem ser distintos dentro de uma mesma transao. uma marca
intermediria criada pelo usurio no contexto de uma transao.
Se um segundo savepoint criado utilizando-se um mesmo identificador (j usado
previamente), ento o savepoint anterior perdido (cancelado).
Depois que um savepoint declarado explicitamente, as seguintes alternativas so
possveis:
1) Tornar permanente as mudanas em uma transao (COMMIT);
2) Desfazer as mudanas em uma transao, desde seu incio (ROLLBACK);
3) Desfazer as mudanas realizadas at uma determinada marca (ROLLBACK TO
SAVEPOINT).
Importante:
ROLLBACK finaliza uma transao;
ROLLBACK TO SAVEPOINT no finaliza uma transao.

Exemplo

CREATE TABLE Funcionario


(matricula
NUMBER(5),
nome
VARCHAR2(30),
depto
NUMBER(2),
salario
NUMBER(10));
INSERT INTO funcionario VALUES (1, 'Daniel', 10, 100000);
INSERT INTO funcionario VALUES (2, 'Helena', 20, 100000);
INSERT INTO funcionario VALUES (3, 'Akito', 20, 50000);
INSERT INTO funcionario VALUES (4, 'Jaqueline', 20, 40000);
INSERT INTO funcionario VALUES (5, 'Ricardo', 20, 70000);
INSERT INTO funcionario VALUES (6, 'Joao', 20, 30000);
INSERT INTO funcionario VALUES (7, 'Clark', 20, 90000);
COMMIT;

Exemplo

SELECT nome, salario FROM funcionario WHERE nome in (Akito,Daniel);


UPDATE funcionario
SET salario = 7000
WHERE nome = 'Daniel';
SAVEPOINT daniel_savepoint;
UPDATE funcionario
SET salario = 12000
WHERE nome = 'Akito';
SAVEPOINT akito_savepoint;
SELECT nome, salario FROM funcionario WHERE nome in (Akito,Daniel);
ROLLBACK TO SAVEPOINT daniel_savepoint;
SELECT nome, salario FROM funcionario WHERE nome in (Akito,Daniel);
UPDATE funcionario
SET salario = 11000
WHERE nome = 'Joao';
COMMIT;

Manipulao de Dados

DML (Data Manipulation Language) - Uma instruo DML executada quando feita:
Adio de novas linhas em uma tabela;
Modificao de linhas existentes em uma tabela;
Remoo de linhas existentes em uma tabela.

Transaes em Banco de Dados - Consiste de uma das seguintes instrues:


Instruo DML que faz uma alterao;
Instruo DDL;
Instruo DCL (GRANT e REVOKE).

Objetivos na Manipulao

1. Garantir a consistncia de dados;


2. Visualizar as alteraes nos dados antes de torn-las permanentes;
3. Agrupar operaes que se relacionam logicamente.

COMMIT Automtico - Ocorre sob as seguintes circunstncias:


A instruo DDL emitida;
A instruo DCL emitida;
A sada normal do SQL*Plus, sem emitir explicitamente COMMIT ou ROLLBACK.

ROLLBACK Automtico - Ocorre sob as seguintes circunstncias:


Finalizao anormal do SQL*Plus;
Queda do sistema.

Estado dos Dados

Antes do COMMIT/ROLLBACK:

1. O estado anterior dos dados pode ser recuperado;


2. O usurio atual pode revisar os resultados das operaes DML usando a instruo
SELECT;
3. Outros usurios no vero os resultados das instrues DML do usurio atual;
4. As linhas afetadas pelo comando so bloqueadas pelo usurio atual e outros usurios no
podem modific-las at que o usurio atual faa um COMMIT ou ROLLBACK.

Estado dos Dados

Aps o COMMIT:

1. As alteraes nos dados so feitas permanentemente no banco de dados;


2. O estado anterior dos dados perdido permanentemente;
3. Todos os usurios passam a ver os resultados;
4. As linhas afetadas so desbloqueadas, estando disponveis para manipulao por outros
usurios;
5. Todos os savepoints so apagados.

10 Consistncia de Leitura

A consistncia na leitura garante sempre uma exibio consistente dos dados;


As alteraes feitas por um usurio no entram em conflito com as alteraes feitas por
outro usurio;
A consistncia na leitura garante que nos mesmos dados:
Os leitores no esperem pelos autores;
Os autores no esperem pelos leitores.

10 Consistncia de Leitura

Durante todo o processamento de um comando SQL, o ORACLE mantm a consistncia


dos dados a partir do momento em que o comando foi iniciado.

Para o comando SELECT, o ORACLE marca o incio da sua execuo como o instante
(timestamp) a partir do qual a consistncia de leitura deve ser mantida.

A partir deste momento, quaisquer alteraes feitas em uma tabela por outros usurios no
sero vistas por quem emite um comando SELECT. Isto s ocorrer quando os outros
usurios terminarem suas transaes, com os comandos COMMIT ou ROLLBACK.

Todas as alteraes de dados so mantidas em um local no ORACLE chamado Segmento


de Rollback. Na execuo de um SELECT em uma tabela, este ser o local onde o
ORACLE ler os valores antigos, e no nos blocos de dados originais (alterados).

11 Exemplo

s dez horas o usurio A executa o comando UPDATE, mas no efetiva a alteraes.


10 h 00 min SQL> UPDATE EMP ...;

s dez horas e um minuto o usurio B pesquisa a tabela EMP. Ele no enxerga as


alteraes feitas pelo usurio A. A partir do segmento de rollback (que registrou a alterao
do usurio A) ser trazido o valor antigo dos dados, ocorrendo a consistncia da leitura.
10 h 01 min SQL> SELECT ... FROM emp;

s dez horas e dois minutos o usurio A efetiva sua transao. Neste momento os
segmentos de rollback que estavam alocados so liberados para uso em novas transaes
(sem apagar seu contedo).
10 h 02 min SQL> COMMIT;

Finalmente, s dez horas e trs minutos o usurio B passa a enxergar as alteraes feitas
na tabela EMP (pelo comando UPDATE) do usurio A, pois a transao foi terminada e
efetivada com o comando COMMIT.
10 h 03 min SQL> SELECT ... FROM emp;

11 Exemplo

Vous aimerez peut-être aussi