Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Transações
• Mecanismo que valida (ou anula) conjuntos de operações básicas na base de dados de uma maneira atômica, ou todas as operações elementares pertencentes à transação são confirmadas, ou são todas anuladas e é como se nunca tivessem existido.
INSERT INSERT DELETE UPDATE INSERT UPDATE UPDATE
TRANSAÇÃO TRANSAÇÃO Tempo COMMIT OU ROLLBACK COMMIT OU ROLLBACK
Gerenciamento de Transações
Propriedade das Transações - ACID
• Atomicidade – Trata o trabalho como parte indivisível (atômico). A transação deve ter todas as suas operações executadas em caso de
sucesso ou nenhum resultado de alguma operação refletido sobre a base de dados em caso de falha. Após o término de uma transação (commit ou
rollback), a base de dados não deve refletir resultados parciais da
transação.
• Consistência – a execução de uma transação leva a base de dados de um estado consistente para um novo estado consistente.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Propriedade das Transações - ACID
• Isolamento – Tudo se parece como se o trabalho estivesse isolado. O resultado de uma transação executada concorrentemente a outra deve ser o mesmo que o de sua execução de forma isolada. Operações
exteriores a uma dada transação jamais verão esta transação em estados intermediários.
• Durabilidade – Os efeitos de uma transação em caso de sucesso (commit) são permanentes mesmo em presença de falhas.
Gerenciamento de Transações
Atomicidade - Exemplo
• Transferência de R$ 10.000,00 entre duas contas bancárias: 1. Débito de R$ 10.000,00 da conta de origem,
2. Crédito de R$ 10.000,00 da conta de destino.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Transações e Instruções DML e DDL
• Transações DML podem conter qualquer número de instruções DML. • Transações DDL podem conter apenas uma instrução DDL.
INSERT INSERT UPDATE INSERT UPDATE UPDATE TRANSAÇÃO DML TRANSAÇÃO DML Tempo CREATE TABLE TRANSAÇÃO DDL Termina a transação corrente e inicia nova transação Termina a transação DDL e inicia nova transação
Gerenciamento de Transações
Processamento de Transações
• Uma transação começa quando é encontrado o primeiro comando DML logo após a conclusão da transação anterior.
• Uma transação termina quando:
- COMMIT transação é confirmada - ROLLBACK transação é abortada - Comando DDL transação é confirmada - Detecção de Erros transação é abortada - Saída da Seção SQL (exit) transação é confirmada - Saída da Seção SQL (abort) transação é abortada
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Durante a Transação
• Enquanto as alterações introduzidas durante a transação corrente não forem confirmadas (Commit), estas alterações:
– são visíveis para o dono da transação;
– são invisíveis para as outras transações (estes vêem o estado após o último Commit);
Gerenciamento de Transações
Rollback Automático
• Se durante a fase de execução de um comando DML, for detectado um erro é feito Rollback do comando (é como se o comando nunca tivesse sido iniciado)
• Possíveis erros detectados:
– tentativas de violação de integridade; – incompatibilidade de dados;
– Esgotamento do espaço disponível para a tabela; – Etc
• Todas as alterações provocadas pela execução parcial do comando (até à detecção do erro) são desfeitas.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Instruções SQL para Controle da Transação
• COMMIT • ROLLBACK
Gerenciamento de Transações
COMMIT
• Termina explicitamente transação corrente:
– Torna definitivas as alterações efetuadas durante a transação; – Libera os bloqueios da transação.
• Lembrar que a transação também pode terminar de uma maneira implícita (sem o comando Commit) quando:
– Antes de uma instrução DDL; – Depois de uma instrução DDL; – Ao sair da sessão SQL.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
ROLLBACK
• ROLLBACK
– Termina a transação abortando-a;
– Desfaz todas as alterações efetuadas desde o início da transação; – Libera os bloqueios da transação.
Gerenciamento de Transações
Segmentos de Rollback
• Parte da base de dados onde são registradas as ações de uma transação que podem vir a serem desfeitas (rolled back) em certas circunstâncias; • Os segmentos de rollback contêm os valores antigos relativos a todas as
alterações efetuadas em dados durante uma transação;
• Cada base de dados contém um ou mais segmentos de rollback;
• Os segmentos de rollback são uma estrutura interna manipulada pelo SGBD e não pode ser acessada pelos usuários nem pelo administrador do banco de dados.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Segmentos de Rollback: utilização
• Os segmentos de rollback são utilizados para: – Assegurar a consistência de leituras;
– Efetuar o rollback de transações;
Gerenciamento de Transações
Consistência da leitura
• Garantir que cada usuário vê os dados conforme eles existiam no momento da última confirmação (commit).
• Só depois de confirmadas (pelo commit da transação corrente) é que as últimas alterações se tornam visíveis para todos os usuários.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Blocos de Dados Segmentos de Rollback Usuário A Transação T1 UPDATE MERCADORIA(valor) SET VALOR = 197 WHERE MERC_ID = 104 Novo valor do registro Identificação da alteração e valor antigo do registro
Gerenciamento de Transações
Blocos de Dados Usuário A Transação T1 UPDATE MERCADORIA(valor) SET VALOR = 197 WHERE MERC_ID = 104;SELECT * FROM MERCADORIA;
Leituras durante a transação onde o usuário é o dono da transação
As leituras durante T1 são feitas sobre os dados alterados.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Blocos de Dados Segmentos de Rollback Usuário B Transação T2
SELECT * FROM MERCADORIA;
Leituras de outros usuários durante a transação
Outros usuários vêem os
dados como estavam no início da transação T1 do usuário A
Gerenciamento de Transações
Outros aspectos dos segmentos de rollback
• Sempre que começa uma transação é atribuído um segmento de rollback a essa transação.
• Cada segmento de rollback pode tratar mais do que uma transação. • Durante a transação, para cada alteração efetuada é guardado (entre
outras coisas) o valor antigo do registro no segmento de rollback correspondente.
• Em caso de necessidade são atribuídos novos segmentos de rollbck à transação.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Segmentos de rollback: commit
• Quando uma transação se encerra por commit a informação de rollback é liberada;
• Contudo, permanecerá no segmento de rollback de modo a fornecer uma visão consistente dos dados, no caso de haver consultas (de outros
usuários) sobre esses dados que tenham começado antes do commit; • Só quando a informação de rollback já não é necessária para garantir a
Gerenciamento de Transações
Segmentos de rollback: rollback
• Todas as alterações efetuadas durante a transação são desfeitas usando a informação de rollback armazenada no(s) segmento(s) correspondente(s);
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Concorrência e consistência
• Necessidade de bloqueios
• Sempre que um usuário tenta introduzir alterações na base de dados (acessos de escrita);
• Nunca são necessários bloqueios quando o acesso à base de dados é de leitura;
– Os acessos de leitura nunca bloqueiam os acessos de escrita; – Os acessos de escrita nunca bloqueiam os acessos de leitura; • Só acessos de escrita podem bloquear outros acessos de escrita.
Gerenciamento de Transações
Bloqueios: idéia básica
• Durante uma transação, todos os registros (tabelas) alterados são
automaticamente bloqueados de modo a impedir que outras transações os possam alterar simultaneamente;
• Se uma transação tentar alterar um objeto previamente bloqueado por outra transação ficará suspensa em lista de espera até que esse objeto seja liberado;
• No final de uma transação todos os objetos bloqueados pelas instruções dessa transação são liberados.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Tipos de Bloqueios
• Bloqueio do dicionário de dados:
– Permite controlar o acesso à definição de objetos na base de dados (ex. tabelas através de instruções CREATE TABLE, ALTER TABLE, DROP TABLE);
– É controlado automaticamente pelo SGBD. • Bloqueio de manipulação de dados:
– Permite controlar o acesso aos dados nas tabelas;
– O SGBD bloqueia implicitamente as tabelas/registros que estão sendo alterados por um usuário;
• Um usuário pode adquirir explicitamente um bloqueio numa tabela da base de dados.
Gerenciamento de Transações
Níveis de bloqueio (dados)
• Bloqueio de tabela - aplica-se a toda a tabela;
• Bloqueio de registro - aplica-se apenas a um registro de uma determinada tabela.
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Bloqueio explícito
• Um usuário pode adquirir explicitamente um bloqueio quando:
– Pretende consultar dados em várias tabelas e quer ter a certeza de obter uma visão consistente dos dados nas tabelas;
• Uma transação necessita alterar dados com base em outros dados que não podem ser alterados até a transação estar concluída.
Gerenciamento de Transações
Aquisição de bloqueios explícitos
• Através das instruções SQL SELECT ... FOR UPDATE OF LOCK TABLE
Gerenciamento de Transações
Programação em Banco de Dados 19/05/2016 Prof. Mario Assis
Impasses (deadlock)
• Podem gerar-se situações de impasse quando dois ou mais usuários tentam acessar aos mesmos dados e cada usuário fica à espera dos objetos detidos pelo outro usuário.
• Para maior compreensão dos alunos, em sala de aula foi reproduzido um deadlock.