Recovery Database – Perca da Tablespace System, Corrupção redo log + um archivelog

19 ago

Recovery Database – Perca da Tablespace System, Corrupção redo log + um archivelog

Design sem nome (2)

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