RecuperacaoFalhas
21 pág.

RecuperacaoFalhas


DisciplinaAdministração de Banco de Dados584 materiais3.181 seguidores
Pré-visualização2 páginas
Administração de Banco de Dados
Prof. Luiz Vivacqua
1
Parte 5
Recuperação de Falhas
Administração de Banco de Dados
Prof. Luiz Vivacqua
2
Recuperação de Falhas
\ufffdConceito de Falha
\ufffdRecuperação baseado em Log
\ufffdModificação de banco de dados adiada
\ufffdModificação de banco de dados imediata
\ufffdCheckpoint
\ufffdRecuperação com transações concorrentes
Administração de Banco de Dados
Prof. Luiz Vivacqua
3
Classificação de Falha
\ufffd Falha de Transação
\ufffd Erros lógicos: a transação não pode completar devido a alguma condição 
de erro interna
\ufffd Erros do sistema: o sistema de banco de dados precisa terminar uma 
transação ativa devido a uma condição de erro (por exemplo, impasse)
\ufffd Falha do Sistema
\ufffd O hardware funciona incorretamente e provoca a perda do conteúdo da 
memória. Uma falta de energia ou outra falha do hardware ou software faz 
com que o sistema falhe.
\ufffd Falha do disco
\ufffd Uma falha de cabeça ou falha de disco semelhante destrói todo ou parte do 
armazenamento de disco
Administração de Banco de Dados
Prof. Luiz Vivacqua
4
Recuperação e Atomicidade
\ufffd Para garantir a atomicidade apesar das falhas, primeiro o 
SGBD gera informações descrevendo as modificações no 
armazenamento estável (disco) sem modificar o próprio 
banco de dados.
\ufffd A técnica mais utilizada:
\ufffd recuperação baseada em log
\ufffd Consideramos (inicialmente) que as transações serão 
executadas em série, ou seja, uma após a outra.
Administração de Banco de Dados
Prof. Luiz Vivacqua
5
Recuperação baseada em Log
\ufffd O Log é um arquivo que mantém o registro das atividades 
de atualização no banco de dados.
\ufffd Quando a transação Ti inicia, é gerado um registro de log 
no formato <Ti start>
\ufffd Antes que Ti execute write(X), um registro de log 
<Ti, X, V1, V2> é escrito, onde V1 é o valor de X antes do 
write, e V2 é o valor a ser escrito em X.
\ufffd Quando Ti termina sua última instrução, o registro de log 
<Ti commit> é escrito.
Administração de Banco de Dados
Prof. Luiz Vivacqua
6
\ufffd Consideramos, por enquanto, que os registros de log são 
escritos diretamente no armazenamento estável (ou seja, 
eles não são mantidos em buffer)
\ufffd Duas técnicas usando logs
\ufffd Modificação de banco de dados adiada
\ufffd Modificação de banco de dados imediata
Recuperação baseada em Log
Administração de Banco de Dados
Prof. Luiz Vivacqua
7
Modificação de Banco de Dados Adiada
\ufffd O esquema de modificação de banco de dados adiada registra todas as 
modificações no log, mas adia todas as escritas no banco de dados para 
depois da confirmação parcial.
\ufffd Suponha que as transações são executadas serialmente
\ufffd A transação começa escrevendo o registro <Ti start> no log.
\ufffd Uma operação write(X) resulta em um registro de log <Ti, X, V> sendo 
escrito, onde V é o novo valor para X
\ufffd Nota: o valor antigo não é necessário para esse esquema
\ufffd A escrita não é realizada em X (banco de dados) nesse momento, mas 
é adiada.
\ufffd Quando Ti confirma parcialmente, <Ti commit> é escrito no log
\ufffd Finalmente, os registros de log são lidos e usados para realmente 
executar as escritas previamente adiadas.
Administração de Banco de Dados
Prof. Luiz Vivacqua
8
\ufffd Durante a recuperação após uma falha, uma transação 
precisa ser refeita se e somente se existirem no log os 
registros <Ti start> e <Ti commit>.
\ufffd Refazer uma transação Ti ( Redo Ti) define o valor de 
todos os itens de dados atualizado pela transação como os 
novos valores.
\ufffd Falhas podem ocorrer enquanto
\ufffd a transação estiver executando as atualizações originais, 
ou
\ufffd enquanto a ação de recuperação estiver sendo tomada
Modificação de Banco de Dados Adiada
Administração de Banco de Dados
Prof. Luiz Vivacqua
9
Exemplo: Transações T0 e T1, executando serialmente onde T0 executa antes de T1
T0: T1:
Read (A) Read (C)
A = A - 50 C = C- 100
Write (A) Write (C)
Read (B)
B = B + 50
Write (B)
Modificação de Banco de Dados Adiada
<TO, T1>
Administração de Banco de Dados
Prof. Luiz Vivacqua
10
Modificação de Banco de Dados Adiada
\ufffd Se o arquivo de log no momento da falha for como neste caso então em:
(a) Nenhuma ação de \u201cRedo\u201d precisa ser tomada
(b) \u201cRedo\u201d (T0) precisa ser realizado, pois <T0 commit> está presente
(c) \u201cRedo\u201d (T0) precisa ser realizado seguido por \u201cRedo\u201d (T1), pois 
<T0 commit> e <Ti commit> estão presentes
Arquivo Log
Administração de Banco de Dados
Prof. Luiz Vivacqua
11
\ufffd O esquema de modificação de banco de dados imediata permite que as 
atualizações de uma transação não confirmada sejam feitas no banco 
de dados enquanto as escritas são emitidas
\ufffd como pode ser preciso desfazer, os logs de atualização precisam ter 
valor antigo e valor novo
\ufffd O registro de log de atualização precisa ser escrito antes que o item 
seja escrito no banco de dados
\ufffd Consideramos que o registro de log é enviado diretamente ao 
armazenamento estável (disco)
Modificação de Banco de Dados Imediata
Administração de Banco de Dados
Prof. Luiz Vivacqua
12
Modificação de Banco de Dados Imediata
\ufffd O procedimento de recuperação possui duas operações em vez de uma:
\ufffd undo(Ti) restaura o valor de todos os itens de dados atualizados por Ti aos seus 
valores antigos, indo para trás a partir do último registro para Ti
\ufffd redo(Ti) define o valor de todos os itens de dados atualizados por Ti aos novos 
valores, indo para frente a partir do primeiro registro para Ti
\ufffd As duas operações precisam ser idempotentes
\ufffd Ou seja, mesmo que a operação seja executada várias vezes, o efeito é o mesmo que 
se fosse executada uma vez
\ufffd Necessário porque as operações podem ser novamente executadas durante a 
recuperação
\ufffd Ao recuperar-se após a falha:
\ufffd A transação Ti precisa ser desfeita se o log tiver o registro
<Ti start>, mas não tiver o registro <Ti commit>.
\ufffd A transação Ti precisa ser refeita se o log tiver o registro <Ti start> e o registro 
<Ti commit>.
\ufffd Operações de undo são realizadas primeiro, depois as operações de redo.
Administração de Banco de Dados
Prof. Luiz Vivacqua
13
Modificação de Banco de Dados Imediata
\ufffd Se o log no armazenamento estável no momento da falha for como neste caso 
então as ações de recuperação são:
(a) undo (T0): B é restaurado para 2000 e A para 1000.
(b) undo (T1) e redo (T0): C é restaurado para 700, e depois A e B são definidos para 950 e 2050, respectivamente.
(c) redo (T0) e redo (T1): A e B são definidos para 950 e 2050 respectivamente. Depois, C é definido para 600
Administração de Banco de Dados
Prof. Luiz Vivacqua
14
Pontos de Verificação (checkpoints)
\ufffd Problemas no procedimento de recuperação:
\ufffd pesquisar o log inteiro é demorado (arquivo pode ser 
grande)
\ufffd Para facilitar (agilizar) o procedimento de 
recuperação, o sistema realiza periodicamente o 
ponto de verificação
\ufffd Enviar todos os registros de log atualmente residindo na 
memória principal para o armazenamento estável.
\ufffd Escrever um registro de log < checkpoint> no 
armazenamento estável.
\ufffd Gravar no banco de dados todos os buffers que foram 
modificados.
Administração de Banco de Dados
Prof. Luiz Vivacqua
15
Pontos de Verificação (checkpoints)
\ufffd Durante a recuperação, o SGBD tem que considerar apenas a transação 
mais recente Ti que foi iniciada antes do ponto de verificação e as 
transações que começaram após Ti. 
\ufffd Procedimento:(SUPONDO UMA EXECUÇÃO SERIAL)
\ufffd Varrer para trás a partir do final do log até encontrar o registro 
<checkpoint> mais recente.
\ufffd Continuar varrendo para trás até um registro <Ti start> ser encontrado.
\ufffd Só precisa considerar a parte do log vindo após o registro start. A parte 
inicial do log pode ser ignorada durante a recuperação, e pode ser apagada 
sempre que for desejado.
\ufffd Para todas as transações (começando de Ti ou mais) sem <Ti commit>, 
execute undo(Ti). (Feito apenas no caso de modificação imediata.)
\ufffd Varrendo para frente no log, para todas as transações começando a partir 
de Ti ou depois com um <Ti commit>, execute redo(Ti).
Administração de Banco de Dados
Prof. Luiz Vivacqua
16
Pontos de Verificação