Buscar

Transactions and Transaction Management

Prévia do material em texto

Instituto Federal do 
Sudeste de Minas Gerais
Tecnologia em Sistemas para Internet
Alunos
▷ Armando Assunção
▷ Richardson William
▷ Samuel Gonçalves
▷ Wagner Almeida
Transações
Transações
▷ Conjunto de operações em DML, delimitadas 
por um inicio e um fim;
▷ Permitem alterações consistentes dos dados;
▷ Iniciam quando se executa o primeiro comando 
SQL e terminam de acordo com situações pré-
determinadas.
Vantagens
▷ Permitem mais flexibilidade e controle durante 
a alteração de dados;
▷ Garantem a consistência de dados em caso de 
falha de processo do usuário ou falha do 
sistema.
Inicio de uma transação quando:
▷ Uma transação começa quando a primeira 
instrução DML é encontrada;
▷ Para terminar uma transação, existem vários 
cenários possíveis.
Término de uma transação quando:
▷ Uma instrução COMMIT ou ROLLBACK 
(diferente de ROLLBACK TO) é executada;
▷ Uma instrução DDL, como CREATE, é 
executada;
▷ Uma instrução DCL é executada;
▷ O usuário sai do iSQL *Plus;
▷ Ocorre uma falha do sistema.
Término de uma transação
▷ 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.
Dica
▷ Aplicações devem explicitar o commit ou 
rollback de transações antes da finalização do 
programa.
▷ Como vimos anteriormente:
○ Se o usuário finaliza a sessão, a transação é 
comitada;
○ Caso contrário (se o processo é encerrado e 
a sessão finaliza de forma anormal) a 
transação é cancelada - ocorre rollback.
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;
▷ Permitem controlar as alterações permanentes 
nos dados;
▷ O comando COMMIT e utilizado para comitar a 
transação;
▷ Indica que a transação foi finalizada com 
sucesso;
▷ Grava definitivamente as alterações realizadas 
pela transação, atualizando o banco de dados.
Comitando Transações
Cancelando Transações (Rollback)
▷ O comando ROLLBACK cancela a transação, 
desfazendo todas as ações realizadas até o 
momento;
▷ Utilizado quando for identificado que o 
resultado de uma ação em uma transação gera 
inconsistência nos dados;
Savepoints em Transações
▷ SAVEPOINTS são utilizados para criar uma 
marca na transação, do qual pode se desfazer 
toda a operação até aquela marca;
▷ SAVEPOINT nome_savepoint: para definir o 
nome do SAVEPOINT;
▷ Para utilizar o savepoint utiliza-se o comando 
ROLLBACK TO nome_do_savepoint.
Exemplo 1
DECLARE
 …
BEGIN
 UPDATE funcionarios SET salario = 2000 WHERE id_func = 1;
 DELETE FROM funcionarios WHERE id_func = 16;
 SAVEPOINT do_insert;
 INSERT INTO funcionarios VALUES (1,’teste’,1200,’t@teste.com’,3);
COMMIT;
EXCEPTION
 WHEN DUP_VAL_ON_INDEX THEN
 ROLLBACK TO do_insert;
END;
Exemplo 1
▷ No exemplo 1, ao se tentar inserir um novo 
dado, isto viola a restrição de chave primária, 
mas a transação não é completamente 
abortada;
▷ Apenas o ponto que foi capturado pela exceção 
(inserção de um novo dado) não é executado, 
ocorrendo um rollback_to até o ponto de 
salvamento antes desta instrução.
Exemplo 2
BEGIN
 UPDATE funcionarios SET salario = 1999 WHERE id_func = 1;
 DELETE FROM funcionarios WHERE id_func = 15;
 SAVEPOINT do_insert;
 INSERT INTO funcionarios VALUES (1,’teste’,1200,’t@teste.com’,
3);
COMMIT;
END;
Exemplo 2
▷ O exemplo 2 é bem parecido com o primeiro, 
com a diferença de não ter sido capturada a 
exceção e não ser executado o rollback_to;
▷ Isso faz com que ocorra um erro, e nenhuma das 
operações desta transação seja executada.
Gerenciamento de Transações
Nomeando Transações
▷ Transações podem ser nomeadas com um texto 
simples.
▷ Este nome é um lembrete do que a transação se 
trata.
▷ Para nomear uma transação, deve-se usar:
 SET TRANSACTION NAME <nome>.
▷ Quando se nomeia uma transação, esta é 
associada ao seu ID.
▷ Os nomes não precisam ser únicos. Diferentes 
transações podem ter o mesmo nome ao mesmo 
tempo pelo mesmo dono.
Nomeando Transações
Vantagens de Transações nomeadas
▷ Facilidade de monitorar longas transações.
▷ Podem ser utilizadas em conjunto com os ID’s 
de transação.
▷ Mineradores de log podem usar nomes de 
transação para pesquisas no registro de 
alterações.
Comentários de Commit
▷ Em versões anteriores, uma transação poderia 
ser associada a um comentário no commit.
▷ No entanto, um comentário pode ser associado 
a uma transação apenas quando houver um 
commit.
▷ Comentários de commit estão em processo de 
depreciação. Nomes de transação são 
altamente recomendados pela Oracle.
Caso de uso - Transações autônomas
▷ Suponha que uma aplicação deve guardar 
registros de auditoria:
○ Um usuário alterar uma tabela de 
funcionários;
○ Uma trigger dispara e insere na tabela 
de auditoria o ocorrido.
▷ Neste caso, uma transação deve ser 
independente da outra.
Transações Autônomas
▷ São transações independentes que podem ser 
chamadas dentro de outra transação.
▷ A transação principal é suspensa durante a 
execução da transação autônoma.
▷ São úteis para a realização de ações que devem 
ser executadas de forma independente.
Transações Autônomas
Figura 1: Execução de uma transação autônoma. A transação 
principal aguarda o término da execução da transação 
autônoma.
▷ Transações autônomas não vêm as mudanças 
realizadas e não compartilha recursos com a 
transação principal.
▷ As mudanças realizadas pela transação 
autônoma serão visíveis para outras transações 
após o commit da transação autônoma.
▷ Transações autônomas podem chamar outras 
transações autônomas. Não há limites de níveis 
de chamada.
Características
Transações Distribuídas
▷ São transações que processam dados em dois 
ou mais nós de um banco de dados distribuído;
▷ Utilizam um objeto de esquema chamado link de 
banco de dados;
▷ O link de banco de dados descreve como um nó 
de banco de dados distribuído pode se conectar 
em outro nó;
Transações Distribuídas
▷ Uma transação distribuída altera dados em 
vários nós de um bancos de dados distribuído;
▷ Isso faz com que seu processamento seja mais 
complexo;
▷ O Oracle Database deve ser capaz de coordenar 
o controle de transações de forma distribuída, 
mantendo a consistência dos dados, mesmo se 
ocorrer uma falha de rede ou de sistema.
Transações Distribuídas
Figura 2: Visão de acesso a um banco de dados distribuído.
Exemplo de uma transação 
distribuída
BEGIN
UPDATE scott.dept@hq.us.example.com
 SET loc = 'REDWOOD SHORES' WHERE deptno = 10;
UPDATE scott.emp
 SET deptno = 11 WHERE deptno = 10;
UPDATE scott.bldg@maint.us.example.com
 SET room = 1225 WHERE room = 1163;
COMMIT;
END;
Importante
▷ Mesmo que um banco de dados trabalhe de 
forma distribuída, se as operações de uma 
transação forem executadas em apenas um nó, 
a transação é classificada como uma transação 
remota, não distribuída.
Registro das transações
▷ O ORACLE registra todas as alterações feitas em um 
banco de dados na estrutura redo log buffer cache;
▷ Um processo LGWR escreve as informações desses 
buffers para o disco;
▷ Um outro processo conhecido como ARCH pode ser 
opcionalmente utilizado para armazenar as informações 
sobre as alterações feitas nos dados em outro 
dispositivo, sempre que um arquivo redo log for 
preenchido;
Registro das transações
▷ Somente um arquivo redo log é utilizado por vez, 
entretanto em um banco de dados podem existirdiversos arquivos de redo log;
▷ O seu número mínimo é de dois grupos, cada um 
deles podendo conter um ou mais arquivos.
O que acontece quando um COMMIT 
é executado?
▷ Um usuário emite o comando COMMIT para 
finalizar sua transação;
▷ Um registro desse COMMIT é colocado no redo log 
buffer;
▷ O processo em background LGWR grava as 
entradas de redo log dos buffers para o arquivo 
redo log correntemente em uso, se possível usando 
uma gravação multi-bloco;
O que acontece quando um COMMIT 
é executado?
▷ O usuário é notificado de que a transação foi 
efetivada;
▷ Os locks nos recursos são liberados assim como 
os blocos do segmento de rollback alocados 
para a transação do usuário.
Referências
▷ Centro de Ajuda Oracle - Conceitos de Banco 
de Dados - Transações
▷ Centro de Ajuda Oracle - Guia do administrador 
de banco de dados - Conceitos de Transações 
Distribuídas.

Continue navegando