Académique Documents
Professionnel Documents
Culture Documents
Introduo
Sistema de computador
Sujeito a falhas
Quebra de disco Falha de energia Erro de software
Esquema de recuperao
Responsvel pela restaurao do BD para um estado consistente que havia antes da ocorrncia da falha
Sumrio
Sumrio
Classificao de falhas
Tipos
Falha de transao Queda do sistema Falha de disco
Falha de transao
Erro de sistema
O sistema entrou em um estado inadequado
Ex: deadlock Uma transao no pode continuar com sua execuo normal Pode ser reexecutada posteriormente
Queda do sistema
Falha de disco
Como recuperar-se de falhas Identificar modos de falha possveis Considerar como esses modos de falhas afetam o contedo do BD Desenvolver algoritmos para assegurar a consistncia do BD e a atomicidade da transao, a despeito de falhas
Algoritmos de recuperao. Duas partes:
Aes tomadas durante o processamento normal da transao
A fim de garantir que haja informao suficiente para permitir a recuperao
Sumrio
Estrutura de armazenamento
Itens do BD podem ser armazenados em diferentes meios de armazenamento Para compreender como garantir atomicidade e durabilidade
Entender como funcionam os meios de armazenamento e seus mtodos de acesso
Tipos de armazenamento
Armazenamento voltil Armazenamento no voltil Armazenamento estvel
No voltil
Informao sobrevive a quedas de sistema Exemplos
Disco: Armazenamento on-line Fitas magnticas: Armazenamento de arquivo
Sujeitos a falhas
Quebra de cabeote: Pode resultar em perda da informao
Armazenamento estvel
Implementao do armazenamento estvel Sistemas RAID garantem que a falha de um nico disco no resulte em perda de dados
Forma mais rpida e simples de RAID o disco espelhado
Mantm duas cpias de cada bloco em discos separados
Falha parcial
Uma falha ocorreu no meio da transferncia e o bloco de destino contm informao incorreta
Falha total
A falha ocorreu cedo o suficiente, de modo que o bloco de destino permanece intacto
Para isso
Manter dois blocos fsicos para cada bloco lgico do BD No caso de discos espelhados
Ambos no mesmo local
Se um bloco contm um erro detectvel Se ambos no contm erros detectveis, mas diferem no contedo
Implementao do armazenamento estvel (6) Exigir comparao entre cada par de blocos correspondentes durante a recuperao custoso Reduzir consideravelmente o custo
Mantendo uma varredura de escritas de bloco que esto em progresso
Usando uma pequena qtidade de RAM no voltil
Acesso de dados
Como vimos
Sistema de BD reside permanentemente em armazenamento no voltil
Geralmente discos
Acesso de dados (2) Transaes transferem informaes do disco para a memria principal e reenviam estas informaes de volta para o disco Operaes de entrada e sada (da memria) so feitas em unidades de bloco
Blocos residentes no disco
Blocos fsicos
Movimentos de blocos entre disco e memria principal so iniciados por meio de 2 operaes
Input (B): do disco para a
memria Transfere o bloco fsico B para a memria principal
Acesso de dados (4) Cada transao Ti tem uma rea de trabalho privada
Cpias de itens de dados acessados e atualizados so mantidas
Esta rea de trabalho efetivada ou abortada Cada item de dados x mantido na rea de trabalho da transao Ti denotado por xi Transao Ti interage com o sistema de BD pela transferncia de dados para e de sua rea de trabalho at o buffer de sistema Os dados so transferidos usando duas operaes:
Read Write
Operao output(B) para o buffer de bloco Bx em que x reside no precisa ter efeito imediato aps a execuo do write(x)
J que o bloco Bx pode conter outros dados que ainda esto sendo acessados
Ento a sada real aparecer mais tarde Se o sistema cair aps a operao write(x) ter sido executada
Mas antes do output(Bx)
O novo valor de x nunca ser escrito no disco
E portanto perdido
Sumrio
Recuperao e atomicidade
Exemplo
Transferncia de 50 reais da conta A para B Valores iniciais
A=1000 B=2000
Reexecutar Ti
Faz com que o valor de A torne-se 900, em vez de 950 Sistema entra num estado inconsistente
No reexecutar Ti
No estado corrente, A e B so 950 e 2000 Sistema entra em estado inconsistente
Logo
Este esquema de recuperao simples no funciona
Realizar todas ou nenhuma das modificaes feitas por Ti no banco!
Este procedimento permite enviar todas as modificaes feitas por uma transao efetivada, apesar de possveis falhas Duas maneiras de realizar tais sadas:
Recuperao baseada em log Paginao shadow
Sumrio
Recuperao baseada em log Estrutura mais usada para gravar modificaes no banco o log
Seqncia de registros de log que mantm um arquivo atualizado das atividades no banco
Valor antigo
Valor do dado anterior escrita
Valor novo
Valor que o dado ter aps a escrita
Outros registros de log para arquivar eventos significativos durante o processamento da transao
<Ti start>
Transao Ti comeou
<Ti commit>
Transao Ti foi efetivada
<Ti abort>
Transao Ti foi abortada
Recuperao baseada em log (4) Para que os registros de log sejam teis na recuperao aps falhas de sistema e disco
Log deve residir em armazenamento estvel
Assuma que todo registro de log ser escrito no final do arquivo de log em armazenamento estvel, to logo seja criado
Pode-se afrouxar esta exigncia para reduzir a sobrecarga imposta ao registro de log
Modificaes adiadas do BD
A tcnica de adiar modificaes garante atomicidade qdo todas as modificaes do BD so escritas no log
Adiando a execuo de todas as operaes write de uma transao at sua efetivao
Uma transao considerada parcialmente efetivada qdo a ltima ao tiver sido executada
Informaes no log associadas quela transao so usadas para a execuo das escritas adiadas Se o sistema cair antes de completar a transao ou se a transao for abortada
Informaes do log sero ignoradas
Exemplo
T0:
read (A)
T1:
read (C)
Ordem
Log BDados
<T0 start> <T0, A, 950> <T0, B, 2050> <T0 commit> <T1 start> <T1, C, 600> <T1 commit>
A=950 B=2050
Note que A alterado somente aps o registro <T0, A, 950> ter sido colocado no log
C=600
Usando o log
O sistema pode lidar com qquer falha que resulte em perda de informao no armazenamento voltil
Transao Ti dever ser refeita se e somente se o log contiver os registros <Ti start> e <Ti commit>
Se o sistema cair depois que a transao completar sua execuo
Informaes no log sero usadas na restaurao do sistema para o estado consistente anterior
Log resultante da execuo completa de T0 e T1: Suponha q o sistema caia antes que as transaes terminem
Logo aps o registro do log write(B) ter sido escrito em armazenamento estvel Log, no momento da queda, : <T0 start> <T0, A, 950>
<T0, B, 2050>
<T0 start> <T0, A, 950> <T0, B, 2050> <T0 commit> <T1 start> <T1, C, 600> <T1 commit>
A e B continuam com 1000 e 2000 Registros de log da transao incompleta T0 podem ser removidos do log
Agora assuma que a queda venha logo aps o registro de log para o passo write(C) ter sido escrito em armazenamento estvel <T0 start>
O log, no momento da queda, est como:
<T0, A, 950> <T0, B, 2050> <T0 commit> <T1 start> <T1, C, 600>
Finalmente, assuma que a queda venha logo aps o registro de log <T1 commit> ter sido escrito em armazenamento estvel
O log, no momento da queda, est como:
<T0 start> <T0, A, 950> <T0, B, 2050> <T0 commit> <T1 start> <T1, C, 600> <T1 commit>
Modificao imediata do BD
Permite que modificaes no BD sejam enviadas enqto as transaes ainda esto no estado ativo Escritas emitidas por transaes ativas so chamadas de modificaes no efetivadas Na ocorrncia de uma queda ou de uma falha
Sistema deve usar o campo relativo ao valor antigo dos registros de log para restaurao dos itens de dados modificados
Levando-os ao valor anterior ao incio da transao Restaurao conseguida por meio da operao undo (desfazer)
Modificao imediata do BD (2) Antes que uma transao Ti inicie sua execuo
Registro <Ti start> escrito no log
Exemplo
<T0 start> <T0, A, 100, 950> <T0, B, 2000, 2050> <T0 commit> <T1 start> <T1, C, 700, 600> <T1 commit>
Log
BDados
A=950 B=2050
C=600
Redo(Ti)
Ajusta os valores de todos os itens de dados atualizados pela transao Ti para os valores novos
Aps a falha
Esquema de recuperao consulta o log para determinar quais transaes precisam ser refeitas e quais necessitam ser inutilizadas:
Ti tem de ser inutilizada se o log contm o registro <Ti start>, mas no contm o registro <Ti commit> Ti tem de ser refeita se o log contm tanto o registro <Ti start> qto o registro <Ti commit>
Assuma que a queda ocorra logo aps o registro de log para write(B) ter sido escrita em armazenamento estvel:
Qdo o sistema retorna
Encontra o registro <T0 start> no log Mas no encontra <T0 commit> Ento T0 deve ser inutilizada
Processar undo(T0)
<T0 start> <T0, A, 100, 950> <T0, B, 2000, 2050>
Como resultado
Os valores das contas A e B (no disco) so restaurados em 1000 e 2000
Assuma que a queda ocorra logo aps o registro de log para write(C) ter sido escrita em <T0 start> <T0, A, 100, 950> armazenamento estvel: <T0, B, 2000, 2050>
Qdo o sistema retorna
<T0 commit> <T1 start> <T1, C, 700, 600>
Finalmente, assuma que a queda ocorra logo aps o registro de log <T1 commit> ter sido escrita em <T0 start> armazenamento estvel: <T0, A, 100, 950>
Qdo o sistema retorna
T0 e T1 precisam ser refeitas
<T0, B, 2000, 2050> <T0 commit> <T1 start> <T1, C, 700, 600> <T1 commit>
J que aparecem os registros <T0 start> e <T1 start>, e <T0 commit> e <T1 commit>