Exemplo prático de uma recuperação completa de um banco de dados utilizando RMAN.
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:
SQL> select status from v$instance;STATUS------------MOUNTEDSQL>* Restaurando o banco de dados completo.
RMAN> restore database;Iniciando restore em 10/12/09usar o arquivo de controle do banco de dados de destino em vez do catalogo de recuperacaocanal alocado: ORA_DISK_1canal ORA_DISK_1: SID=153 tipo de dispositivo=DISKignorando o arquivo de dados 1; ja restaurado para o arquivo C:\ORACLE\ORADATA\ORCL\SYSTEM01.DBFcanal ORA_DISK_1: iniciando restauracao de conjunto de backups de arquivo de dadoscanal ORA_DISK_1: especificando arquivo(s) de dados para restauracao a partir do conjunto de backupscanal ORA_DISK_1: restaurando o arquivo de dados 00002 em C:\ORACLE\ORADATA\ORCL\SYSAUX01.DBFcanal ORA_DISK_1: restaurando o arquivo de dados 00003 em C:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBFcanal ORA_DISK_1: restaurando o arquivo de dados 00004 em C:\ORACLE\ORADATA\ORCL\USERS01.DBFcanal ORA_DISK_1: restaurando o arquivo de dados 00005 em C:\ORACLE\ORADATA\ORCL\EXAMPLE01.DBFcanal ORA_DISK_1: lendo da parte de backup C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_12_07\O1_MF_NNNDF_TAG20091207T160253_5KTNBZ4G_.BKPcanal ORA_DISK_1: handle de componente=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_12_07\O1_MF_NNNDF_TAG20091207T160253_5KTNBZ4G_.BKP tag=TAG20091207T160253canal ORA_DISK_1: restaurada a parte de backup 1canal ORA_DISK_1: restauracao concluida, tempo decorrido: 00:01:36Finalizado restore em 10/12/09RMAN>* Recuperando os dados.
RMAN> recover database;Iniciando recover em 10/12/09utilizando o canal ORA_DISK_1iniciar recuperacao de midiao 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_.ARCo 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_.ARCo 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_.ARCcanal ORA_DISK_1: iniciando restauracao de log arquivado para destino defaultcanal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=7canal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=8canal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=9canal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=10canal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=11canal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=12canal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=13canal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=14canal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=15canal ORA_DISK_1: restaurando log de arquivadothread de log arquivado=1 sequencia=16canal ORA_DISK_1: lendo da parte de backup C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_12_09\O1_MF_ANNNN_TAG20091209T164459_5KZZL2P4_.BKPcanal ORA_DISK_1: handle de componente=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_12_09\O1_MF_ANNNN_TAG20091209T164459_5KZZL2P4_.BKP tag=TAG20091209T164459canal ORA_DISK_1: restaurada a parte de backup 1canal ORA_DISK_1: restauracao concluida, tempo decorrido: 00:00:15nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_7_5L1YPM95_.ARC thread=1 sequencia=7canal 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=705235364nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_8_5L1YPM23_.ARC thread=1 sequencia=8canal 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=705235365nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_9_5L1YPLQ2_.ARC thread=1 sequencia=9canal 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=705235368nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_10_5L1YPLN3_.ARC thread=1 sequencia=10canal 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=705235374nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_11_5L1YPLFQ_.ARC thread=1 sequencia=11canal 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=705235375nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_12_5L1YPLXL_.ARC thread=1 sequencia=12canal 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=705235366nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_13_5L1YPP3P_.ARC thread=1 sequencia=13canal 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=705235366nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_14_5L1YPNFQ_.ARC thread=1 sequencia=14canal 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=705235365nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_15_5L1YPPGR_.ARC thread=1 sequencia=15canal 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=705235366nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_10\O1_MF_1_16_5L1YPQ2B_.ARC thread=1 sequencia=16canal 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=705235367nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_09\O1_MF_1_17_5L00YQ54_.ARC thread=1 sequencia=17nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_09\O1_MF_1_18_5L00YQRX_.ARC thread=1 sequencia=18nome do arquivo de log arquivado=C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_12_09\O1_MF_1_19_5L00YP5F_.ARC thread=1 sequencia=19recuperacao da midia concluida, tempo decorrido: 00:00:45Finalizado recover em 10/12/09RMAN>* Abrindo o banco de dados.
RMAN> sql 'alter database open resetlogs';instrucao sql: alter database open resetlogsRMAN>* Verificando o resultado do processo.
SQL> select status from v$instance;STATUS------------OPENSQL>Após este procedimento o banco de dados está disponível para uso. Portanto é importante ressaltar 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 outros casos (maioria) 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 Aurélio Braga
OCA - Oracle Database 10g Administrator