BANCO DE DADOS 2 Reconstrução (“recovery”) • Idéia básica TRANSAÇÃO Prof. Edson Thizon Tipos de falhas (1) – Em algum momento no tempo, todo sistema computacional apresentará uma falha. • O SGBD deve incorporar mecanismos de proteção e recuperação em caso de falhas Tipos de falhas (2) • Falha de transação – Uma transação que está executando alterações sobre a base de dados termina de forma anormal – Causas: • erro no programa que executa a transação, cancelamento por Deadlock, interrupção pelo usuário,… • Demais programas permanecem em execução • Falha de sistema • Falha no meio de armazenamento – Parte ou toda a base de dados está inacessível ou incorreta (falha no meio de armazenamento, falha na controladora, programas fazem alterações incorretas,…) – O SGBD encerra sua execução enquanto há transações de alteração em execução – Causas: • erro interno no SGBD, problema de execução no software que suporta o SGBD, falha no hardware, problema na alimentação, … Princípios • Princípio básico dos mecanismos de reconstrução: – Redundância de informações • Limitação fundamental: – Não existe esquema de reconstrução completamente seguro • Objetivo da reconstrução – Levar a base de dados há um estado no passado em que os dados estão garantidamente corretos (nenhuma transação estava sendo executada) – Refazer transações – Informar usuários sobre as últimas transações executadas Mecanismo genérico de reconstrução usado pelo SGBD(1) • Periodicamente a base de dados é copiada integralmente para outro meio físico de armazenamento (tipicamente fita magnética): “backup dump”. • Cada vez que é executada uma alteração sobre uma linha de uma tabela é criado um registro de “log” 1 Mecanismo genérico de reconstrução usado pelo SGBD(1) • Ocorrendo uma falha, existem duas possibilidades de acordo com estado da base de dados: – A base de dados está danificada • Carregar a base de dados a partir da última cópia de segurança feita • Refazer as transações (“redo”) executadas desde a cópia, usando as imagens posteriores do arquivo de “log” – A base de dados não está danificada, mas seu conteúdo não é confiável, pois quando da falha, havia transações em execução • Desfazer transações (“undo”), usando imagens posteriores, até atingir um estado confiável (em que não havia transações sendo executadas) Propriedade desejáveis de transações (ACID) • Atomicidade – Uma transação é uma unidade indivisível de alteração da base de dados: ou ela é executada por completo, ou então nada é executado • preserva Consistência – Uma transação leva a base de dados de um estado consistente a outro estado consistente (durante a execução da transação, a base de dados pode passar por um estado inconsistente) • Isolamento – Outras transações não devem “ver” alterações parcialmente realizadas por uma transação, até seu encerramento com sucesso • Durabilidade – Quando a execução de uma transação for confirmada ao usuário, ela deve passar a ser permanente, ou seja não deve ser desfeita pelo SGBD Recuperação de erro de transação • Deve ser executada pelo SGBD quando uma transação que estava sendo executada é cancelada (explicita- ou implicitamente): – Programa que executava a transação foi descontinuado (divide-byzero,…) – Usuário executou ABORT-TRANSACTION • Recuperação: – Os efeitos da transação em execução devem ser desfeitos (“undo”) – Somente estes efeitos são atingidos pela reconstrução – Consequência • O arquivo de “log” deve ser acessável de forma randômica • Não pode haver outros usuários que "viram" os dados alterados pela transação (isolamento) Transação • Nem sempre aquilo que do ponto de vista do usuário é uma operação atômica pode ser executado por uma única instrução de banco de dados. • Exemplo: – Incluir um pedido e seus itens (corresponde a duas instruções INSERT de SQL) • Consequência: – É necessário um mecanismo que permita informar ao SGBD que um conjunto de alterações forma uma transação Instruções para controle de transação • Uma instrução isolada de SQL é considerada uma transação. • Quando um usuário necessitar montar transações mais complexas pode usar as seguintes instruções – BEGIN-TRANSACTION • O usuário sinaliza ao SGBD que está iniciando uma transação • É escrito um registro correspondente no arquivo de “log” – COMMIT-TRANSACTION • O usuário sinaliza ao SGBD que está encerrando com sucesso a transação • Com isso está confirmando ao SGBD todas alterações feitas desde a execução do BEGIN-TRANSACTION • É escrito um registro correspondente no arquivo de “log” – ABORT-TRANSACTION • O usuário sinaliza ao SGBD que todas as alterações realizadas desde o último BEGIN-TRANSACTION devem ser desfeitas, pois há problemas na transação. • O SGBD deve executar uma operação de “undo” • É escrito um registro correspondente no arquivo de “log” Recuperação de falha no sistema • O SGBD parou de executar • Operações de escrita em meio físico podem ter sido perdidas. • Buffers em memória podem ter sido perdidos • Todas transações que estavam em execução devem ser desfeitas • Questão: – Como o SGBD sabe quais as transações que estavam em execução? – Poderia implicar em uma busca em todo arquivo de “log” de trás para diante. 2 “Check-point” • De tempos em tempos, o SGBD escreve no arquivo de “log” um registro especial chamado “check-point”, que serve para registrar quais as transações que estavam em execução • A execução de um “check-point” envolve: – Descarregar todos os buffers do arquivo de “log” (para garantir que o efeito de todas operações realizadas até este ponto estejam registradas no arquivo de “log”) – Escrever um registro de “check-point” no arquivo de “log” – Descarregar todos os buffers da base de dados (garantido que todas operações realizadas até o ponto tenham sido registradas) – Escrever na base de dados o endereço “último registro de checkpoint”. Reconstrução em sistemas comerciais • Oracle7 e Sybase oferecem reconstrução “on-line”, isto é, apenas aqueles usuários afetados pela reconstrução são desconectados - os demais não tomam conhecimentos da reconstrução • Oracle7 permite que, em máquinas com múltiplos processadores sejam geradas paralelamente diversas cópias de segurança e que a reconstrução também aconteça de forma paralela. Controle de transação no Oracle • No Oracle a técnica utilizada para implementar o gerenciamento de uma transação é a de Arquivos de Log, a qual é onde fica registradas as ações praticadas sobre o Banco de Dados Recuperação de falhas no meio de armazenamento • A base de dados está danificada. Deve ser usada uma cópia de segurança. A partir dela, todas operações sobre a área afetada devem ser refeitas. A cópia de segurança pode ser de diferentes tipos: – Total • Toda a base de dados é copiada. • Não podem existir transações em execução (cópia “off-line”). – Parcial • Parte da base de dados é copiada. • Outras partes podem continuar em uso. – Incremental • Somente as partes da base de dados que foram alteradas desde a última cópia total são copiadas. – “On-line” • A base de dados é copiada enquanto transações são executadas. • Mecanismo de estampas de tempo é usado para sincronizar as cópias com o arquivo de “log”. Transação - ORACLE • As transações são terminadas por um dos seguintes comandos: • Commit: executa a efetivação da transação corrente e começa uma nova; • Rollback: aborta a transação corrente; UPDATE emp SET sal=sal*1.1 WHERE empno=7369 Server process 1 Instance SGA 4 5 Shared pool Library cache Database buffer cache Redo log buffer Data dictionary cache 3 2 Data files Control files Database Redo log files 3 Locks 1 Instance SGA Server process 4 Database buffer cache Shared pool Redo log buffer LGWR 3 2 User process Data files Control files Database Redo log files Niveis de Locks Há normalmete Independente da nomenclatura dada por fornecedores de SGBDs, dois níveis de locks importante: • Locks exclusivos • Locks Compartilhados Locks Compartilhados Chamados de SLOCKS, são usados para permitir que mais de um usuário acesse o mesmo dado ao mesmo tempo. É especialmente utilizado em casos de pesquisa em tela, por exemplo. Locks são recursos de compartilhamento de dados, que permitem que o dado seja atualizado e pesquisados dentro de um ambiente multiusuário de maneira segura e que lhes garanta confiabilidade e integridade. Através dos locks é possível garantir a atualização a um único usuário ou a pesquisa a vários. Locks Exclusivos Chamados de XLOCKS, são usados para garantir o uso de um determinado dado por um único usuário. É especialmente utilizado em casos de atualizações. Quando um usuário adquire um nível de lock sobre um dado, ele pode requisitar outro nível ao SGBD. A este conceito damos o nome de Promoção de níveis de Locks 4 Distribuição de Dados • Há, na teoria 2 arquiteturas básicas de Banco de Dados no que se refere a distribuição dos dados: • Centralizados • Distribuídos TWO-PHASE COMMIT Uma transação usada em Banco de Dados Distribuído, que só é efetuada quando há recebimento da confirmação da possibilidade de atualização em todas as tabelas envolvidas. Referências Bibliográficas • HEUSER, Carlos Alberto. Fundamentos de Banco de Dados. UFRGS. • KORTH, Henry F. & SILBERSCHATZ, Abraham. Sistemas de Bancos de Dados, São Paulo. Ed. Makron Books, 1999. • FERNANDES, Lúcia. Oracle 9i Para Desenvolvedores Oracle Developer 6i Curso Completo. Ed. Axcel. 2002. 5