Oracle FlashBack - Pedro F. Carvalho

Transcrição

Oracle FlashBack - Pedro F. Carvalho
Pedro F. Carvalho
Analista de Sistemas
[email protected]
Flashback Database
Esse recurso de Flashback Database permite recuperar o banco, fazendo que o mesmo
possa ser voltado num ponto específico do tempo. Esse recurso pode ser útil para
situações como corrupção de dados lógicos ou perda de dados feita por algum usuário
de uma maneira não intencional.
Antes de aprofundarmos mais no assunto, gostaria de deixar claro que esse recurso
não é um recurso de recuperação de banco de dados no caso de perda física ou
corrupção física, mas sendo um meio mais rápido para uma recuperação de dados se
comparado a outros, como backups lógicos e Logminer.
Estrutura
A estrutura do Flashback Database envolve alguns novos componentes: logs de
Flashback Database e RVWR (Processo de segundo plano).
* Logs de Flashback Database: é um arquivo de log com a imagem anterior dos blocos
do banco de dados Oracle. Esses logs devem ser criados na área de recuperação de
flashback, ou seja, essa área deve ser configurada para esse armazenamento. Esses
logs não servem para recuperação de banco, pois os mesmos não são arquivados
como acontece com a área de redo.
* RVWR: Quando o Flashback Database está ativado, o processo de segundo plano
RVWR é iniciado, sendo responsável por gravar nos logs os dados do Flashback
Database.
Utilizando
Para utilizar o Flashback Database o banco deve esta no modo ARCHIVELOG e uma
área de recuperação deve ser configurada, caso tenha um banco RAC (Real Aplication
Cluster) esse deve ser aberto no modo exclusivo.
Abaixo darei um exemplo de como utilizar esse recurso no SQL*PLUS, mas o podendo
ser utilizado em outras ferramentas como o RMAN e OEM.
01. Desative o Banco;
02. Monte o banco, se for do tipo RAC, monte no modo exclusivo;
03. Dê o seguinte comando: alter system db_flashback_retetion_target = 5000;
Esse comando definirá até onde poderá recuperar o banco. É quantificado em minutos.
04. Ative o Flashback Database: alter database flashback on;
05. Abra o banco (alter database open;) e anote o SCN (System Change Number)
na view V$database no Current_SCN e faça algumas alterações no banco;
Pedro F. Carvalho
Analista de Sistemas
[email protected]
06. Dê um Shutdown e monte o banco novamente;
07. Agora utilize o comando flashback database to scn (SCN anotado antes das
alterações sem o parêntese);
08. Abra o banco no modo read only (alter database open read only;) e veja se as
alterações que você tinha feito sumiram;
09. Depois que você confirmar se é nesse ponto que você gostaria de voltar mesmo,
abra o banco com resetlogs (alter database open resetlogs);
OBS: Você pode fazer uma recuperação tanto pra frente quanto pra trás no
tempo e quantas vezes desejar até abrir o banco com RESETLOGS.
Visões
O Oracle 10g oferece as seguintes visões para o Flashback Database:
* V$database: Coluna Flashback_on, que mostra se o recurso está ativado.
* V$flashback_database_log: Permite monitorar o RETENTION_TARGET, que pode
ajudar a estimar a quantidade de espaço exigida na área de recuperação.
Colunas importantes: FLASHBACK_SCN (menor SCN permitido), RETENTION_TARGET,
FLASHBACK_SIZE (tamanho da área de recuperação ocupada) e
ESTIMATED_FLASHBACK_SIZE (Tamanho estimado de dados).
* V$flashback_database_stat: Manutenção dos dados de logs. Estima a quantidade
total de espaço para recuperações futuras.
Desvantagens
Esse recurso não pode ser utilizado:
* Caso o arquivo de controle (controlfile) foi restaurado ou recriado
* O Objeto que você precisa consultar teve sua tablespace excluída.
* O arquivo de controle (controlfile) que contém o objeto a ser consultado foi reduzido
* Ocorreu uma recuperação com o comando RESETLOGS
Flashback Drop
Esse recurso permite desfazer um comando Drop table sem precisar ativar o recurso
Flashback Database.
RECYCLEBIN
Pedro F. Carvalho
Analista de Sistemas
[email protected]
Para suportar esse recurso o Oracle introduziu o conceito de lixeira que funciona
semelhante ao do Windows, sendo nomeado de RECYCLEBIN.
Utilizando
Quando o usuário dá o comando drop table NOMEDATABELA, as tabelas vão para a
lixeira do Oracle. Caso queira excluir a tabela sem que a mesma vá para a lixeira,
basta dar um drop table NOMEDATABLEA purge;.
Na RECYCLEBIN, lixeira, o objeto tem seu nome alterado para evitar conflito nas
atribuições de nomes dos objetos excluídos.
OBS: Note que os objetos não são excluídos e sim movidos para a área da
lixeira quando "Dropado" sem o comando PURGE.
Caso queira excluir um objeto da lixeira e não lembra qual é seu nome identificado
após a exclusão, utilize a visão do dicionário de dados RECYCLEBIN, nela conterá
informações do nome original do objeto, nome após exclusão, tipo de operação, tipo
de objeto, dentre outras informações.
Após identificar o nome, dê o comando purge table NOMEIDENTIFICADO;.
Para recuperar uma tabela excluída sem o comando PURGE, dê:
flashback table NOMEDATABELA to before drop;
Pode-se também recuperar uma tabela num ponto específico do tempo. Para isso há
duas maneiras, TIMESTAMP ou SCN, conforme exemplos abaixo:
flashback table NOMEDATABELA to timestamp to_timestamp('11-Jan-2005
09:00:00', 'dd-MON-yyyy hh24:mi:ss');
flashback table NOMEDATABELA to before scn 1901443;
FLASHBACK VERSIONS QUERY
Esse recurso dá a opção de visualizar num ponto específico do tempo versões de
dados, ou seja, caso queira ver dados de um usuário cadastrado a um determinado
tempo em sua base e ver, por exemplo, as mudanças desses dados como e-mail,
endereço ou telefone.
No exemplo abaixo, mostraremos como utilizar esse recurso e examinar uma lista de
telefones dos usuários e as alterações nos últimos trinta minutos.
* select id, nome, sobrenome, telefone from usuários VERSIONS BETWEEN
TIMESTAMP
SYSTIMESTAMP - INTERVAL '30' MINUTE;
Pedro F. Carvalho
Analista de Sistemas
[email protected]
Só serão mostradas as alterações submetidas a COMMIT ou ROLLBACK. Um outro
ponto importante é que esse recurso depende do tamanho do seu UNDO, ou melhor,
do seu UNDO_RETENTION. É importante saber que ao informar um TIMESTAMP ou um
SCN maior do possível, o Oracle te retornará um erro.
OBS: Esse Recurso não pode ser utilizado em Views e o usuário necessita de
privilégios de Flashback e Select.
FLASHBACK TRANSACTION QUERY
Para finalizar o último novo recurso Flashback presente na versão 10g, que possibilita
a reconstrução de instruções SQL previamente executadas no banco.
Para se fazer uso desse recurso será utilizado a visão V$flashback_transaction_query,
mas como o recurso anterior, também depende do parâmetro UNDO_RETENTION.
Exemplo:
select undo_sql from v$flashback_transaction_query where table_owner = 'JOAO' and
table_name = 'USUARIOS' and start_scn 1901443 and 1980475;
Nesse exemplo estamos examinando instruções SQL realizadas entre o System Change
Number 1901443 e 1980475.
O único problema nessa feature é que a visão do dicionário não é indexada.
Uma observação final. Nunca esqueça de colocar um valor alto no parâmetro
UNDO_RENTENTION, caso contrário, dependendo da situação, não conseguirá voltar
ao ponto desejado.

Documentos relacionados

Voltando no tempo com Oracle Flashback Database

Voltando no tempo com Oracle Flashback Database um Backup é importante pois irá assegurar que o tempo de indisponibilidade do banco de dados, tecnicamente chamado de downtime seja o menor possível, minimizando assim os impactos para o ambiente. ...

Leia mais