Recuperação e Atomicidade
Hierarquia de Armazenamento – As transações são
programas e, portanto, ocorrem na Memória
Principal, ao passo que o Banco é armazenado em
Disco
Movimento de dados entre Disco e Memória
Principal ocorre “em blocos” e NEM SEMPRE
OCORRE de forma isolada (ocorre em BLOCOS)
nem de forma instantânea
input(X)  Transfere para a memória o bloco
físico no qual reside um item de dado principal X
output(X)  Transfere para o disco o bloco de
buffer no qual reside X e substitui o bloco físico
apropriado
Recuperação e Atomicidade
read(X, xi)  Atribui o valor do item de dado
X para a variável xi
Esta operação é executada da seguinte maneira:
1. Se o bloco no qual X reside não está na
memória principal, então emite-se um “input
(X)”
2. Atribui para xi, o valor de X do bloco do buffer
Recuperação e Atomicidade
write(X, xi)  Atribui o valor da variável xi
para o item de dado X no bloco de Buffer. Esta
operação é executada da seguinte maneira:
1. Se o bloco no qual X reside não está na
memória principal, então emite-se um “input
(X)”
2. Atribui para xi, o valor de X do bloco de buffer
para X
Recuperação e Atomicidade
Obervações:
1. As duas operações podem requerer a
transferência de um bloco do disco para a
memória principal, mas elas não requerem
especificamente a transferência de um bloco da
memória principal para o disco.
2. Um bloco de buffer é gravado no disco ou
porque o gerenciador de buffer precisa de
espaço na memória para outros blocos ou
porque o SGBD precisa refletir a mudança de
X no disco. Dizemos que o SGBD força a saída
do bloco de buffer se ele emite um output(X)
Recuperação e Atomicidade
Obervações:
3. A operação output(X) nãp precisa tomar efeito
imediatamene após o comando write(X, xi) é
executado, uma vez que o bloco no qual X
reside pode conter outros dados aos quais ainda
está se fazendo acesso.
4. Entretanto se o sistema cair entre um
write(X,xi) e o output(X), X não será
atualizado.
Modelo de Transação
Uma transação não deixa de ser um
programa que é executado em memória
principal, porém ela tem algumas
propriedades que mais à frente
Modelo de Transação
EXEMPLO BÁSICO DE UMA TRANSAÇÃO T1:
TRANSFERÊNCIA BANCÁRIA
T1:
read (A,a1)
a1 := a1 - 50;
write (A,a1)
read (B,b1)
b1 := b1 + 50;
write (B,b1)
Modelo de Transação
Cada “write” de uma transação, é uma sinalização
que o correspondente registro do banco de dados
(BD) deverá ser alterado. Esta alteração não ocorre
de forma imediata, por dois motivos: Primeiro,
porque como já falamos, esta passagem para o BD
ocorre em Blocos e, não necessariamente, após cada
write, o Bloco em que o registro reside será
imediatamente escrito no BD. Segundo, como
veremos, com o objetivo de garantir a consistência e
eventual recuperação do BD, os novos valores do
registro a ser alterado é primeiramente escrito num
LOG (residente em disco) e, depois, do LOG para o
Banco de Dados.
ESTRUTURA DO LOG
Estamos considerando o mecanismo das “modificações adiadas”,
quando a atualização efetiva do BD somente PODE começar a
ocorrer após ser emitido um comando COMMIT no LOG.
Um registro de atualização de log descreve uma única operação
(de escrita) com um dado e possui os seguintes campos:
< Ti, Xj, V1 >
Onde:
Ti corresponde ao identificador da transação;
Xj, identificador do item de dado;
V1, valor novo;
Outros registros de log:
< Ti starts > < Ti commits>
< Ti, abort >
Modificação de Banco de Dados Adiada
Vamos supor as transações T0 e T1 com A= 1000, B =2000 e
C= 700 antes do início da execução das transações
T0: read (A,a1)
a1 := a1 - 50;
write (A,a1)
read (B,b1)
b1 := b1 + 50;
write (B,b1)
T1: read (C,a1)
c1 := c1 - 100;
write (C,c1)
LOG “completo” referente às transações T0 e T1
<T0 starts>
<T0, A, 950>
<T0, B, 2050>
<T0 commits>
<T1 starts>
<T1, C, 600>
<T1 commits>
Vamos supor três situações possíveis que poderíamos encontrar
o
LOG após uma falha
<T0 starts>
<T0, A, 950>
<T0, B, 2050>
<T0 commits>
<T1 starts>
<T1, C, 600>
<T1 commits>
(a)
<T0 starts>
<T0, A, 950>
<T0, B, 2050>
<T0 commits>
<T1 starts>
<T1, C, 600>
(b)
<T0 starts>
<T0, A, 950>
(c)
Ações de recuperação a serem tomadas após o sistema voltar:
Caso (a)
LOG ENCONTRADO
<T0 starts>
<T0, A, 950>
<T0, B, 2050>
<T0 commits>
<T1 starts>
<T1, C, 600>
<T1 commits>
Análise: As transações T0 e T1 ocorreram com sucesso, pois seus
registros de LOG foram escritos, haja vista que seus COMMITS estão
presentes. Porém, não pode-se afirmar que os registros do LOG já foram
escritos no BD, pois os sistema pode ter caído exatamente quando esta
ação ainda estava acontecendo (lendo o LOG e escrevendo no BD).
Ações a serem tomadas: Redo T0 e Redo T1
Caso (b)
LOG ENCONTRADO
<T0 starts>
<T0, A, 950>
<T0, B, 2050>
<T0 commits>
<T1 starts>
<T1, C, 600>
Análise: A transação T0 ocorreu com sucesso. A
transação T1 não necessariamente ocorreu até o final,
pois não existe no LOG o “COMMIT” referente a ela.
Ações a serem tomadas: Redo T0 e
Reexecuta T1
Caso (c) LOG ENCONTRADO
<T0 starts>
<T0, A, 950>
Análise: Nem a transação T0, nem a transação T1
ocorreram com sucesso, pois não existem “COMMIT”
referentes a elas no LOG.
Ações a serem tomadas: Reexecuta T0 e
Reexecuta T1
 REEXECUTAR a transação significa
ignorar seu LOG e executar o
programa referente a ela novamente
 REDO numa transação significa ler
novamente os registros de LOG
correspondentes a ela e atualizá-los
no BD. Se isto já ocorreu, não tem
problema, pois como o LOG trabalha
com
valores
absolutos,
esta
atualização pode ser feita várias vezes
com o mesmo efeito
Consideramos até agora a recuperação pelo mecanismo das
“modificações adiadas”, quando a atualização efetiva do BD
somente PODE começar a ocorrer após ser emitido um comando
COMMIT no LOG. Existe um outro mecanismo de recuperação
que se chama mecanismo das “modificações imediatas”, através
do qual a atualização efetiva do BD “PODE” começar antes
comando COMMIT no LOG. Neste caso, a recuperação deve
desfazer os efeitos de uma transação abortada, para a qual não
aparece o registo de COMMIT no LOG. Para que isso seja
possível, o LOG de escrita deve conter o valor antigo e para tanto
o registro do LOG deve possuir os seguintes campos:
< Ti, Xj, V1, V2>
Onde:
Ti corresponde ao identificador da transação;
Xj, identificador do item de dado;
V1, valor novo;
V2, valor velho;
Vamos supor três situações possíveis que poderíamos encontrar
o LOG após uma falha no caso de um mecanismos de
recuperação pelo mecanismo das “modificações imediatas”
(a)
<T0 starts>
<T0, A, 950,1000>
<T0, B, 2050, 2000>
<T0 commits>
<T1 starts>
<T1, C, 600, 700>
<T1 commits>
(b)
(c)
<T0 starts>
<T0 starts>
<T0, A, 950,1000> <T0, A, 950,1000>
<T0, B, 2050, 2000>
<T0 commits>
<T1 starts>
<T1, C, 600, 700>
Ações a serem tomadas para cada uma das três situações:
(a) Redo T0 e Redo T1
(b) Redo T0, Undo T1 e Reexecuta T1
(c) Undo T0 e Reexecuta T0
Propriedades da Transação
Atomicidade
Consistência
Isolamento
Durabilidade
Propriedades da Transação
Atomicidade
Uma transação deve ser uma unidade atômica de trabalho;
ou todas as suas modificações de dados são executadas ou
nenhuma delas é executada.
Propriedades da Transação
Consistência
Quando concluída, uma transação deve deixar todos os dados
em um estado consistente. Em um banco de dados relacional,
todas as regras devem ser aplicadas às modificações da transação
para manter toda a integridade dos dados.
Todas as estruturas de dados internas, tais como índices
em árvore B ou listas duplamente vinculadas, devem estar corretas
ao término da transação.
Propriedades da Transação
Isolamento
Modificações feitas por transações simultâneas devem ser isoladas
das modificações feitas por qualquer outra transação simultânea.
Uma transação reconhece os dados no estado em que estavam ante
de outra transação simultânea tê-los modificado ou reconhece os
dados depois que a segunda transação tiver sido concluída, mas nã
reconhece um estado intermediário. Isso é chamado seriabilidade
porque resulta na capacidade de recarregar os dados iniciais e
reexecutar uma série de transações de modo que os dados obtidos
estejam no mesmo estado em que estavam depois que as transações
originais foram executadas.
Propriedades da Transação
Durabilidade
Depois que uma transação tiver sido concluída, seus efeitos ficam
permanentemente no sistema. As modificações persistem até mesm
no caso de uma queda do sistema.
Download

Recuperação 05-06