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
------------
MOUNTED
SQL>
* Restaurando o banco de dados completo.
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=TAG20091207
T160253
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>
* Recuperando os 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>
* Abrindo o banco de dados.
RMAN> sql 'alter database open resetlogs';
instrucao sql: alter database open resetlogs
RMAN>
* Verificando o resultado do processo.
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL>
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