domingo, 27 de dezembro de 2009

Recuperando Dados Apagados no Oracle

Sabe quando você acidentalmente apaga as informações de um banco de dados? E agora, como recuperar? Veja:

Sempre existe a opção de restaurar um backup para fazer esse tipo de coisa, mas isso costuma demorar muito, então, que tal uma consulta que já te retorna os dados apagados?

O nome deste recurso é Flashback Query. Com ela você pode fazer uma consulta atrás no tempo. Fantástico isso, não? Mas o recurso precisa estar previamente habilitado em seu banco de dados.
INSERT INTO USUARIOS
 (SELECT  * FROM USUARIOS AS OF TIMESTAMP
 TO_TIMESTAMP ('22-ABR-03 9:04:58','DD-MON-YY HH24: MI: SS')
 MINUS

 SELECT * FROM USERS);
O que esse comando faz? Vamos por partes.
SELECT  * FROM USUARIOS AS OF TIMESTAMP
 TO_TIMESTAMP ('22-ABR-09 9:04:58','DD-MON-YY HH24: MI: SS')
O trecho acima seleciona todos os dados da tabela de usuário em um determinado dia. É a foto da tabela no momento que você pediu.
SELECT  * FROM USUARIOS AS OF TIMESTAMP
    TO_TIMESTAMP ('22-ABR-03 9:04:58','DD-MON-YY HH24: MI: SS')
 MINUS
 SELECT * FROM USERS;
Este outro código seleciona todos os registros em um determinado momento já fazendo a diferença com o momento atual. Se algo foi apagado, é exatamente isso que vai aparecer.
Por fim, o comando abaixo grava os dados apagados de volta na tabela.
INSERT INTO USUARIOS
Muito bom né? Restaurar um backup pode demorar muito. Se for usar esse comando, não espere muito, porque existe um limite de rollbacks configurado pelo administrador.