Curso: Ciência da Computação Disciplina: Banco de Dados Campus Lages Controle de Transação Prof. Edjandir C. Costa [email protected] Agenda ● Introdução ao processamento de transações ● Conceitos de transação e sistema ● Propriedades desejáveis das transações ● Suporte para transação em SQL ● Aplicação com o banco de dados Postgresql Introdução ao processamento de transações ● ● O conceito de transação oferece um mecanismo para descrever unidades lógicas de processamento de banco de dados; Os sistemas de processamento de transação são sistemas com grandes bancos de dados e centenas de usuários simultâneos que executam transações de banco de dados. Ex: Sistemas bancários, reservas aéreas, compras online e outros. Introdução ao processamento de transações ● ● ● Os sistemas exigem alta disponibilidade e tempo de resposta rápido; O conceito de transação é usado para representar uma unidade lógica de processamento que deve ser concluída por inteiro para garantir a exatidão. Nesse contexto o controle de concorrência é essencial, pois várias transações submetidas ao mesmo tempo por diversos usuários interferem umas nas outras e podem produzir um resultado incorreto. Introdução ao processamento de transações ● ● Sistemas monousuários versus multiusuários: nos sistemas monousuário somente um usuário pode acessar o sistema enquanto nos sistemas multiusuários vários acessos são permitidos simultaneamente; No modelo multiusuário, o conceito de multiprogramação é utilizado para permitir que o SO execute vários processos ao mesmo tempo. Introdução ao processamento de transações ● Em arquiteturas com apenas 1 CPU, a execução dos processos é intercalada, enquanto em arquitetura com múltiplos processadores é possível realizar processamento em paralelo. A maior parte da teoria referente a controle de concorrência é desenvolvida em relação à concorrência intercalada. Introdução ao processamento de transações ● ● Uma transação é um programa em execução que forma uma unidade lógica de processamento de banco de dados. Ela inclui uma ou mais operações de acesso ao banco de dados – estas podem incluir operações de inserção, exclusão, modificação ou busca. Um modo de especificar os limites de transação é determinando pelas explícias begin transaction e end transaction em um programa de aplicação. Nesse caso, as operações entre os dois marcadores são consideradas formando uma transação. Introdução ao processamento de transações ● Se as operações de banco de dados em uma transação não atualizarem os dados, mas apenas recuperarem dados, a transação é chamada de transação somente de leitura; caso contrário, ela é conhecida como transação de leitura-gravação. Introdução ao processamento de transações ● Os mecanismos de controle de concorrência e recuperação tratam principalmente dos comandos de banco de dados em uma transação. As transações submetidas pelos diversos usuários podem ser executadas simultaneamente, acessar e atualizar os mesmo itens de banco de dados. Se a execução simultânea não for controlada, ela pode ocasionar problemas, deixando o bando de dados inconsistente. Introdução ao processamento de transações Por que o controle de concorrência é necessário? ● Problema de atualização perdida: duas transações que acessam os mesmos itens do banco de dados têm suas operações intercaladas o que torna o valor de alguns itens incorretos. Introdução ao processamento de transações Por que o controle de concorrência é necessário? ● Problema da atualização temporária (leitura suja): ocorre quando uma transação atualiza um item do banco de dados e depois a transação falha por algum motivo. Nesse meio-tempo, o item atualizado é lido por outra transação, antes de ser alterado de volta para seu valor original. Introdução ao processamento de transações Por que o controle de concorrência é necessário? ● Problema do resumo incorreto: se uma transação está calculando uma função de resumo de agregação em uma série de itens de banco de dados, enquanto outras transações estão atualizando alguns desses itens, a função de agregação pode calcular alguns valores antes que eles sejam atualizados e outros depois. Introdução ao processamento de transações Por que o controle de concorrência é necessário? ● Problema da leitura não repetitiva: acontece quando uma transação lê o mesmo item duas vezes e o item é alterado por outra transação entre as duas leituras. Logo, a primeira transação recebe valores diferentes para suas duas leituras do mesmo item. Introdução ao processamento de transações Por que a recuperação é necessária ● O sistema deve garantir que todas as operações na transação sejam concluídas com sucesso, e assim persistindo no banco de dados ou que a transação não tenha qualquer efeito. No primeiro caso a transação é considerada confirmada (commited), e no segundo, a transação é abortada. Se a transação falhar em alguma de suas operações, mas antes de executar todas elas, as já executadas precisam ser desfeitas (rollback). Introdução ao processamento de transações Tipos de falhas: 1) Falha do computador/sistema: erro de hardware, rede durante a execução de uma transação; 2) Erro de transação ou do sistema: erro de programação; 3) Erros locais ou condições de exceção: podem ocorrer condições que necessitam de cancelamento da transação. Saldo insuficiente da conta, por exemplo; 4) Imposição de controle de concorrência: devido a violação de serialização ou deadlocks. São reiniciadas automaticamente em outro momento; 5) Falha de disco: erro durante uma operação de leitura ou gravação da transação; 6) Problemas físicos ou catástrofes: lista sem fim de problemas, desde falha elétrica a incêndio. Introdução ao processamento de transações As falhas dos tipos 1, 2, 3 e 4 são mais comuns do que as dos tipos 5 e 6. Sempre que ocorrer uma falha dos tipos 1 a 4, o sistema precisa manter informações suficientes para recuperar-se rapidamente da falha. O conceito de transação é fundamental para muitas técnicas de controle de concorrência e recuperação de falhas. Conceitos de transação e sistema Estados de transação e operações Para fins de recuperação, o sistema precisa registrar quando cada transação começa, termina e confirma ou aborta. Desse modo o SGBD precisa acompanhar as seguintes operações: ● ● ● BEGIN_TRANSACTION: marca o início da transação READ ou WRITE: operações de leitura ou gravação nos itens do banco de dados que acontecem dentro da transação END_TRANSACTION: marca o final da execução da transação. Conceitos de transação e sistema Estados de transação e operações ● ● COMMIT_TRANSACTION: sinaliza um final bem sucedido da transação de modo que as mudanças podem ser confirmadas no banco de dados; ROLLBACK (ou ABORT): transação finalizada sem sucesso, as operações precisam ser desfeitas. Conceitos de transação e sistema Log do Sistema ● Para recuperar-se de falhas que afetam as transações, o sistema mantém um log para registrar todas as operações de transação que afetam os valores dos itens de banco de dados. O log é um arquivo sequencial, apenas para inserção, que é mantido no disco, de modo que não é afetado por qualquer tipo de falha, exceto por uma pane no disco. Conceitos de transação e sistema Ponto de confirmação de uma transação ● Uma transação alcança seu ponto de confirmação quando todas suas operações tiverem sido executadas com sucesso e o efeito tenha sido registrado no log. Além do ponto de confirmação, a transação é considerada confirmada, e s e u e f e i t o d e v e s e r r e g i s t r a d o permanentemente no banco de dados. Conceitos de transação e sistema Propriedades desejáveis das transações ● ● Atomicidade: u m a t r a n s a ç ã o é u m a u n i d a d e d e processamento atômica; ela deve ser realizada em sua totalidade ou não ser realizada de forma alguma; Consistência: u m a t r a n s a ç ã o d e v e p r e s e r v a r a consistência. Se ela for completamente executada do início ao fim, sem interferência de outras transações, deve levar o banco de dados de um estado ao outro; Conceitos de transação e sistema Propriedades desejáveis das transações ● ● Isolamento: um transação deve parecer como se fosse executada isoladamente de outras transações, mesmo quando elas sejam executadas simultaneamente. Durabilidade: as mudanças aplicadas ao banco de dados pela transação confirmada precisam persistir no banco de dados. Essas mudanças não devem ser perdidas por causa de alguma falha. ACID Suporte para transação em SQL Em SQL não existe uma instrução Begin_Transaction explícita. O início da transação é feito implicitamente quando instruções SQL em particular são encontradas. Porém, cada transação precisa ter um COMMIT ou um ROLLBACK. Cada transação tem características atribuídas a ela que são especificadas por uma instrução SET TRANSACTION. As características são: modo de acesso, tamanho da área de diagnóstico e o nível de isolamento. Suporte para transação em SQL ● ● ● Modo de acesso: READ ONLY ou READWRITE (default); Tamanho da área de diagnóstico: número de condições que podem ser mantidas de maneira simultânea na área de diagnóstico; Nível de isolamento (ISOLATION LEVEL): READ UNCOMMITED, READ COMMITED, REPEATABLE READ ou SERIALIZABLE (nível máximo). Suporte para transação em SQL Leitura suja: uma transação pode ler a atualização de outra transação que ainda não foi confirmada Leitura não repetitiva: uma transação faz a leitura de uma valor de uma tabela. Se outra transação atualizar esse valor, uma nova leitura da primeira transação retorna um valor diferente do original. Fantasma: uma transação lê linhas de tabela com base em alguma condição especificada pela cláusula WHERE. Se uma outra transação inserir uma nova linha que também satisfaça a cláusula WHERE a primeira transação verá uma linha que não existia inicialmente. Suporte para transação em SQL Bibliografia Para elaborar esta apresentação utilizei a seguinte referência bibliográfica: NAVATHE, Shamkant B.; ELMASRI, Ramez. Sistemas de banco de dados. Tradução de Daniel Vieira. 6. ed. São Paulo: Pearson Addison-Wesley, 2011. 788 p., il., 28 cm. Bibliografia. ISBN 9788579360855.