Pular para o conteúdo

Recover Completo com RMAN

Recover Completo com RMAN

Segue um pequeno ensaio de como efetuar uma recuperação completa do banco usando RMAN.

Exemplo prático de uma recuperação completa de um banco de dados utilizando RMAN.

Para esse teste usei a versão 11.1.0.6 do RDBMS.

Um requisito para este ensaio é um banco de dados com um backup inconsistente usando RMAN e não esquecer que o banco necessita dos ARCHIVELOGS ativos.

Digamos que por algum motivo (ainda desconhecido) o banco de dados não foi aberto (está em estado mount). Obviamente deve-se recorrer ao alert log para buscar o erro na inicialização e posteriormente consultar os arquivos de trace gerados. Esse procedimento demandará tempo valioso para uma instituição.

Dada as circunstâncias, sabe-se que há um backup completo e os archives estão intactos.

O método recomendado e seguro é efetuar um restore e recover completo do banco de dados através do RMAN, o qual utilizará o último backup para restaurar os datafiles e os archives para restaurar os dados após o backup.

Segue o procedimento:

1) Certificar que o banco de dados está em estado MOUNT

SQL> select status from v$instance;
 
 STATUS
 ------------
 MOUNTED
 
 SQL>

2) Executar o restore completo do banco de dados

RMAN> restore database;
 
 Iniciando restore em 10/12/09
 
 usar o arquivo de controle do banco de dados de destino em vez do catalogo de recuperacao
 
 canal alocado: ORA_DISK_1
 canal ORA_DISK_1: SID=153 tipo de dispositivo=DISK
 ignorando o arquivo de dados 1; ja restaurado para o arquivo C:\ORACLE\ORADATA\ ORCL\SYSTEM01.DBF
 canal ORA_DISK_1: iniciando restauracao de conjunto de backups de arquivo de dados
 canal ORA_DISK_1: especificando arquivo(s) de dados para restauracao a partir do conjunto de backups
 canal ORA_DISK_1: restaurando o arquivo de dados 00002 em C:\ORACLE\ORADATA\ ORCL\SYSAUX01.DBF
 canal ORA_DISK_1: restaurando o arquivo de dados 00003 em C:\ORACLE\ORADATA\ ORCL\UNDOTBS01.DBF
 canal ORA_DISK_1: restaurando o arquivo de dados 00004 em C:\ORACLE\ORADATA\ ORCL\USERS01.DBF
 canal ORA_DISK_1: restaurando o arquivo de dados 00005 em C:\ORACLE\ORADATA\ ORCL\EXAMPLE01.DBF
 canal ORA_DISK_1: lendo da parte de backup C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\ 2009_12_07\O1_MF_NNNDF_TAG20091207T160253_5KTNBZ4G_.BKP
 canal ORA_DISK_1: handle de componente=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\ 2009_12_07\O1_MF_NNNDF_TAG20091207T160253_5KTNBZ4G_.BKP tag=TAG20091207T160253
 canal ORA_DISK_1: restaurada a parte de backup 1
 canal ORA_DISK_1: restauracao concluida, tempo decorrido: 00:01:36
 Finalizado restore em 10/12/09
 
 RMAN>

3) Executar o recover do banco de dados

RMAN> recover database;
 
 Iniciando recover em 10/12/09
 utilizando o canal ORA_DISK_1
 iniciar recuperacao de midia
 o log arquivado para thread 1 com sequencia 17 ja esta no disco como arquivo C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\ 2009_12_09\O1_MF_1_17_5L00YQ54_.ARC
 o log arquivado para thread 1 com sequencia 18 ja esta no disco como arquivo C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\ 2009_12_09\O1_MF_1_18_5L00YQRX_.ARC
 o log arquivado para thread 1 com sequencia 19 ja esta no disco como arquivo C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\ 2009_12_09\O1_MF_1_19_5L00YP5F_.ARC
 canal ORA_DISK_1: iniciando restauracao de log arquivado para destino default
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=7
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=8
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=9
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=10
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=11
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=12
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=13
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=14
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=15
 canal ORA_DISK_1: restaurando log de arquivado
 thread de log arquivado=1 sequencia=16
 canal ORA_DISK_1: lendo da parte de backup C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\BACKUPSET\ 2009_12_09\O1_MF_ANNNN_TAG20091209T164459_5KZZL2P4_.BKP
 canal ORA_DISK_1: handle de componente=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\BACKUPSET\ 2009_12_09\O1_MF_ANNNN_TAG20091209T164459_5KZZL2P4_.BKP tag=TAG20091209T164459
 canal ORA_DISK_1: restaurada a parte de backup 1
 canal ORA_DISK_1: restauracao concluida, tempo decorrido: 00:00:15
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_7_5L1YPM95_.ARC thread=1 sequencia=7
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_7_5L1YPM95_.ARC RECID=18 STAMP=705235364
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_8_5L1YPM23_.ARC thread=1 sequencia=8
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_8_5L1YPM23_.ARC RECID=19 STAMP=705235365
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_9_5L1YPLQ2_.ARC thread=1 sequencia=9
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_9_5L1YPLQ2_.ARC RECID=25 STAMP=705235368
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_10_5L1YPLN3_.ARC thread=1 sequencia=10
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_10_5L1YPLN3_.ARC RECID=26 STAMP=705235374
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_11_5L1YPLFQ_.ARC thread=1 sequencia=11
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_11_5L1YPLFQ_.ARC RECID=27 STAMP=705235375
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_12_5L1YPLXL_.ARC thread=1 sequencia=12
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_12_5L1YPLXL_.ARC RECID=21 STAMP=705235366
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_13_5L1YPP3P_.ARC thread=1 sequencia=13
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_13_5L1YPP3P_.ARC RECID=22 STAMP=705235366
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_14_5L1YPNFQ_.ARC thread=1 sequencia=14
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_14_5L1YPNFQ_.ARC RECID=20 STAMP=705235365
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_15_5L1YPPGR_.ARC thread=1 sequencia=15
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_15_5L1YPPGR_.ARC RECID=23 STAMP=705235366
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_16_5L1YPQ2B_.ARC thread=1 sequencia=16
 canal default: deletando log(s) arquivado[s]
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_10\O1_MF_1_16_5L1YPQ2B_.ARC RECID=24 STAMP=705235367
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_09\O1_MF_1_17_5L00YQ54_.ARC thread=1 sequencia=17
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_09\O1_MF_1_18_5L00YQRX_.ARC thread=1 sequencia=18
 nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ ORCL\ARCHIVELOG\ 2009_12_09\O1_MF_1_19_5L00YP5F_.ARC thread=1 sequencia=19
 recuperacao da midia concluida, tempo decorrido: 00:00:45
 Finalizado recover em 10/12/09
 
 RMAN>

4) Abrir o banco de dados usando RESETLOGS

RMAN> sql 'alter database open resetlogs';
 
 instrucao sql: alter database open resetlogs
 
 RMAN>

5) Verificar se o banco está em modo OPEN

SQL> select status from v$instance;
 
 STATUS
 ------------
 OPEN
 
 SQL>

Após este procedimento o banco de dados está disponível para uso.

Ressalto que cada caso é um caso. Esse método foi escolhido porque o banco é pequeno (3GB) e a restauração e recuperação não demoraram 15 minutos para finalizar. Em muitos casos o banco de dados ultrapassa os 50GB e vale a pena investir um pouco de tempo pesquisando o real motivo do erro e a solução mais conveniente para a situação.

Tomar a decisão certa para cada caso faz diferença no resultado final.

Marcos Braga

Marcos Braga

Pós-graduação em Computação Forense e Perícia Digital, pós-graduação em Redes de Computadores e com graduação em Tecnologia em Processamento de Dados.

Comentário(s) da Comunidade

  1. Oi Paulo,

    Nesse caso, tenho uma breve dúvida se eu abri o banco antes de executar o recover, o que pode ter ocasionado a necessidade do OPEN RESETLOGS.

    Porém, está corretíssimo. Em um ambiente onde só é necessário o restore de um backup consistente, não é necessário o uso do RESETLOGS.

    Sucesso e valeu pela dica,
    Marcos Braga

  2. Opa, blz Braga?

    Então… O caso é que não é possível executar o comando OPEN RESETLOGS em recuperações completas.
    O RMAN vai te retornar mais ou menos isso aqui:

    “RMAN-11003: failure during parse/execution of SQL statement: alter database o resetlogs
    ORA-01139: RESETLOGS option only valid after an incomplete database recovery.”

    Fiquei com uma dúvida,
    Como vc consegue recuperar o banco de dados usando apenas o restore?

    Abs.
    Paulo Gervasio.

  3. Oi Paulo,

    Creio que, se o backup foi inconsistente, ou melhor, de um banco que estava aberto e os ARCHIVELOGS sendo gerados, sim, é possível fazer uma recuperação completa usando o RESETLOGS.

    E, se não me engano, é possível executar uma restauração usando somente o RESTORE se o backup foi consistente, com o banco baixado e a segunda opção é se o banco estiver em NOARCHIVELOG.

    E grato pela dica, fica registrada.

    []s
    Braga

Deixe um comentário

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

plugins premium WordPress