CENÁRIO
Banco de dados em Modo de Arquivamento (archive log), com redo log corrompido e sem multiplexação, corrupção de archive log e corrupção da tablespace system.
ANALISANDO O AMBIENTE
Inicialmente iremos verificar no alert log em busca do real problema antes de aplicarmos a solução.
[oracle@WINT]$tail -f $ORACLE_BASE/diag/rdbms/wint/WINT/trace/alert_WINT.log
Errors in file /u01/app/oracle/diag/rdbms/wint/WINT/trace/WINT_arc1_4460.trc: ORA-00313: a abertura falhou para os membros do grupo 6 de log do thread 1 ORA-00312: thread 6 do log 1 on-line: '/u01/oradata/WINT/redo06a.log' ORA-27037: não é possível obter status do arquivo Linux-x86_64 Error: 2: No such file or directory Additional information: 3 Master archival failure: 313 ARCH: Archival stopped, error occurred. Will continue retrying ORACLE Instance WINT - Archival Error ORA-00313: a abertura falhou para os membros do grupo 6 de log do thread 1 ORA-00312: thread 6 do log 1 on-line: '/u01/oradata/WINT/redo06a.log' ORA-27037: não é possível obter status do arquivo Linux-x86_64 Error: 2: No such file or directory Additional information: 3 USER (ospid: 4456): terminating the instance due to error 313 System state dump requested by (instance=1, osid=4456), summary=[abnormal instance termination]. System State dumped to trace file /u01/app/oracle/diag/rdbms/wint/WINT/trace/WINT_diag_4425_20190731185114.trc Dumping diagnostic data in directory=[cdmp_20190731185114], requested by (instance=1, osid=4456), summary=[abnormal instance termination]. Instance terminated by USER, pid = 4456
Na saída do alert log, nosso banco de dados reclamou do “/u01/oradata/WINT/redo06a.log”, além disso observamos que a instância caiu.
O próximo passo será iniciar a instância em mount, e realizar um validate do nosso banco de dados de forma a identificar outro possível problema além do redolog.
SYS @ WINT:>startup mount; Instância ORACLE iniciada. Total System Global Area 2405122048 bytes Fixed Size 2255592 bytes Variable Size 587203864 bytes Database Buffers 1811939328 bytes Redo Buffers 3723264 bytes Banco de dados montado.
RMAN > VALIDATE DATABASE Iniciando validate em 31-07-2019 18:51:48 usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação canal alocado: ORA_DISK_1 canal ORA_DISK_1: SID=18 tipo de dispositivo=DISK canal ORA_DISK_1: iniciando validação do arquivo de dados canal ORA_DISK_1: especificando arquivo(s) de dados para validação número do arquivo=00004 nome=/u01/oradata/WINT/ts_dados01.dbf do arquivo de dados de entrada número do arquivo=00005 nome=/u01/oradata/WINT/ts_indice01.dbf do arquivo de dados de entrada número do arquivo=00001 nome=/u01/oradata/WINT/system01.dbf do arquivo de dados de entrada número do arquivo=00002 nome=/u01/oradata/WINT/sysaux01.dbf do arquivo de dados de entrada número do arquivo=00003 nome=/u01/oradata/WINT/undotbs01.dbf do arquivo de dados de entrada número do arquivo=00006 nome=/u01/oradata/WINT/users01.dbf do arquivo de dados de entrada canal ORA_DISK_1: validação concluída, tempo decorrido: 00:07:35 Lista de Arquivos de Dados ================= Status do Arquivo Marcado Danificado Blocos Vazios Blocos Examinados SCN Superior ---- ------ -------------- ------------ --------------- ---------- 1 FAILED 0 15666 89600 872996 Nome do Arquivo: /u01/oradata/WINT/system01.dbf Bloco Tipo Blocos com Falha Blocos Processados ---------- -------------- ---------------- Dados 0 57785 Índice 0 12364 Outros 100 3785
Notamos que além do redolog temos problema também na nossa tablespace system
MÃOS A OBRA
Iremos utilizar o Database Recovery Advisor
1. LIST FAILURE;
1. LIST FAILURE; RMAN> list failure; usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação Lista de Falhas do Banco de Dados ========================= ID da Falha Status da Prioridade Horário da Detecção Resumo ----------- -------- --------- ------------------- ------- 4262 CRITICAL OPEN 31-07-2019 18:47:54 O grupo redo log 6 está indisponível 4301 HIGH OPEN 31-07-2019 18:51:50 O arquivo de dados 1: '/u01/oradata/WINT/system01.dbf' contém um ou mais blocos corrompidos 4265 HIGH OPEN 31-07-2019 18:47:54 Arquivo de redo log /u01/oradata/WINT/redo06a.log não encontrado
2. ADVISE FAILURE;
2. ADVISE FAILURE; RMAN> advise failure; Lista de Falhas do Banco de Dados ========================= ID da Falha Status da Prioridade Horário da Detecção Resumo ----------- -------- --------- ------------------- ------- 4262 CRITICAL OPEN 31-07-2019 18:47:54 O grupo redo log 6 está indisponível 4301 HIGH OPEN 31-07-2019 18:51:50 O arquivo de dados 1: '/u01/oradata/WINT/system01.dbf' contém um ou mais blocos corrompidos 4265 HIGH OPEN 31-07-2019 18:47:54 Arquivo de redo log /u01/oradata/WINT/redo06a.log não encontrado analisando opções de reparo automático; isso pode levar algum tempo canal alocado: ORA_DISK_1 canal ORA_DISK_1: SID=18 tipo de dispositivo=DISK análise das opções de reparo automático concluída Not all specified failures can currently be repaired. The following failures must be repaired before advise for others can be given. ID da Falha Status da Prioridade Horário da Detecção Resumo ----------- -------- --------- ------------------- ------- 4262 CRITICAL OPEN 31-07-2019 18:47:54 O grupo redo log 6 está indisponível 4265 HIGH OPEN 31-07-2019 18:47:54 Arquivo de redo log /u01/oradata/WINT/redo06a.log não encontrado Ações Manuais Obrigatórias ======================== nenhuma ação manual disponível Ações Manuais Opcionais ======================= 1. Se o arquivo /u01/oradata/WINT/redo06a.log foi renomeado ou movido intencionalmente, restaure-o Opções de Reparo Automáticas ======================== Descrição de Reparo da Opção ------ ------------------ 1 Limpar o grupo de redo logs não arquivado 6 Estratégia: O reparo inclui recuperação completa de mídia sem perda de dados Script de reparo: /u01/app/oracle/diag/rdbms/wint/WINT/hm/reco_3011986054.hm
[oracle@WINT]$ cat /u01/app/oracle/diag/rdbms/wint/WINT/hm/reco_299512602.hm
begin /*Clear the unarchived Log Group*/ execute immediate 'ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 6'; end;
3. REPAIR FAILURE;
Estratégia: O reparo inclui recuperação completa de mídia sem perda de dados Script de reparo: /u01/app/oracle/diag/rdbms/wint/WINT/hm/reco_3011986054.hm conteúdo do script de reparo: # clear unarchived log group sql "begin sys.dbms_ir.execsqlscript(filename => ''/u01/app/oracle/diag/rdbms/wint/WINT/hm/reco_299512602.hm'' ); end;"; Deseja realmente executar o reparo acima (informe YES ou NO)? YES executando script de reparo instrução sql: begin sys.dbms_ir.execsqlscript(filename => ''/u01/app/oracle/diag/rdbms/wint/WINT/hm/reco_299512602.hm'' ); end; conclusão da falha de reparo
Conseguimos recuperar a primeira parte, porém ao tentarmos abrir o banco iremos nos deparar com erro no system.
RMAN> alter database open; RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: falha do comando alter db em 07/31/2019 19:12:05 ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-00704: bootstrap process failure ORA-00604: error occurred at recursive SQL level 1 ORA-01578: ORACLE data block corrupted (file # 1, block # 169) ORA-01110: data file 1: '/u01/oradata/WINT/system01.dbf' ID do Processo: 5812 ID da Sessão: 1 Número de série: 13 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== ORA-03114: não conectado ao ORACLE RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: falha do comando alter db em 07/31/2019 19:12:05 ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-00704: bootstrap process failure ORA-00604: error occurred at recursive SQL level 1 ORA-01578: ORACLE data block corrupted (file # 1, block # 169) ORA-01110: data file 1: '/u01/oradata/WINT/system01.dbf' ID do Processo: 5812 ID da Sessão: 1 Número de série: 13
Como a instancia foi novamente finalizada, iremos iniciar em modo mount para concluirmos o processo.
RMAN> startup mount; instância Oracle iniciada banco de dados montado
Só iremos conseguir recuperar a system a partir de um backup do banco de dados.
RMAN> list backup of datafile 1;
BS Key Type LV Size Device Type Elapsed Time Horário de Conclusão ------- ---- -- ---------- ----------- ------------ -------------------- 23 Full 1008.52M DISK 00:07:27 31-07-2019 18:25:09 Chave BP: 23 Status: AVAILABLE Compactado: NO Tag: TAG20190731T181742 Nome do Componente: /u01/app/oracle/fast_recovery_area/WINT/backupset/2019_07_31/o1_mf_nnndf_TAG20190731T181742_gn3pt6xc_.bkp Lista de Arquivos de Dados no conjunto de backup 23 File LV Type Ckp SCN Tempo de Verif. Name ---- -- ---- ---------- ------------------- ---- 1 Full 871938 31-07-2019 18:17:42 /u01/oradata/WINT/system01.dbf
Bom sinal, temos um backup que contém a tablespace corrompida.
O próximo passo será tentar recuperar o datafile informado, por meio do Restore e Recover;
RMAN> restore datafile 1; Iniciando restore em 31-07-2019 19:17:04 canal alocado: ORA_DISK_1 canal ORA_DISK_1: SID=18 tipo de dispositivo=DISK canal ORA_DISK_1: iniciando restauração de conjunto de backups de arquivo de dados canal ORA_DISK_1: especificando arquivo(s) de dados para restauração a partir do conjunto de backups canal ORA_DISK_1: restaurando o arquivo de dados 00001 em /u01/oradata/WINT/system01.dbf canal ORA_DISK_1: lendo da parte de backup /u01/app/oracle/fast_recovery_area/WINT/backupset/2019_07_31/o1_mf_nnndf_TAG20190731T181742_gn3pt6xc_.bk p canal ORA_DISK_1: handle de componente=/u01/app/oracle/fast_recovery_area/WINT/backupset/2019_07_31/o1_mf_nnndf_TAG20190731T181742_gn3pt6xc_.bkp ta g=TAG20190731T181742 canal ORA_DISK_1: restaurada a parte de backup 1 canal ORA_DISK_1: restauração concluída, tempo decorrido: 00:00:15 Finalizado restore em 31-07-2019 19:17:20 RMAN> recover datafile 1; Iniciando recover em 31-07-2019 19:17:39 utilizando o canal ORA_DISK_1 iniciar recuperação de mídia o log arquivado para thread 1 com sequência 8 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_8 _gn3qod98_.arc o log arquivado para thread 1 com sequência 9 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_9 _gn3qogq0_.arc o log arquivado para thread 1 com sequência 10 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 10_gn3qozlv_.arc o log arquivado para thread 1 com sequência 11 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 11_gn3qp2qz_.arc o log arquivado para thread 1 com sequência 12 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 12_gn3qp482_.arc o log arquivado para thread 1 com sequência 13 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 13_gn3qp5cg_.arc o log arquivado para thread 1 com sequência 14 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 14_gn3qrt9z_.arc o log arquivado para thread 1 com sequência 16 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 16_gn3rcxjk_.arc o log arquivado para thread 1 com sequência 17 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 17_gn3rcy7f_.arc o log arquivado para thread 1 com sequência 18 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 18_gn3rls8m_.arc o log arquivado para thread 1 com sequência 19 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 19_gn3rlt2z_.arc o log arquivado para thread 1 com sequência 21 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 21_gn3t02wb_.arc o log arquivado para thread 1 com sequência 22 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 22_gn3t02x2_.arc o log arquivado para thread 1 com sequência 23 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 23_gn3t02wo_.arc o log arquivado para thread 1 com sequência 24 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 24_gn3t02xg_.arc o log arquivado para thread 1 com sequência 25 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 25_gn3t033q_.arc o log arquivado para thread 1 com sequência 26 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 26_gn3t0345_.arc RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: falha do comando recover em 07/31/2019 19:17:40 RMAN-06053: não é possível desempenhar uma recuperação de mídia devido ao log não encontrado RMAN-06025: nenhum backup do log arquivado para thread 1 com sequência 15 e SCN inicial de 872605 encontrado para restauração
Não conseguimos recuperar até a última sequence disponível.
Notamos que uma sequence (sequência 15 e SCN inicial de 872605) não foi encontrada. Ou seja, precisamos aceitar a perca das informações a partir deste ponto se quisermos continuar com o nosso banco de dados.
RMAN> restore database until sequence 14; Iniciando restore em 31-07-2019 19:20:03 usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação canal alocado: ORA_DISK_1 canal ORA_DISK_1: SID=1 tipo de dispositivo=DISK canal ORA_DISK_1: iniciando restauração de conjunto de backups de arquivo de dados canal ORA_DISK_1: especificando arquivo(s) de dados para restauração a partir do conjunto de backups canal ORA_DISK_1: restaurando o arquivo de dados 00001 em /u01/oradata/WINT/system01.dbf canal ORA_DISK_1: restaurando o arquivo de dados 00002 em /u01/oradata/WINT/sysaux01.dbf canal ORA_DISK_1: restaurando o arquivo de dados 00003 em /u01/oradata/WINT/undotbs01.dbf canal ORA_DISK_1: restaurando o arquivo de dados 00004 em /u01/oradata/WINT/ts_dados01.dbf canal ORA_DISK_1: restaurando o arquivo de dados 00005 em /u01/oradata/WINT/ts_indice01.dbf canal ORA_DISK_1: restaurando o arquivo de dados 00006 em /u01/oradata/WINT/users01.dbf canal ORA_DISK_1: lendo da parte de backup /u01/app/oracle/fast_recovery_area/WINT/backupset/2019_07_31/o1_mf_nnndf_TAG20190731T181742_gn3pt6xc_.bk p canal ORA_DISK_1: handle de componente=/u01/app/oracle/fast_recovery_area/WINT/backupset/2019_07_31/o1_mf_nnndf_TAG20190731T181742_gn3pt6xc_.bkp ta g=TAG20190731T181742 canal ORA_DISK_1: restaurada a parte de backup 1 canal ORA_DISK_1: restauração concluída, tempo decorrido: 00:07:35 Finalizado restore em 31-07-2019 19:27:39 RMAN> recover database until sequence 14; Iniciando recover em 31-07-2019 19:35:13 utilizando o canal ORA_DISK_1 iniciar recuperação de mídia o log arquivado para thread 1 com sequência 8 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_8 _gn3qod98_.arc o log arquivado para thread 1 com sequência 9 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_9 _gn3qogq0_.arc o log arquivado para thread 1 com sequência 10 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 10_gn3qozlv_.arc o log arquivado para thread 1 com sequência 11 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 11_gn3qp2qz_.arc o log arquivado para thread 1 com sequência 12 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 12_gn3qp482_.arc o log arquivado para thread 1 com sequência 13 já está no disco como arquivo /u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_ 13_gn3qp5cg_.arc nome do arquivo de log arquivado=/u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_8_gn3qod98_.arc thread=1 sequência=8 nome do arquivo de log arquivado=/u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_9_gn3qogq0_.arc thread=1 sequência=9 nome do arquivo de log arquivado=/u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_10_gn3qozlv_.arc thread=1 sequência=10 nome do arquivo de log arquivado=/u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_11_gn3qp2qz_.arc thread=1 sequência=11 nome do arquivo de log arquivado=/u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_12_gn3qp482_.arc thread=1 sequência=12 nome do arquivo de log arquivado=/u01/app/oracle/fast_recovery_area/WINT/archivelog/2019_07_31/o1_mf_1_13_gn3qp5cg_.arc thread=1 sequência=13 recuperação da mídia concluída, tempo decorrido: 00:00:01 Finalizado recover em 31-07-2019 19:35:14
Conseguimos recuperar nosso banco de dados, a última etapa é abrir nosso banco em open resetlogs.
RMAN> alter database open resetlogs; banco de dados aberto