Banco de Dados II – aulas bloco 4

Download Report

Transcript Banco de Dados II – aulas bloco 4

UNDB
BANCO DE DADOS II
Prof. Alessandro Gonçalves
[email protected]
1
Sistema de recuperação
2
Sistema de Recuperação
Considerações
Problemas podem ocorrer
É preciso que o sistema recupere o estado do BD
até a consistência anterior, através de um
esquema de recuperação
Garantir a alta disponibilidade
3
Sistema de Recuperação
Classificação das falhas
Podem provocar perda de dados do sistema ou
não.
As últimas são mais simples de tratar.
Serão consideradas:
Falha de transação
Falha do sistema
Falha de disco
4
Sistema de Recuperação
Falha de transação
Erro lógico – condições internas, entrada
defeituosa (sintaxe), dados não encontrados,
estouro de recursos (memória, disco...)
Exemplos
Erro do sistema – o banco de dados está em
algum estado indesejável (deadlock, por
exemplo), impedindo a execução da transação.
Contudo, não pode ser reexecutada de forma
automática.
5
Sistema de Recuperação
Falha do sistema
Nesta falha, há um defeito de hardware ou software ou
sistema oepracional.
O armazenamento volátil é perdido mas o não volátil
permanece (garantindo a Durabilidade)
A suposição de que erros de software e hardware
provocam a parada do sistema mas não corrompem o
armazenamento não volátil é conhecido como:
Suposição parar-falhar
6
Sistema de Recuperação
Falha de disco
Um bloco de disco pode ser corrompido devido a falha na
transferência ou falha na cabeça.
Caso haja sincronismo com outros discos, o sistema não
sentirá a falha (acesso RAID).
Caso não, ainda assim backups poderão ser restaurados
7
Sistema de Recuperação
Como criar esquema de recuperação
1) Identificar os modos de falhas dos dispositivos de
armazenamentos
2) Como essas falham afetam o conteúdo do BD ?
3) Algoritmo deve garantir a atomicidade e coerência
8
Sistema de Recuperação
Algoritmos de recuperação possuem duas partes:
1) Ações executadas durante o processamento normal
para que haja informações suficientes para recuperação
2) Ações tomadas após a falha, para recuperar o banco
de dados, garantindo atomicidade, durabilidade de
consistência.
9
Sistema de Recuperação
Estruturas de armazenamento
Armazenamento volátil – memórias (principal e cache).
São rápidas mas não garantem perenidade
Armazenamento não volátil – sobrevivem a falhas do
sistema, como exemplos discos e fitas magnéticas. Mais
lentos por conter elementos mecânicos.
Armazenamento estável – nunca (?) se perde
10
Sistema de Recuperação
Armazenamento estável
Palavra chave: replicação
Uma forma muito difundida é o acesso RAID, com
gravação simultânea em dois ou mais discos.
O problema é que os discos RAID geralmente estão
próximos. Em caso de inundação ou incêndio, há
problemas de corrupção do espelhamento.
É mais seguro uma replicação à distância.
11
RAID
Uma equipe de pesquisadores da Universidade de Berkeley na Califórnia
desenvolveu um estudo definindo o RAID e os seus níveis (inicialmente
5).
O RAID surgiu como um método de substituir um único disco grande e
muitíssimo caro na época por vários menores e com custo muito mais
baixo. O principio básico envolvido nessa tecnologia é uma teoria muito
simples: através da combinação de uma matriz formada por discos
"pequenos", um administrador poderá gravar dados com redundância
para prover tolerância à falhas em um sistema ou dividi-los para
aumentar a performance.
Existem basicamente dois tipos de RAID, baseado em hardware ou em
software. Aqui descrevemos o RAID baseado em hardware que é o mais
difundido e que não depende de nenhum sistema operacional para ter um
desempenho satisfatório.
12
RAID
RAID Nível 0
Esse nível também é conhecido como “Striping” ou “Fracionamento”.
No RAID 0 os dados são divididos em pequenos segmentos e
distribuídos entre os diversos discos disponíveis, o que proporciona alta
performance na gravação e leitura de informações, porém não oferece
redundância, ou seja, não é tolerante a falhas. O aumento da
performance no RAID 0 é obtido porque se vários dados fossem
gravados em um único disco esse processo aconteceria de forma
“Seqüencial” já nesse nível os dados são distribuídos entre os discos ao
mesmo tempo.
O RAID 0 pode ser usado para estações de alta performance (CAD,
tratamento de imagens e vídeos), porém não é indicado para sistemas de
missão-crítica.
13
RAID
RAID Nível 1
O nível 1 também é conhecido como "Mirror", “Duplexing” ou
“Espelhamento”.
No RAID 1 os dados são gravados em 2 ou mais discos ao mesmo
tempo, oferecendo portanto redundância dos dados e fácil recuperação,
com proteção contra falha em disco. Uma característica do RAID 1 é que
a gravação de dados é mais lenta, pois é feita duas ou mais vezes. No
entanto a leitura é mais rápida, pois o sistema pode acessar duas fontes
para a busca das informações.
O RAID 1 pode ser usado para Servidores pelas características de ter
uma leitura muito rápida e tolerância à falhas.
14
RAID
RAID Nível 0+1
O RAID 0+1 é uma combinação dos níveis 0 (striping) e 1 (mirroring). No
RAID 0+1 os dados são divididos entre os discos e duplicados para os
demais discos. Assim temos uma combinação da performance do RAID 0
com a tolerância à falhas do RAID 1. Para a implantação do RAID 0+1
são necessários no mínimo 4 discos o que torna o sistema um pouco
caro.
Ao contrario do que muitos pensam, o RAID 0+1 não é o mesmo do RAID
10. Quando um disco falha em RAID 0+1 o sistema se torna basicamente
um RAID 0.
O RAID 0+1 pode ser utilizado em estações que necessitam de alta
performance com redundância como aplicações CAD e edição de vídeo e
áudio.
15
RAID
RAID Nível 2
O nível 2 também é conhecido como “Monitoring”.
O RAID 2 é direcionado para uso em discos que não possuem detecção
de erro de fábrica, pois “adapta” o mecanismo de detecção de falhas em
discos rígidos para funcionar em memória. O RAID 2 é muito pouco
usado uma vez que todos discos modernos já possuem de fábrica a
detecção de erro.
16
RAID
RAID Nível 3
No RAID 3 os dados são divididos (em nível de bytes) entre os discos
enquanto a paridade é gravada em um disco exclusivo. Como todos os
bytes tem a sua paridade (acréscimo de 1 bit para identificação de erros)
gravada em um disco separado é possível assegurar a integridade dos
dados para recuperações necessárias.
O RAID 3 também pode ser utilizado para Servidores e sistemas de
missão-critica.
A dificuldade é que tem que haver sincronização entre os discos e nem
todos o fabricantes suportam esta função.
17
RAID
RAID Nível 4
O RAID 4 é muito parecido com o nível 3.
A diferença é que além da divisão de dados (em blocos e não bytes) e
gravação da paridade em um disco exclusivo esse nível permite que os
dados sejam reconstruídos em tempo real utilizando a paridade calculada
entre os discos. Além disso a paridade é atualizada a cada gravação,
tornando-a muito lenta.
O RAID 4 pode ser utilizado para sistemas que geram arquivos muito
grandes como Edição de vídeo, porque a atualização da paridade a cada
gravação proporciona maior confiabilidade no armazenamento.
taxa de gravação lenta;
em caso de falha do disco, a reconstrução é difícil
tecnologia não mais usada por haver melhores para o mesmo fim.
18
RAID
RAID Nível 5
É semelhante ao nível 4, exceto o fato de que a paridade não é gravada
em um disco exclusivo para isso e sim distribuída por todos os discos da
matriz.
Isso faz com que a gravação de dados seja mais rápida, porque não
existe um disco separado do sistema gerando um “Gargalo”, porém como
a paridade tem que ser dividida entre os discos a performance é um
pouco menor que no RAID 4.
O RAID 5 é amplamente utilizado em Servidores de grandes corporações
por oferecer uma performance e confiabilidade muito boa em aplicações
não muito pesadas. E normalmente são utilizados 5 discos para aumento
da performance.
19
RAID
RAID Nível 6
O RAID 6 é basicamente um RAID 5 porém com dupla paridade,
garantindo a consistência mesmo que dois discos falhem.
O RAID 6 pode ser utilizado para sistemas de missão-critica onde a
confiabilidade dos dados é essencial.
Ex: Ao usar 8 HDs de 20 GB cada um, em RAID 6, teremos 120 GB de
dados e 40 GB de paridade.
Problemas:
precisa de N+2 HDs para implementar por causa dos discos de paridade;
escrita lenta;
sistema complexo de controle dos HDs.
20
RAID
RAID Nível 1+0
O RAID 10 precisa de no mínimo 4 discos rígidos para ser implantado.
Os dois primeiros discos trabalham com striping enquanto os outros dois
armazenam uma cópia exata dos dois primeiros, mantendo a tolerância à
falhas. A diferença básica desse nível para o RAID 0+1 é que sob certas
circunstancias o RAID 10 pode sustentar mais de uma falha simultânea e
manter o sistema.
O RAID 10 pode ser utilizado em servidores de banco de dados que
necessitem de alta performance e alta tolerância a falhas como em
Sistemas Integrados e Bancos.
Figura a seguir
21
RAID
RAID Nível 1+0
22
Sistema de Recuperação
Outras formas
Backup em outro servidor a cada x minutos
Backup diário em um storage
Backup semanal em um storage
Backup mensal em um storage
Desvantagens
a cópia dos dados está sempre defasada
A restauração leva um tempo para ser feita
23
Sistema de Recuperação
Proteção contra falha durante a transferência de dados
MEMÓRIA
ARMAZENAMENTO
Término bem sucedido – informação ok
Falha parcial – ocorreu no meio da transferência e o bloco
de destino possui informações incorretas
Falha total – a falha ocorreu cedo, de tal forma que o bloco
de destino está intacto
24
Sistema de Recuperação
Falha de transferência de dados
Havendo falhas, o sistema deve invocar uma rotina de recuperação.
Para cada bloco lógico, há dois blocos físicos de gravação, local ou
remoto.
A operação de saída é executada da seguinte forma:
1) Escreva a informação no primeiro bloco físico
2) Quando a escrita for concluída com sucesso, escreva no segundo bloco
3) A saída só é completada depois que a segunda escrita terminar com
sucesso
25
Sistema de Recuperação
Falha de transferência de dados
Quando cada bloco é gravado, um checksum é gravado junto.
A recuperação checa os dois blocos. Se forem iguais e não houver erro
detectável, está tudo ok e nada é feito.
Se houver um erro, o bloco é substituído pelo conteúdo do outro bloco.
Se diferirem em conteúdo, o bloco é substituído pelo conteúdo do outro
bloco.
Garante desta forma, ou tudo é feito ou nada.
26
Sistema de Recuperação
Falha de transferência de dados
Para garantir performance, somente os dados que estão sendo gravados
são checados com os blocos. Lembre-se que a leitura em disco é bem
lenta e deve ser evitada sempre que possível.
Por que não usar 3 ou mais blocos físicos para cada bloco lógico, para
ganho de confiabilidade ?
27
Sistema de Recuperação
Acesso aos dados
Os discos estão divididos em blocos de tamanho fixo. Assume-se que
nenhum item de dados esteja em mais de um bloco.
Os blocos estão divididos em 2:
Blocos físicos – existem fisicamente no disco
Blocos de buffer – temporariamente na memória principal, em uma área
chamada buffer de disco
Existem duas operações:
Input (B) – transfere o bloco físico para a memória principal
28
Output(B) – transfere o bloco de buffer B para o disco, substituindo o bloco
físico
Sistema de Recuperação
Acesso aos dados
Existem duas operações:
Input (A) – transfere o bloco físico A para a memória principal
Output(B) – transfere o bloco de buffer B para o disco, substituindo o bloco
físico
A
A
B
B
29
Sistema de Recuperação
Acesso aos dados
Ao criar uma transação Ti, uma área reservada de memória também é
criada.
Quando a transação é confirmada/abortada, esta área é removida.
Todos os itens de dados utilizados pela transação Ti estão nesta área.
A interação da transação com o sistema se dá por meio da transferência
de dados desta área de trabalho para o buffer do sistema e vice-versa
Ex: um item X na transação Ti seria indicado por Xi
30
Sistema de Recuperação
Acesso aos dados
read(X) atribui o valor do item de dados X à variável local Xi:
1) Se o bloco Bx em que X reside não estiver na memória principal, emite
input (Bx)
2) Atribui a Xi, o valor de X vindo do bloco de buffer
write(X) atribui o valor da variável local Xi ao item de dados X no buffer:
1) Se o bloco Bx em que X reside não estiver na memória principal, emite
input (Bx)
2) Atribui o valor de Xi a X no buffer Bx
31
Sistema de Recuperação
Acesso aos dados
Quando ocorre a gravação física no disco ?
Ao encontrar uma saída forçada Output(B)
O que ocorre se Write(x) for executada (commit) mas Output(Bx) falhar ?
Exemplo anexo
Explicação no próximo slide
32
Sistema de Recuperação
Acesso aos dados
Nesta falha, um esquema de recuperação simples poderia ser:
1) Execute a Transação Ti novamente
A se tornará $900, ao invés de $950, gerando inconsistência
2) Não execute a Transação Ti novamente
A tem valor de $900 e B $2000, que é inconsistente
Não funciona porque é impossível prever o que deve ser feito, caso haja falhas no meio
do processo.
Ideal: para garantir atomicidade, gravamos as alterações em outra área, sem modificar o
próprio banco de dados
33
Sistema de Recuperação
Log
Um 'log” é um registro de tudo o que acontece no banco de dados, antes
da gravação física.
Cada atualização no banco de dados gera um registro detalhado.
Select gera log ?
Estrutura:
ID da transação
ID do item de dados
Valor antigo
Identificador
exclusivo da
transação que
realizou “write”
Identificador
Valor antes da
exclusivo do item de escrita
dados (local do
disco do item de
dados)
Valor novo
Valor depois da
escrita
34
Sistema de Recuperação
Log
Exemplos de Log
ID da transação
ID do item de dados
Valor antigo
Valor novo
10737 ou Ti
Bj
100
200
10738 ou Ti
Aj
null
50
No exemplo de log (em anexo), como ficaria o registro de Log ?
Um registro para cada update. É como se fossem 3 updates !
35
Sistema de Recuperação
Log
Operações especiais no log
Os eventos significativos precisam ser registrados no log (início de
transação, commit, abort). Exemplo de uma transação completa:
<Ti start> - transação iniciada
<Ti, Xj, V1, V2> - A transação Ti realizou uma escrita sobre Xj. Xj tinha
valor V1 e agora tem valor V2 após a escrita.
<Ti commit> OU <T1 abort> - transação confirmada ou cancelada
36
Sistema de Recuperação
Log
Problemas
Overhead (sobrecarga) de disco, gravando cada Log assim que
criado (existem técnicas que minimizam isto).
Tamanho excessivo do log (que pode ser resolvido com Checkpoints)
37
Sistema de Recuperação
Modificação de banco de dados adiada
Considere que as transações são executadas serialmente.
Garante a atomicidade da transação. Usa a gravação de log mas adia
todas as operações Write de uma transação até que uma transação seja
parcialmente confirmada (ação final foi executada).
38
Sistema de Recuperação
Modificação de banco de dados adiada
1) Um registro <Ti start> é escrito no log antes da transação Ti iniciar sua
execução.
2) Toda operação write(x) de Ti, resulta em um novo registro no log.
3) Quando Ti é parcialmente efetivada, um registro <Ti commit> deve ser
escrito no log.
4) Assim que a transação é parcialmente efetivada, os registros no log
podem ser usados para atualizar o banco de dados e a transação entra em
seu estado de efetivação. Neste momento, deve-se garantir que o log
esteja armazenado em meio estável.
39
Sistema de Recuperação
Modificação de banco de dados adiada
Também chamadas de NO-UNDO/REDO. Nesta técnica, somente o valor
novo do item de dado que sofreu alteração é necessário ser guardado no
registro de log, pois:
1) Somente escalonamentos seriais estão sendo considerados;
2) As escritas são realizadas após a efetivação parcial da transação;
No caso de falhas:
Antes das escritas no BD: os registros no log serão ignorados (o valor
antigo do item de dado permanecerá).
Após as escritas no BD: executa-se operações de redo.
Ver exemplo anexo
40
Sistema de Recuperação
Modificação de banco de dados adiada
Log
<T0, start>
<T0, A, 950>
<T0, B, 2050>
<T0, commit>
BD
A = 950
B = 2050
<T1, start>
<T1, C, 600>
<T1, commit>
C = 600
41
Sistema de Recuperação
Modificação de banco de dados adiada
Recuperação
Procedimento de recuperação em caso de falhas, que resultem em
perda de informação no armazenamento volátil:
Redo(T): Refazer T define o valor de todos os itens de Ti dados
atualizados pela transação Ti para os novos valores (operação
idempotente) .
Uma transação Ti deverá ser refeita, se e somente se, o sistema de
recuperação encontrar os registros <Ti, start> e <Ti, commit> no log.
42
Sistema de Recuperação
Modificação de banco de dados adiada
Exemplos de falha durante a transação
A
<T0 start>
<T0, A, 950>
<T0, B, 2050>
B
<T0 start>
<T0, A, 950>
<T0, B, 2050>
<T0 commit>
<T1 start>
<T1, C, 600>
C
<T0 start>
<T0, A, 950>
<T0, B, 2050>
<T0 commit>
<T1 start>
<T1, C, 600>
<T1 commit>
43
Sistema de Recuperação
Modificação de banco de dados adiada
Ações para o exemplo anterior:
(a) Nenhuma ação redo é necessária
(b) É necessário realizar redo(T0), uma vez que há um <T0 commit>
registrado
(c) Realizar redo(T0) seguido de redo(T1), uma vez que <T0 commit> e
<T1 commit> estão registrados no log.
44
Sistema de Recuperação
Modificação imediata de banco de dados
Permite que as modificações no banco de dados sejam realizadas
enquanto as transações ainda estão num estado ativo.
As escritas emitidas por transações ativas são chamadas de
modificações não-confirmadas.
Neste esquema de modificação de BD, o log deverá armazenar o
valor antigo e o valor novo oriundos das operações de write.
45
Sistema de Recuperação
Modificação imediata de banco de dados
Execução de Transação
Um registro <Ti start> é criado antes da transação Ti iniciar sua
execução.
Toda operação write(X) de Ti é precedida pela escrita de um
novo registro no log.
Quando T é parcialmente efetivada, um registro <Ti commit>
deve ser escrito no log.
As informações podem ser atualizadas no banco de dados
assim que o log esteja salvo em meio estável.
46
Sistema de Recuperação
Modificação imediata
Log
<T0, start>
<T0, A, 1000, 950>
<T0, B, 2000, 2050>
BD
A = 950
B = 2050
<T0, commit>
<T1, start>
<T1, C, 700, 600>
<T1, commit>
C = 600
47
Sistema de Recuperação
Modificação imediata
Exemplos de falha durante a transação
A
<T0 start>
<T0, A, 950>
<T0, B, 2050>
B
<T0 start>
<T0, A, 950>
<T0, B, 2050>
<T0 commit>
<T1 start>
<T1, C, 600>
C
<T0 start>
<T0, A, 950>
<T0, B, 2050>
<T0 commit>
<T1 start>
<T1, C, 600>
<T1 commit>
EXEMPLO ANEXO
48
Sistema de Recuperação
Modificação imediata
Ações para o exemplo anterior:
(a) undo (T0): B é restaurado para 2000 e A para 1000.
(b) undo (T1) e redo (T0): C é restaurado para 700, e então, A e B
são retornam aos valores 950 e 2050, respectivamente.
(c) redo (T0) and redo (T1): Os valores de A, B e C na conta, após
esses procedimentos, são 950, 2050 e 600, respectivamente.
49
Sistema de Recuperação
Modificação imediata
50
Sistema de Recuperação
Pontos de verificação (Checkpoints)
Na existência de uma falha, o sistema de recuperação deve, a
princípio, percorrer todo o log para saber quais transações devem
ser desfeitas. Dificuldades:

1) O processo de pesquisa consome tempo;
2) Muitas das transações que necessitam ser refeitas já escreveram
suas atualizações no BD. Embora refazê-las não cause dano algum,
a recuperação se tornará mais onerosa.
Para melhorar isto, existem os checkpoints.
51
Sistema de Recuperação
Pontos de verificação (Checkpoints)
Os checkpoints são registros inseridos no log periodicamente e
exigem a execução da seqüência de operações abaixo:
Suspender, temporariamente, a execução de todas as transações.

Forçar as escritas das operações de write das transações, da
memória principal para o disco.
Escrever <checkpoint> no log e forçar a escrita no log em disco.
Reassumir a execução das transações.
52
Sistema de Recuperação
Pontos de verificação (Checkpoints)
Se Ti é efetivada antes do checkpoint, o registro <Ti,commit>
aparece no log antes do checkpoint, quaisquer modificações feitas
por Ti ou já foram escritas no banco de dados antes do checkpoint
ou o foram como parte do ckeckpoint propriamente dito.
Assim, no momento de recuperação não haverá necessidade de
uma operação de redo sobre Ti.
53
Sistema de Recuperação
Pontos de verificação (Checkpoints)
Após uma falha o sistema de recuperação examina o log para determinar a
última transação Ti anterior ao checkpoint mais recente.
A pesquisa é retroativa no log e procura a última transação T anterior ao
checkpoint mais recente (o último registro <Ti, start> antes do checkpoint).
As operações de undo e redo devem ser aplicadas, de forma apropriada, a
Ti e a todas as transações Tj que iniciaram depois dela.
54
Sistema de Recuperação
Pontos de verificação (Checkpoints)
As operações de recuperação exigidas, se a técnica de modificação
imediata é empregada, são as seguintes:

Para todas as transações Tk em T que não possuem nenhum
registro <T , commit> no log, execute undo(Tk).

Para todas as transações Tk em T tais que o registro <Tk, commit>
aparece no log, execute redo(Tk)
Se a técnica de modificação adiada está em uso, nenhuma
operação de undo será aplicada.
55
Sistema de Recuperação
Pontos de verificação (Checkpoints)
56
Sistema de Recuperação
Pontos de verificação (Checkpoints)
Considere as transações {T0, T1, ... T100}, executadas nesta ordem.
Suponha que o checkpoint mais recente tenha ocorrido durante a
execução da transação T80.
Então somente as transações T80 até T100 necessitam ser consideradas
durante o esquema de recuperação. As outras estão consistentes.
Cada uma delas será refeita se tiver sido efetivada (redo). Caso contrário,
será desfeita (undo)
57
Sistema de Recuperação
Recuperação com transações concorrentes
A partir de agora, será considerado que existe concorrência no SGBD.
Os esquemas de recuperação precisam ser melhor projetados para
atender este requisito, garantindo a consistência.
Considerações:
1) um único buffer de disco e log único
2) Todas as transações compartilham os blocos de buffer (memória)
3) A modificação imediata é permitida e os itens de dados no bloco de
buffer atualizados por uma ou mais transações.
58
Sistema de Recuperação
Interação com controle de concorrência
Suponha que uma transação T0 tenha que ser desfeita e um item de
dado Q, atualizado por T0, tenha que recuperar seu valor antigo. Para
isso, utiliza-se as informações registradas no log e a operação undo.

Suponha ainda que uma segunda transação T1 também tenha realizado
uma atualização sobre Q antes de T0 ser desfeita. Esta atualização,
processada por T1, será perdida quando T0 for revertida.
Para evitar esta situação, usa-se o bloqueio em duas fases que mantém
os bloqueios de escrita até o final da transação (bloqueios exclusivos)
59
Sistema de Recuperação
Reversão da transação
A reversão de uma transação Ti é realizada da seguinte forma:
1) O log é percorrido, do fim para o início;
2) Para cada registro da forma <Ti, Xj, V1, V2>, o item de dados X j é
restaurado para seu valor antigo V1;
3) O trabalho termina quando o registro <Ti, start> é encontrado.
Por que percorrer o log de trás para a frente ?
Porque uma transação pode ter atualizado um item de dados mais de uma vez.
Se uma transação atualiza um mesmo item de dados duas vezes:
<Ti START>
<Ti, A, 10, 20>
<Ti, A, 20, 30>
60
Sistema de Recuperação
Reversão da transação
Quando se está revertendo uma transação, o protocolo de bloqueio deve
manter os bloqueios de escrita da transação, até que o trabalho de
reversão seja concluído.
Como se está supondo o uso do protocolo de bloqueio em duas fases,
nenhuma outra transação terá que ser revertida por ocasião da reversão
de outra transação.
61
Sistema de Recuperação
Reversão da transação
Para situações onde a concorrência não existe, o uso dos checkpoints
faz com que na recuperação:
As transações que iniciaram após o checkpoint mais recente;
A transação, se houver alguma, que estava ativa no momento da escrita
do checkpoint mais recente.
Quando existe concorrência, várias transações podem estar ativas no
momento em que o checkpoint for inserido no log.
Assim, o registro de log referente ao checkpoint será da forma
<checkpoint L>, onde L é a lista de transações ativas no momento de
inserção do checkpoint.
62
Sistema de Recuperação
Recuperação passo a passo
Para a recuperação com transações concorrentes, o sistema deve
construir duas listas:
Lista desfazer (undo): composta por transações que devem ser desfeitas.
Lista refazer (redo): composta por transações que devem ser refeitas.
63
Sistema de Recuperação
Recuperação passo a passo
A construção das lista undo e redo:
Inicialmente, ambas as listas estão vazias;
Examina-se o log, em ordem decrescente, até o primeiro checkpoint:
Para cada registro <Ti, commit>, adiciona-se Ti à lista refazer.
Para cada registro <Ti, start>, se Ti não está na lista refazer, adiciona-se
Ti na lista desfazer.

Checa-se a lista L no registro do checkpoint em questão.
Para cada transação Ti em L, se Ti não estiver da lista refazer, então será
adicionada à lista desfazer. Ou seja: toda transação do Checkpoint
sofrerá redo ou undo.
64
Sistema de Recuperação
Recuperação passo a passo
Com as listas construídas:
1) Reexaminar o log a partir do registro mais recente e processar um
UNDO para cada registro de log pertencente à transação Ti na lista
desfazer. O exame para quando os registros <Ti start>, para cada
transação Ti da lista desfazer, são encontrados (percorre-se o log em
ordem cronológica decrescente). A lista refazer é desprezada neste
momento;

2) Localizar o registro <checkpoint L> mais recente;

3) Examinar o log a partir do registro <checkpoint L> encontrado, até o
final do log e executar um redo para cada registro de log pertencente a
uma transação Ti que está na lista refazer (percorre-se o log em ordem
cronológica crescente). A lista de undo é desprezada neste momento.
65
Sistema de Recuperação
Recuperação passo a passo
A ordem de execução importa ? Considere abaixo:
<Ti A, 10, 20>
<Tj A, 10, 30>
<Tj commit>
** falha **
Se redo for realizado primeiro, A será 30. Depois, será feito um undo e A
passará a ser 10 (errado).
Se undo for realizado primeiro, A será 10. Depois, será feito um redo e A
passará a ser 30 (correto).
66
UNDB
BANCO DE DADOS II
Prof. Alessandro Gonçalves
[email protected]
67