Você está na página 1de 12

Sumrio

1 Processamento de Consultas 2 Introduo a Transaes 3 Recuperao de Falhas 4 Controle de Concorrncia 5 SQL Embutida 6 Banco de Dados Distribudo

Recuperao de Falhas
Garantia de atomicidade e durabilidade de Transaes
requer um SGBD tolerante a falhas

Tolerncia a falhas em BDs


capacidade de conduzir o BD a um estado passado consistente, aps a ocorrncia de uma falha que o deixou em um estado inconsistente baseia-se em redundncia de dados no um mecanismo 100% seguro responsabilidade do subsistema de recovery do SGBD

Subsistema de Recovery
Controles
durante o funcionamento normal do SGBD
manter informaes sobre o que foi atualizado no BD pelas transaes realizar cpias peridicas do BD

aps a ocorrncia de uma falha


executar aes para retornar o BD a um estado consistente aes bsicas
UNDO: desfazer uma atualizao no BD REDO: refazer uma atualizao no BD

Consideraes sobre o seu projeto


tipos de falhas a tratar tcnica de recovery a aplicar

Aes Bsicas de Recovery


Transaction UNDO
uma transao no concluiu suas operaes as modificaes realizadas por esta transao no BD so desfeitas

Global UNDO
uma ou mais transaes no concluram as suas operaes as modificaes realizadas por todas estas transaes no BD so desfeitas

Partial REDO
na ocorrncia de uma falha, algumas transaes podem ter concludo suas operaes (committed), mas suas aes podem no ter se refletido no BD as modificaes realizadas por estas transaes so refeitas no BD

Global REDO
no caso de um comprometimento do BD, todas as transaes committed no BD so perdidas as modificaes realizadas por todas estas transaes no BD so refeitas

Tipos de Falhas
Falha de Transao
uma transao ativa termina de forma anormal causas
violao de RI, lgica da transao mal definida, deadlock, cancelamento pelo usurio, ...

no compromete a memria principal e a memria secundria (disco, em geral) falha com maior probabilidade de ocorrncia seu tempo de recuperao pequeno
ao: Transaction UNDO

Tipos de Falhas
Falha de sistema
o SGBD encerra a sua execuo de forma anormal causas
interrupo de energia, falha no SO, erro interno no SW do SGBD, falha de HW, ...

compromete a memria principal e no compromete o disco falha com probabilidade mdia de ocorrncia seu tempo de recuperao mdio
aes: Global UNDO e Partial REDO

Tipos de Falhas
Falha de meio de armazenamento
o BD torna-se total ou parcialmente inacessvel causas
setores corrompidos no disco, falha no cabeote de leitura/gravao, ...

no compromete a memria principal e compromete o disco falha com menor probabilidade de ocorrncia seu tempo de recuperao grande
ao: Global REDO

Tcnicas de Recovery
Baseadas em Log
modificao imediata do BD
tcnica UNDO/REDO tcnica UNDO/NO-REDO
recuperao de falhas de transao e de sistema

modificao postergada do BD
tcnica NO-UNDO/REDO

recuperao de meio de armazenamento


tcnica ARCHIVE/DUMP/REDO

Baseadas em Shadow Pages


tcnica NO-UNDO/NO-REDO
recuperao de falhas de transao e de sistema

Tcnicas Baseadas em Log


Tcnicas mais comuns de recovery Utilizam um arquivo de Log (ou Journal)
registra seqencialmente as atualizaes feitas por transaes no BD
consultado em caso de falhas para a realizao de UNDO e/ou REDO de transaes

mantido em uma ou mais cpias em memria secundria (disco, fita, ...) tipos de log
log de UNDO
mantm apenas o valor antigo do dado (before image)

log de REDO
mantm apenas o valor atualizado do dado (after image)

log de UNDO/REDO (mais comum)


mantm os valores antigo e atualizado do dado

Tipos de Registro no Log


Supe-se que toda transao possui um identificador nico gerado pelo SGBD Para fins de recuperao de falhas, operaes read no precisam ser gravadas
teis apenas para outros fins (auditoria, estatsticas, ...)

Principais tipos de registro


incio de transao: <start Tx> commit de transao: <commit Tx> atualizao: <write Tx,X,beforeImage,afterImage>
no necessrio em log REDO no necessrio em log UNDO

Exemplo de Log
Log <start T3> <write T3,B,15,12> <start T2> <write T2,B,12,18> <start T1> <write T1,D,20,25> <commit T1> <write T2,D,25,26> <write T3,A,10,19> <commit T3> <commit T2> ... T1
read(A) read(D) write(D)

T2
read(B) write(B) read(D) write(D)

T3
read(C) write(B) read(A) write(A)

Tipos de Registro no Log


Forma alternativa de representar atualizaes
considera a operao DML feita no BD
insert: <write update: <write delete: <write
Tx,X,INSERT,afterImage> Tx,X,UPDATE,beforeImage,afterImage> Tx,X,DELETE,beforeImage>

A indicao do tipo de operao facilita o entendimento do que deve ser UNDO ou REDO no BD

Gerenciamento de Buffer
Buffer
conjunto de blocos da memria principal
considera-se bloco e pgina conceitos sinnimos

O SGBD responsvel pela gerncia de alguns buffers


buffers para dados, para processamento de transaes e para o Log ele assume o controle desses buffers, ao invs do SO, requisitando apenas servios de leitura/escrita de blocos ao SO

Gerenciamento de Buffer
proc. de transaes BD read / write

controle do SGBD
dados (cache)

archive read (UNDO / REDO) write

backup(s) do BD

Log

Log

...
buffers de memria

archive

backup(s) do Log

Gerenciamento de Buffer
Tcnicas de recovery devem sincronizar os buffers de log e de dados
princpio bsico
um bloco atualizado na cache s pode ser gravado no BD aps o histrico dos dados atualizados neste bloco ter sido gravado no Log em disco
Write-Ahead-Log (WAL)

uma transao Tx s pode passar para o estado efetivada (committed) aps todas as suas atualizaes terem sido gravadas no BD segundo o princpio WAL

O SGBD aplica tcnicas de gerenciamento de buffer


estas tcnicas influenciam as tcnicas de recovery

Tcnicas de Gerncia de Buffer


NOT-STEAL
um bloco na cache utilizado por uma transao Tx no pode ser gravado antes do commit de Tx
bloco possui um bit de status indicando se foi (1) ou no (0) modificado vantagem: processo de recovery mais simples - evita dados de transaes inacabadas sendo gravadas no BD

STEAL
um bloco na cache utilizado por uma transao Tx pode ser gravado antes do commit de Tx
necessrio se algum dado requisitado do BD por outra transao e no h blocos disponveis na cache o bloco vtima escolhido atravs de alguma tcnica de SO
LRU, FIFO, ...

vantagem: no h necessidade de manter blocos bloqueados por transaes

Tcnicas de Gerncia de Buffer


FORCE
os blocos que mantm dados atualizados por uma transao Tx so imediatamente gravados no BD quando Tx alcana o commit
deve-se saber quais os blocos que Tx atualizou dados

vantagem: garante a durabilidade de Tx o mais cedo possvel - permite o REDO de Tx em caso de falha

NOT-FORCE
os blocos que mantm dados atualizados por Tx no so imediatamente gravados no BD quando Tx alcana o commit vantagem: blocos atualizados podem permanecer na cache e serem utilizados por outras transaes, aps o commit de Tx (reduz custo de acesso a disco)

Exerccio 1
a) Considere o Log abaixo aps a ocorrncia de uma falha de sistema. Apresente os valores resultantes dos dados A e B para cada alternativa de execuo de operaes UNDO e REDO proposta abaixo. Qual das alternativas mantm o BD consistente?
<start T3> <start T4> <write T4,A,17,20> <write T3,B,15,12> <start T2> <commit T4> <write T2,B,12,18> <start T1> <write T1,A,20,25> <commit T1> <write T2,A,25,26> a) b) c) d) UNDO de T2 e T3 + REDO de T1 e T4 ? UNDO de T2 e T3 + REDO de T1 e T4 ? 1a passada: UNDO de T2 e T3 ? ; 2a passada: REDO de T1 e T4 ? 1a passada: UNDO de T2 e T3 ? ; 2a passada: REDO de T1 e T4 ?
Observaes: 1) ? significa varredura forward do Log 2) ? significa varredura backward do Log

b)

Qual das seguintes combinaes de tcnicas de gerenciamento de buffer requer um gerenciamento mais complexo por parte do SGBD?
a) b) STEAL + NOT-FORCE NOT-STEAL + FORCE

Modificao Imediata do BD
Abordagem na qual dados atualizados por uma transao Tx podem ser gravados no BD antes do commit de Tx Abordagem mais comum de recovery
gerenciamento de buffer mais simples
utiliza tcnica STEAL

Duas tcnicas
UNDO/REDO
tcnica mais comum de recovery

UNDO/NO-REDO

Tcnica UNDO/REDO
Grava o commit de Tx no Log depois de todas as atualizaes de Tx terem sido gravadas no Log, e antes dessas atualizaes serem gravadas no BD
requer um Log de UNDO/REDO lista-REDO: IDs de transaes committed
possuem commit gravado no Log

Utiliza 2 listas de transaes


lista-UNDO: IDs de transaes ativas

Procedimento
1. faz uma varredura backward do Log, realizando UNDO das transaes na lista-UNDO 2. faz uma varredura forward do Log, realizando REDO das transaes na lista-REDO

10

Tcnica UNDO/REDO - Exemplo


tempo

T1 T2 T3 T4 T5
falha (crash) lista-UNDO: T3, T5 (devem sofrer UNDO) lista-REDO: T1, T2, T4 (devem sofrer REDO)

Tcnica UNDO/REDO
A propriedade de idempotncia de operaes UNDO e REDO vlida
fazer UNDO ou REDO uma vez ou vrias vezes produz o mesmo resultado
situaes em que ocorrem falhas durante o processo de recovery

Tcnica mais trabalhosa de recovery


tanto UNDO quanto REDO devem ser realizados
porm, o gerenciamento de buffer mais simples

11

Exerccio 2
a) Na tcnica UNDO/REDO, suponha que uma varredura inicial seja feita no Log para montar a lista-UNDO e a lista-REDO, antes da realizao das varreduras backward e forward. Proponha algoritmos de alto nvel para definir essas listas atravs de:
i. Uma varredura backward do Log; ii. Uma varredura forward do Log Qual algoritmo apresenta menor complexidade?

b)

No item anterior, a complexidade do algoritmo UNDO/REDO O(3nLog), pois 3 varreduras so realizadas no Log. Proponha um algoritmo que resolva o problema em O(2nLog), ou seja, realize apenas 2 varreduras no Log

Tcnica UNDO/REDO
Quando se percorre o Log forward para fazer REDO, possvel que um dado X tenha sido atualizado por mais de uma transao committed Variante da tcnica UNDO/REDO
detectar que X atualizado mais de uma vez e realizar apenas a ltima atualizao
tcnica UNDO/REDO com REDO nico para cada dado na varredura backward do Log para fazer UNDO, quando for encontrada a primeira atualizao de um dado X por uma transao committed, inclui-se X e sua afterImage na listaREDO-dados
novas atualizaes de X feitas por transaes committed que forem encontradas so ignoradas

estratgia

aps, varre-se a lista-REDO-dados, atualizando os dados

12