Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Técnicas de Recuperação em
Banco de Dados
Daniela Barreiro Claro MATA-60
UFBA
2
Razão Os dados são os ativos mais valiosos de uma
organização, devemos então “protegê-los”
Uso Recuperação
Auditoria
Rollback
Teste
Escalabilidade
Introdução
3
Falhas podem ocorrer em qualquer Sistema
SGBD deve garantir as propriedades
ATOMICIDADE e DURABILIDADE
Recuperação das transações que falharam BD deve ser restaurado ao estado consistente + recente
O sistema deve manter as alterações sobre os
itens de dados alterados pelas transações Esta informação é armazenada em log (historico) do
sistema
Recuperação em BD
4
Estratégias para recuperação Dano extenso ao BD, falha catastrófica, ex. Crash de
disco Método utilizado: restaurar uma copia anterior do BD, e
reconstrói o estado mais atual, reaplicando ou refazendo as
operações das transações contidas no LOG (restore de um
backup)
BD não foi danificado fisicamente, mas se torna
inconsistente por causa de uma falha não-catastrófica Método: desfazer algumas operações e refazer outras, de forma
a restaurar um estado consistente
Recuperação em BD
5
Algoritmos para garantir a coerência e
atomicidade mesmo na presença de falhas em 2
etapas Ações tomadas DURANTE o processamento da
transação para obter info suficiente para recuperar das
falhas
Ações tomadas APÓS uma falha, para recuperar o
conteúdo do BD a um estado consistente, atômico e
durável.
Recuperação em BD
6
Em geral o processo de recuperação está
fortemente ligado às funções do SO
A estrutura mais utilizada para registrar as
modificações do BD é o LOG LOG é uma sequência de registros contendo todas as
atualizações do BD
Duas técnicas de recuperação de falhas não-
catastróficas (usando o log) Modificação adiada e modificação imediata
Recuperação em BD
7
Log via Modificação Adiada Posterga qualquer atualização real no BD
Durante a execução da transação, as atualizações
são registradas apenas no LOG
Se o sistema falhar antes que T termine sua
execução, a informação no LOG é simplesmente
ignorada
Somente o novo valor é registrado no LOG
Conhecida como NO-UNDO/REDO
Recuperação em BD
8
Log via Modificação Imediata As atualizações são enviadas ao BD enquanto a
transação ainda está no estado ATIVO
O sistema precisa do VALOR_ANTIGO para restaurar
os itens de dados modificados
Operação UNDO realiza a restauração
A atualização do LOG deve ser antes da atualização
real do BD
Conhecida como UNDO/REDO
Recuperação em BD
9
Log via Modificação Imediata Dois procedimentos de recuperação
UNDO(Ti): restaura o valor para VALOR_ANTIGO
REDO(Ti): define o valor para VALOR_NOVO
Depois de uma falha, consulta-se o log para determinar
quais transações precisam ser refeitas e desfeitas
Ti deve ser DESFEITA: se log contém <ti,start> mas não
contém o registro de <ti,commit>
Ti deve ser REFEITA: se log tiver <ti,start> e <ti,commit>
Recuperação em BD
10
Quando ocorre uma falha, é preciso consultar o
log para determinar Transações a serem REFEITAS e/ou DESFEITAS
A princípio precisa-se pesquisar o LOG inteiro Processo demorado
A maioria das transações já enviaram suas informações ao
Banco de dados
Checkpoints reduz a sobrecarga do sistema
Periodicamente o sistema realiza pontos de verificação
Pontos de verificação (checkpoint)
11
Considere as transações T0, ..., T100
Suponha que o ponto de verificação mais recente tenha
ocorrido em T67
Somente as transações T67, T68, ..., T100 precisam
ser consideradas durante o esquema de
recuperação
É o gerenciador de recuperação de um SGBD
quem determina o intervalo dos checkpoints
Pontos de verificação (checkpoint)
12
PostgreSQL Implementa o controle de concorrência multiversão (mvcc)
e o 2PC
Instruções DML – mvcc semelhante ao timestamp
multiversão
Instruções DDL – 2PC
Transação é bloqueada se dois escritores tentam
escrever na mesma linha
A partir da versão 7.1 Log de escrita com uma fase de REDO e de UNDO
Gerenciamento de Transações em
BDs Comerciais
13
Oracle Implementa 2PC multiversão
Usa bloqueio nível de linha (granularidade fina)
DDL – Usa bloqueio nível de tabela
Detecta impasses e os resolve automaticamente
revertendo uma das transações
IBM DB2 Bloqueios nível de registro e tabela
2PC estrito
Não aceita transações multiníveis ou aninhadas
Gerenciamento de Transações em
BDs Comerciais
Prática
Backup e recuperação
14
15
1° Método – backup Servidor MySQL “parado”
datadir do arquivo my.cnf (/etc/mysql/my.cnf)
Copiar os arquivos da pasta de dados do MySQL Linux: /var/lib/mysql/nome_database/nome_tabela
MyISAM nome_tabela.frm = Arquivo de definição (formato)
nome_tabela.MYD = Arquivo de dados
nome_tabela.MYI = Arquivo de index
InnoDB nome_tabela.frm = Arquivo de definição (formato)
ibdata1 = Dados de todas as tabelas (/var/lib/mysql)
Backup e recuperação (MySQL)
16
1° Método – recuperação Servidor MySQL “parado”
Copiar os arquivos de volta à pasta de dados
Levar em consideração os backups incrementais
Iniciar o servidor MySQL
Backup e recuperação (MySQL)
17
2° Método - backup Servidor MySQL “rodando”
mysqldump
*.sql contendo todos os comandos SQL
*.sql é gerado em texto puro, pode ser compactado create table
drop table
insert
lock/unlock tables
Independente de storage engines
Backup e recuperação (MySQL)
2° Método - backup Sintaxe
Geral $>mysqldump -u usuário -p [arguments] > file_name
Todas databases $>mysqldump --all-databases > dump.sql
Databases específicas $>mysqldump --databases db1 db2 > dump.sql
Tabelas específicas $>mysqldump db1 t1 t2 > dump.sql
Padrão add-drop-table, add-locks, create-options, disable-keys, extended-insert, lock-
tables, quick e set-charset
Backup e recuperação (MySQL)
Backup e recuperação (MySQL)
20
2° Método - recuperação Sintaxe
Shell (create ... use) $>mysql -u usuário -p < dump.sql
MySQL mysql>create database if not exists db1;
mysql>use db1;
mysql>source dump.sql;
Backup e recuperação (MySQL)
21
3° Método – backup Log de atualização
mysqld_safe --log-bin
Ligar: cria um novo log-bin
Desligar: “flush” as modificações para o log-bin
mysqld-bin.000001
Lista todos os log-bin mysql>show binary logs;
Informa o log-bin atual mysql>show master status;
Le um determinado log-bin $mysqlbinlog /var/lib/mysql/mysqld-bin.000001
Backup e recuperação (MySQL)
22
3° Método – recuperação Restaura o log-bin
$mysqlbinlog mysqld-bin.000001 | mysql -u –p
Restaura o log-bin até (a partir) um certo momento $mysqlbinlog --stop[start]-datetime=“timestamp”
mysqld-bin.000001 | mysql -u –p
Restaura o log-bin até (a partir) um certo evento $mysqlbinlog --stop[start]-position=368312
mysqldbin.000001 | mysql -u -p
Backup e recuperação (MySQL)
23
phpMyAdmin
Ferramentas CASE
24
MySQL Workbench
Ferramentas CASE
25
High Performance MySQL, Third Edition por
Baron Schwartz, Peter Zaitsev, and Vadim
Tkachenko
Learning MySQL por Seyed M.M. “Saied”
Tahaghoghi and Hugh E. Williams MySQL 5.5 Reference Manual
Referências