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.
Opa, Blz?
Verifica só o OPEN RESETLOGS, ele só é usado em recuperações incompletas!
Abs.
Paulo.
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
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.
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
Se souber como fazer isso poste para nós.
Abs.
Oi Paulo,
Realmente eu estava falando besteira, o RESETLOGS é sempre necessário em uma recuperação de banco usando o RMAN.
[]s
Braga
Hum, deixa eu ver se eu entendi,
Para realizar o restore sem o recover é preciso fazer também o restore do controlfile?
Oi Paulo,
É importante, pois o recover é necessário quando há uma dessincronizarão entre os datafiles. Nessa dança só o SPFILE não é necessário se já existir.
[]s
Braga