GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

Recuperar datafile apagado, sem backup

Se um datafile de um Banco de Dados Oracle foi apagado e não há backup, é possível recupera-lo, e nem é tão difícil…

Isto só é possível se a instância não foi desligada após a remoção do arquivo, e se o Sistema Operacional utilizado for Unix ou Linux.

Quando a instância é iniciada, o DBWR (e outros processos como o PMON e SMON) adquire um lock do Sistema Operacional em todos os datafiles. Desta forma, se um datafile for apagado com o comando rm, apenas o seu ponteiro é removido, o arquivo continuará gravado no filesystem, embora não pareça.
É por esse mesmo motivo que em Unix, ao se remover um grande arquivo de log (por exemplo, listener.log), o espaço livre não é liberado até o processo que estava gravando nele seja reiniciado.
O mesmo ocorre com o LGRW e os REDOs.

Por isso este procedimento só irá funcionar se a instância não foi desligada ainda, pois se ela for, o lock é liberado e o arquivo é apagado realmente.

Para simular esta situação, apague um datafile (não preciso dizer que não me responsabilizo se você fizer isso em produção, certo?):
rm /u02/oradata/users01.dbf

Neste momento, qualquer operação que tente utilizar o datafile resultará em um erro. Tente aumentar o datafile ou extrair dados, e verá que não conseguirá. Não vou demonstrar essa parte aqui, pois já tentei demais essa semana. 🙂

Descubra o PID do DBWR:
$ ps -ef | grep dbw
oracle 21943 1 0 10:27:08 ? 0:00 ora_dbw0_PRD

Encontre os arquivos abertos pelo DBWR (PID 21943):
lsof -p 21943 | grep users01.dbf

Este comando irá retornar várias colunas. Precisamos do valor da coluna FD.
Neste caso, foi 270uW. Só precisamos dos três primeiros números, ou seja, 270.

Vá até o diretório onde estão os file descriptors do DBWR:
cd /proc/21943/fd/

Coloque a tablespace em READ ONLY:
SQL> ALTER TABLESPACE users READ ONLY;

Agora vem a mágica. Faça uma nova cópia do arquivo usando o file descriptor:
cat 270 > /u02/oradata/users01.dbf

Coloque a tablespace em offline, e de volta em online.
SQL> ALTER TABLESPACE users OFFLINE;
SQL> ALTER TABLESPACE users ONLINE;

Pronto, seus dados estão acessíveis, e o datafile pode ser utilizado normalmente.
Agora seria uma boa hora para um backup full em RMAN, e sugerir a demissão de alguém.

Este procedimento foi extraído da nota 444749.1 do Metalink.

Share

You may also like...

12 Responses

  1. Regis Araujo disse:

    Salve Portilho..

    Caraca.. que desafio heim.. mais um otimo post heim.. Excelente…

    Abraços.!!!

  2. Òtimo post…sem comentários a mais Portilho.

    Abs,

  3. Thiago disse:

    Muito boa a dica!!!

  4. Emerson Monteiro disse:

    Vou dar uma de Tomé … só acredito vendo!!!

    Vou testar e depois postar aqui o resultado, mas a dica é boa…

  5. Olá Portilho,

    Não conhecia essa técnica. Parabéns … O problema é que muitas vezes, no desespero, o técnico sem saber o que realmente está ocorrendo, acaba por efetuar um shutdown no servidor e aí já era …

  6. Drbs disse:

    Sensacional, a frase final então bem forte..kkkkkk..”Sugerir a demissão de alguém.”
    Parabéns Portilho, como sempre um excelente material.

    Abraço.

    David

  7. Marcio de Souza Almeida disse:

    Novamente algo que realmente vem a contribuir com a comunidade.

    Parabéns 😀

  8. Regis Araujo disse:

    Opa…

    Teste realizado e Datafile Recuperado com sucesso..

    Abraços..!

  9. Bruno Murassaki disse:

    Olá Portilho,

    Ótimo post hein Parabéns.

    Abraços

    Bruno Murassaki

  10. Portilho,

    Essa dica é de JEDY! Parábens!

    Abraços,
    Rodrigo Almeida

  11. Muita boa dica Ricardo!!!

    Já aconteceu uma vez comigo algo parecido, só que voltamos o datafile através de archives coisa que no 10g já é possivel usando rman. Se tivesse acesso a esse post na época teria nos poupado um trabalinho.

    Vlw mesmo pelo post! Excelente!!!

    Att,
    Rodrigo Mufalani

  12. Boa tarde Ricardo,

    Conforme eu prometi, segue o link para o teste feito que é uma alternativa ao post. Porém sem precisar ter acesso ao S.O. Somente com ferramentas Oracle (RMAN)

    http://mufalani.blogspot.com/2009/07/recuperando-uma-tablespace-criada-e.html

    Atenciosamente,

    Rodrigo Mufalani

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *