Páginas

9 de abr. de 2011

Recuperando dados com o RMAN utilizando Pontos de Restauração

Olá pessoal,

     No artigo de hoje irei demonstrar um recurso muito útil e que sempre demonstro nas aulas dos treinamentos oficiais Oracle Database Administration Workshop II, que é como recuperar dados com o RMAN utilizando Pontos de Restauração.

     Um ponto de restauração pode ser entendido como um apelido para um SCN (System Change Number) ou momento específico do Banco de Dados (BD). Ao criar um ponto de restauração, podemos posteriormente restaurar o estado do BD para o momento em que ele (o ponto de restauração) foi criado. Isso permite voltar o BD no tempo para refletir um estado anterior, ou seja, se às 10h de hoje criarmos um ponto de restauração no BD e às 12h apagarmos dados de 1 tabela, podemos posteriormente recuperar esses dados voltando o BD para o momento em que o ponto de restauração foi criado, pois neste momento os dados ainda existiam na tabela. Este procedimento pode ser útil para executar scripts de atualizações de sistemas. Neste caso, se algo de errado acontecer ao executar os scripts, você poderá voltar o estado anterior do BD e recomeçar a atualização!
  
     O ponto de restauração é armazenado no arquivo de controle e pode ser utilizado para restaurar dados por meio de Flashback (FLASHBACK DATABASE e FLASHBACK TABLEou Backups (RESTORE e RECOVER DATABASE).
       
     Para demonstrar o recurso, executaremos abaixo um passo-a-passo, onde criaremos um ponto de restauração chamado teste e faremos em seguida um backup do BD. Depois, apagaremos dados de uma tabela e posteriormente faremos uma recuperação desses dados, utilizando os comandos RESTORE e RECOVER, através do RMAN.

--------------------------------------------------------------------------
    Para iniciar o passo-a-passo abaixo, é necessário:
         1-  Conectar-se previamente no Banco de Dados desejado, através do SQL Plus ou outra ferramenta compatível, 
com um usuário que tenha o privilégio SYSDBA nos passos 1, 2, 3, 5, 6, 7, 8 e 10 ;
         2- Conectar-se no RMAN em um BD target e opcionalmente em um BD catálogo do RMAN nos passos 4 e 9; 
         3- Ter instalado no BD o schema HR. Se o BD não tiver o schema HR e você precisar de orientação para instalá-lo, 
--------------------------------------------------------------------------


------------------------------------------------------------------------
PASSO-A-PASSO 
------------------------------------------------------------------------

     Passo 1: Criando a tabela EMP2 (que será posteriormente apagada e restaurada )
          SQL> CREATE TABLE HR.EMP2 AS SELECT * FROM HR.EMPLOYEES;

     Passo 2: Verificando se a tabela EMP2 foi criada no passo anterior:
           SQL> SELECT COUNT(1) FROM HR.EMP2;
   
           Resultado: Deverá retornar um valor maior que zero (o normal é que ela retorne o valor 107).
 
     Passo 3: Criando o ponto de restauração (chamado teste):
           SQL> create restore point teste;

     Passo 4: Criando um backup dos dados:
             Neste passo criaremos um backup incremental nível 0, que irá fazer um backup completo de todos os dados do BD. Para efetuar o backup de acordo com o roteiro deste passo-a-passo, é necessário que o BD esteja configurado para gerar archive logs (ver artigo Configurando Bancos de Dados para gerar Archive Logs).
            RMAN> backup incremental level 0 database;

             Obs.: O backup irá conter os dados da tabela EMP2 que serão apagados no próximo passo para possibilitar o teste de restauração e recuperação no Passo 9:

     Passo 5: Apagando os dados da tabela EMP2:
            SQL> TRUNCATE TABLE HR.EMP2;

     Passo 6: Verificando se os dados da tabela EMP2 foram apagados:
            SQL> SELECT COUNT(1) FROM HR.EMP2;
    
             Resultado: Deverá retornar o valor zero.

     Passo 7: Efetuando um shutdown no BD para iniciar a restauração:
             SQL> shutdown immediate;
    
     Passo 8: Startando o BD em estado mount para iniciar a restauração:
             SQL> startup mount;

     Passo 9: Restaurando os dados e abrindo o BD:     
              RMAN> restore database until restore point teste;
              RMAN> recover database until restore point teste;
              RMAN> alter database open resetlogs;

     Passo 10: Verificando se os dados foram restaurados com sucesso:             
              SQL> SELECT COUNT(1) FROM HR.EMP2;
   
      RESULTADO FINAL:
              Se a restauração dos dados ocorrer sem problemas, o retorno do passo 10 será novamente um valor maior que zero, ou seja, os dados da tabela EMP2 que foram apagados no Passo 5 foram restaurados com sucesso.
     

CONCLUSÃO:
       Utilizar um ponto de restauração é um método bastante prático e preciso para restaurar o BD para um estado prévio, caso ocorram falhas ou atualizações indesejadas no BD. Recomendo sempre que possível, criar pontos de restauração seguidos de um backup do BD, antes de efetuar grandes atualizações que possam comprometer a integridade ou consistência dos dados.
 
  
Referências:
    - Curso oficial da Oracle: Oracle Database 10G Administration Workshop II.

11 comentários:

  1. Muito bom a matéria e o passo-a-passo é bem didatico e prático.

    Vlw

    ResponderExcluir
  2. Parabéns Fabio , muito bom a explicação bem didático.

    ResponderExcluir
  3. Show Fábio, é muito gratificante ver uma pessoa com conhecimentos significativos em um determinado assunto ter a disponibilidade de repassá-las aos demais. Parabéns...

    ResponderExcluir
    Respostas
    1. Cristiano, obrigado pelo comentário! É gratificante para mim tbém compartilhar conhecimento! Eu aprendo muito dando aulas e escrevendo artigos!

      []s

      Excluir
  4. Olá Fábio, segui seu artigo até o passo 8.
    Não conheço muito o RMAN mas através de outro artigo, criei um catálogo e fiz o registro.
    No passo 9, de que forma conecto no catálogo para rodar o comando. O banco de dados está em MOUNT.
    Obrigada!

    ResponderExcluir
    Respostas
    1. Camilla, siga o exemplo abaixo:

      rman target user/senha catalog rman/senha@catalog

      Obs.: Substitua "user/senha" pelo usuário e senha do BD target (considerando que vc irá se conectar em um target local configurado na variável de ambiente ORACLE_SID), substitua "rman/senha" por um usuário e senha do Bd do catálogo, e por fim, substitua "catalog" pelo nome do BD do catálogo (previamente cadastrado no tnsnames.ora)

      OK?

      Excluir
    2. Ótimo, consegui.

      Excluir
  5. Bom dia Fabio, eu trabalho a 5 anos como DBA, com experiência maior em MSSQL SERVER e PostgreSQL, acabo de ingressar em um projeto para trabalhar como DBA Oracle.
    Um dos problemas que a atual dba está tendo é o de restaurar o backup feito e na base restaurada as sequences se perderem.

    Sabe me dizer a razão da perda de referência, tenho pesquisado sobre as rotinas de backup com o Rman, usando DataPump para duplicar uma base mas não encontro ninguém falando sobre a possibilidade deste problema.

    Se puder me dar uma luz, agradeço.

    Abraço e parabéns pelo site

    ResponderExcluir
    Respostas
    1. Bergoni, primeiro me explique melhor uma coisa, não tem como vc usar o DataPump para fazer backup através do RMAN. O RMAN faz backups físicos e normalmente você utiliza ele através de um utilitário chamado RMAN. O DataPump faz backups lógicos e normalmente você utiliza ele através dos utilitários expdp e impdp. Esse problema que você se referiu normalmente ocorre no DataPump ao fazer um export com expdp. Para resolvê-lo acrescente na linha de comando o parâmetro FLASHBACK_TIME como no exemplo do link: https://oracle-base.com/articles/10g/oracle-data-pump-10g, ok?

      []s

      Excluir