OCA/OCP Oracle 数据库12c考试指南读书笔记:第25章:Diagnosing Failures

Oracle如何报告问题,分类问题,以及诊断问题的工具。

自动诊断流程

automatic diagnostic repository,以下简称ADR。ADR是自动的,总是开启的,repository表示其存于固定位置。ADR中数据可打包发送到Oracle Support。

理解ADR

ADR基于文件,针对所有产品。例如数据库和ASM都有自己的ADR home目录,称为ADR base。RAC实例在ADR base下有子目录。
如果DIAGNOSTIC_DEST已设定,ADR base即为此值。如未设定,则ADR base设成ORACLE_BASE环境变量。

SQL> show parameter diag

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest                      string      /opt/oracle
SQL> !echo $ORACLE_BASE
/opt/oracle

详细目录可查询:

SQL> select inst_id, name, value from v$diag_info;

   INST_ID NAME                     VALUE
---------- ------------------------ ----------------------------------------------------------------------
         1 Diag Enabled             TRUE
         1 ADR Base                 /opt/oracle
         1 ADR Home                 /opt/oracle/diag/rdbms/orclcdb/ORCLCDB
         1 Diag Trace               /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace
         1 Diag Alert               /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/alert
         1 Diag Incident            /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/incident
         1 Diag Cdump               /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/cdump
         1 Health Monitor           /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/hm
         1 Default Trace File       /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/ORCLCDB_ora_13259.trc
         1 Active Problem Count     0
         1 Active Incident Count    0
         1 ORACLE_HOME              /opt/oracle/product/19c/dbhome_1

12 rows selected.

注意inst_id,可区分RAC实例。另外,alert是XML格式,trace是平文件格式。
trace和dump的区别为,前者是连续的,后者是某一时间点的。

使用ADRCI工具

CI表示command interpreter。
ADRCI是用来查询ADR的,由于ADR基于文件系统,因此数据库宕机也可以使用,也不需要登录。

$ adrci

ADRCI: Release 19.0.0.0.0 - Production on Thu Dec 12 20:53:30 2019

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/opt/oracle"
adrci> help

 HELP [topic]
   Available Topics:
        CREATE REPORT
        ECHO
        ESTIMATE
        EXIT
        HELP
        HOST
        IPS
        PURGE
        RUN
        SELECT
        SET BASE
        SET BROWSER
        SET CONTROL
        SET ECHO
        SET EDITOR
        SET HOMES | HOME | HOMEPATH
        SET TERMOUT
        SHOW ALERT
        SHOW BASE
        SHOW CONTROL
        SHOW HM_RUN
        SHOW HOMES | HOME | HOMEPATH
        SHOW INCDIR
        SHOW INCIDENT
        SHOW LOG
        SHOW PROBLEM
        SHOW REPORT
        SHOW TRACEFILE
        SPOOL

 There are other commands intended to be used directly by Oracle, type
 "HELP EXTENDED" to see the list

adrci> show alert

Choose the home from which to view the alert log:

1: diag/rdbms/orclcdb/ORCLCDB
2: diag/rdbms/rcat/rcat
3: diag/tnslsnr/oracle-19c-vagrant/listener
Q: to quit

Please select option: 1
Output the results to file: /tmp/alert_14344_1404_ORCLCDB_1.ado

Please select option: Q
adrci>

OEM也可以实现同样的功能。

理解Alerts, Problems和 Incidents

problem是数据库的严重错误。incident是problem的单次出现。也就是说,problem有多个incident。
problem有problem key,incident有ID,存于ADR_HOME/incident/incdir_n。例如/opt/oracle/diag/rdbms/orclcdb/ORCLCDB/incident
incident发生时,会存入alert log,发送alert到EM,邮件alert到管理员,使用ID标记incident。在ADR_HOME下创建incident目录。

使用Health Monitor

Health Monitor可检测数据库健康状况。包括数据文件,内存,事务一致性,元数据,进程使用情况。
可使用EM或DBMS_HM包运行。一些检查要求数据库必须open,一些检查数据库可处于nomount状态。
可做的检查和要求可见下表:

SQL> select id, name, offline_capable, internal_check from v$hm_check;

        ID NAME                                                             O I
---------- ---------------------------------------------------------------- - -
         1 HM Test Check                                                    Y Y
         2 DB Structure Integrity Check                                     Y N
        25 CF Block Integrity Check                                         Y N
         3 Data Block Integrity Check                                       Y N
         4 Redo Integrity Check                                             Y N
         5 Logical Block Check                                              N Y
        10 Transaction Integrity Check                                      N N
        11 Undo Segment Integrity Check                                     N N
        12 No Mount CF Check                                                Y Y
        31 Mount CF Check                                                   Y Y
        13 CF Member Check                                                  Y Y
        14 All Datafiles Check                                              Y Y
        15 Single Datafile Check                                            Y Y
        30 Tablespace Check Check                                           Y Y
        16 Log Group Check                                                  Y Y
        17 Log Group Member Check                                           Y Y
        18 Archived Log Check                                               Y Y
        19 Redo Revalidation Check                                          Y Y
        20 IO Revalidation Check                                            Y Y
        21 Block IO Revalidation Check                                      Y Y
        34 Failover Check                                                   Y Y
        22 Txn Revalidation Check                                           N Y
        23 Failure Simulation Check                                         Y Y
        24 Dictionary Integrity Check                                       N N
        26 ASM Mount Check                                                  Y Y
        27 ASM Allocation Check                                             Y N
        28 ASM Disk Visibility Check                                        Y Y
        29 ASM File Busy Check                                              Y Y
        32 ASM Toomanyoff Check                                             Y Y
        33 ASM Insufficient Disks Check                                     Y Y
        35 ASM Insufficient Mem Check                                       Y Y
        36 ASM DGFDM Check No DG Name                                       Y Y
        37 ASM DG Force Dismount Check                                      Y Y
        38 ASM Sync IO Fail Check                                           Y Y

34 rows selected.

ADRCI的show hm_run可显示健康检查结果。

adrci> show hm_run;

ADR Home = /opt/oracle/diag/rdbms/orclcdb/ORCLCDB:
*************************************************************************

**********************************************************
HM RUN RECORD 1
**********************************************************
   RUN_ID                        1
   RUN_NAME                      HM_RUN_1
   CHECK_NAME                    DB Structure Integrity Check
   NAME_ID                       2
   MODE                          2
   START_TIME                    2019-11-28 20:46:25.394390 +08:00
   RESUME_TIME                   <NULL>
   END_TIME                      2019-11-28 20:46:25.559960 +08:00
   MODIFIED_TIME                 2019-11-28 20:46:25.559960 +08:00
   TIMEOUT                       0
   FLAGS                         0
   STATUS                        5
   SRC_INCIDENT_ID               0
   NUM_INCIDENTS                 0
   ERR_NUMBER                    0
   REPORT_FILE                   <NULL>
   CON_UID                       1
   CONTAINER_ID                  1
   CONTAINER_NAME                CDB$ROOT

**********************************************************
HM RUN RECORD 2
**********************************************************
   RUN_ID                        21
   RUN_NAME                      HM_RUN_21
   CHECK_NAME                    DB Structure Integrity Check
   NAME_ID                       2
   MODE                          2
   START_TIME                    2019-11-29 21:05:34.960325 +08:00
   RESUME_TIME                   <NULL>
   END_TIME                      2019-11-29 21:05:35.241737 +08:00
   MODIFIED_TIME                 2019-11-29 21:05:35.241737 +08:00
   TIMEOUT                       0
   FLAGS                         0
   STATUS                        5
   SRC_INCIDENT_ID               0
   NUM_INCIDENTS                 0
   ERR_NUMBER                    0
   REPORT_FILE                   <NULL>
   CON_UID                       1
   CONTAINER_ID                  1
   CONTAINER_NAME                CDB$ROOT
...

adrci> show hm_run -p run_id=1281

ADR Home = /opt/oracle/diag/rdbms/orclcdb/ORCLCDB:
*************************************************************************

**********************************************************
HM RUN RECORD 1
**********************************************************
   RUN_ID                        1281
   RUN_NAME                      HM_RUN_1281
   CHECK_NAME                    DB Structure Integrity Check
   NAME_ID                       2
   MODE                          2
   START_TIME                    2019-12-08 18:48:58.806901 +08:00
   RESUME_TIME                   <NULL>
   END_TIME                      2019-12-08 18:48:59.075689 +08:00
   MODIFIED_TIME                 2019-12-08 18:48:59.075689 +08:00
   TIMEOUT                       0
   FLAGS                         0
   STATUS                        5
   SRC_INCIDENT_ID               0
   NUM_INCIDENTS                 0
   ERR_NUMBER                    0
   REPORT_FILE                   <NULL>
   CON_UID                       1
   CONTAINER_ID                  1
   CONTAINER_NAME                CDB$ROOT
1 row fetched
adrci> create report hm_run HM_RUN_1281
adrci> show report hm_run HM_RUN_1281;

手工执行健康检查:

SQL> exec dbms_hm.run_check(check_name=>'Dictionary Integrity Check',  run_name=>'my_dd_check');

PL/SQL procedure successfully completed.

SQL> set long 1000
SQL> select dbms_hm.get_run_report('MY_DD_CHECK') from dual;

DBMS_HM.GET_RUN_REPORT('MY_DD_CHECK')
--------------------------------------------------------------------------------
Basic Run Information
 Run Name                     : my_dd_check
 Run Id                       : 2041
 Check Name                   : Dictionary Integrity Check
 Mode                         : MANUAL
 Status                       : COMPLETED
 Start Time                   : 2019-12-12 21:42:49.248667 +08:00
 End Time                     : 2019-12-12 21:42:50.380532 +08:00
 Error Encountered            : 0
 Source Incident Id           : 0
 Number of Incidents Created  : 0

DBMS_HM.GET_RUN_REPORT('MY_DD_CHECK')
--------------------------------------------------------------------------------

Input Parameters for the Run
 TABLE_NAME=ALL_CORE_TABLES
 CHECK_MASK=ALL

Run Findings And Recommendations
 Finding
 Finding Name  : Dictionary Inconsistency
 Finding ID    : 2042

处理块损坏

当数据库从数据文件中读取或写到数据文件时,会做以下的检查:

  • 检查块版本与数据库版本一致
  • cache中的数据块地址与block buffer中的地址一致
  • 数据库校验和正确

块损坏

块损坏时会报ORA-01578错。大部分的块损坏都是由硬件引起的。
块检查可参数DB_BLOCK_CHECKSUM 和 DB_BLOCK_CHECKING控制。前者检查磁盘上的错误,后者检查内存中的错误。后者性能开销大。

SQL> show parameter block_check

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_checking                    string      FALSE
db_block_checksum                    string      TYPICAL

DB_BLOCK_CHECKSUM取值为OFF,TYPICAL和FULL。
TYPICAL在读取和写入数据文件时检查。FULL是每次发生改变时都检查。
B_BLOCK_CHECKING控制如何检查数据库逻辑结构。默认不检查。
不过,无论此两参数如何设置,SYSTEM表空间都是要检查的。

使用Block Media Recovery

如果发现少量块损坏,可考虑通过RMAN的Block Media Recovery恢复,而无需整个数据文件恢复。
除DB_BLOCK_CHECKING做的检查,RMAN BACKUP 和BACKUP VALIDATE也会将块损坏信息写到V$DATABASE_BLOCK_CORRUPTION视图中

Block Media Recovery的好处

Block Media Recovery利用最近的备份,归档和online redo来恢复,产生的I/O少,恢复速度快。恢复时,数据文件在线,只有少量表或索引不可用。
运行命令RMAN RECOVER . . . BLOCK时,RMAN会使用flashback log(如开启),level 0 或全备中的损坏数据库的正常拷贝进行restore,并结合redo log进行recovery。
V$DATABASE_BLOCK_CORRUPTION可查询物理或逻辑损坏的数据库信息。RMAN backup,ANALYZE,dbv(OS命令),和遇到坏块的查询都会往此视图添加信息。

使用 Block Media Recovery的前提

必须开启归档。
必须有全备,level 0 增备或flashback log之一,flashback恢复速度最快。

使用RMAN RECOVER . . . BLOCK命令

块损坏报错来源于:

  • RMAN LIST FAILURE, VALIDATE, 或BACKUP . . . VALIDATE 命令
  • V$DATABASE_BLOCK_CORRUPTION视图
  • SQL*Plus等客户端应用的报错
  • alert log或trace文件
  • ANALYZE TABLE 或 ANALYZE INDEX命令
  • DBVERIFY命令 - dbv
    恢复时,RMAN必须知道数据文件号和损坏块号。例如:
RMAN> recover datafile 6 block 123

如果坏块记录在V$DATABASE_BLOCK_CORRUPTION中,可以一次性恢复:

RMAN> recover corruption list;

使用数据恢复建议器(Data Recovery Advisor)

可检测出坏块和一些影响数据库正常启动的错误。

定位错误

可以通过EM和命令行调用,可以在EM或RMAN中查看结果。
RMAN中的命令包括:

  • LIST FAILURE:显示DRA记录的错误
  • ADVISE FAILURE:显示修复建议
  • REPAIR FAILURE:使用建议修复错误
  • CHANGE FAILURE:关闭错误

实施恢复

RMAN ADVISE FAILURE显示修复建议,REPAIR FAILURE实施修复建议。

Data Recovery Advisor 视图

  • V$IR_FAILURE
  • V$IR_MANUAL_CHECKLIST
  • V$IR_REPAIR
  • V$IR_REPAIR_SET

示例,首先确认有全备:

RMAN> list backup of tablespace sysaux;

starting full resync of recovery catalog
full resync complete

List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
138     Full    68.00M     DISK        00:00:45     03-DEC-19
        BP Key: 162   Status: AVAILABLE  Compressed: YES  Tag: TAG20191203T211643
        Piece Name: /u02/fra/backups/ORCLCDB_20191203_0fuihbts
  List of Datafiles in backup set 138
  File LV Type Ckp SCN    Ckp Time  Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- --------- ----------- ------ ----
  3       Full 3639262    03-DEC-19              NO    /opt/oracle/oradata/ORCLCDB/sysaux01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
441     Full    67.30M     DISK        00:00:23     07-DEC-19
        BP Key: 451   Status: AVAILABLE  Compressed: YES  Tag: TAG20191207T110516
        Piece Name: /u02/fra/backups/ORCLCDB_20191207_17uiqpje
  List of Datafiles in backup set 441
  File LV Type Ckp SCN    Ckp Time  Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- --------- ----------- ------ ----
  3       Full 3871655    07-DEC-19              NO    /opt/oracle/oradata/ORCLCDB/sysaux01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
602     Incr 0  67.30M     DISK        00:00:22     07-DEC-19
        BP Key: 612   Status: AVAILABLE  Compressed: YES  Tag: TAG20191207T112347
        Piece Name: /u02/fra/backups/ORCLCDB_20191207_1nuiqqm4
  List of Datafiles in backup set 602
  File LV Type Ckp SCN    Ckp Time  Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- --------- ----------- ------ ----
  3    0  Incr 3873478    07-DEC-19              NO    /opt/oracle/oradata/ORCLCDB/sysaux01.dbf

如无,运行以下命令:

backup as backupset tablespace sysaux;

关闭数据库:

shutdown immediate;

删除文件:

rm /opt/oracle/oradata/ORCLCDB/sysaux01.dbf

启动数据库,会报错:

SQL> startup
ORACLE instance started.

Total System Global Area 1207955552 bytes
Fixed Size                  9134176 bytes
Variable Size             452984832 bytes
Database Buffers          738197504 bytes
Redo Buffers                7639040 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/opt/oracle/oradata/ORCLCDB/sysaux01.dbf'

在RMAN中修复:

$ rman target / catalog rcat_owner/Welcome1@rcat

Recovery Manager: Release 19.0.0.0.0 - Production on Thu Dec 12 22:42:28 2019
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCLCDB (DBID=2795391422, not open)
connected to recovery catalog database

RMAN> list failure;

starting full resync of recovery catalog
full resync complete
Database Role: PRIMARY

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2042       CRITICAL OPEN      12-DEC-19     SQL dictionary health check: seg$.type# 31 on object SEG$ failed
1282       HIGH     OPEN      12-DEC-19     One or more non-system datafiles are missing
2062       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo01.log is missing
2005       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo03.log is missing
2002       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo02_2.log is missing

RMAN> advise failure;

Database Role: PRIMARY

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2042       CRITICAL OPEN      12-DEC-19     SQL dictionary health check: seg$.type# 31 on object SEG$ failed
1282       HIGH     OPEN      12-DEC-19     One or more non-system datafiles are missing
2062       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo01.log is missing
2005       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo03.log is missing
2002       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo02_2.log is missing

analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=259 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=25 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=260 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=26 device type=DISK
analyzing automatic repair options complete

Mandatory Manual Actions
========================
1. If file /opt/oracle/oradata/ORCLCDB/redo01.log was unintentionally renamed or moved, restore it
2. Contact Oracle Support Services if the preceding recommendations cannot be used, or if they do not fix the failures selected for repair
3. Please contact Oracle Support Services to resolve failure 2042: SQL dictionary health check: seg$.type# 31 on object SEG$ failed

Optional Manual Actions
=======================
1. If file /opt/oracle/oradata/ORCLCDB/sysaux01.dbf was unintentionally renamed or moved, restore it
2. If file /opt/oracle/oradata/ORCLCDB/redo03.log was unintentionally renamed or moved, restore it
3. If file /opt/oracle/oradata/ORCLCDB/redo02_2.log was unintentionally renamed or moved, restore it

Automated Repair Options
========================
Option Repair Description
------ ------------------
1      Restore and recover datafile 3; Drop and re-create redo log group member /opt/oracle/oradata/ORCLCDB/redo03.log; Drop and re-create redo log group member /opt/oracle/oradata/ORCLCDB/redo02_2.log
  Strategy: The repair includes complete media recovery with no data loss
  Repair script: /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/hm/reco_1309190323.hm

RMAN> repair failure;

Strategy: The repair includes complete media recovery with no data loss
Repair script: /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/hm/reco_1309190323.hm

contents of repair script:
   # restore and recover datafile
   restore ( datafile 3 );
   recover datafile 3;
   sql 'alter database datafile 3 online';
   # drop/recreate redo log group member
   sql "begin sys.dbms_ir.execsqlscript(filename => ''/opt/oracle/diag/rdbms/orclcdb/ORCLCDB/hm/reco_1531385993.hm'' ); end;";
   # drop/recreate redo log group member
   sql "begin sys.dbms_ir.execsqlscript(filename => ''/opt/oracle/diag/rdbms/orclcdb/ORCLCDB/hm/reco_2846098454.hm'' ); end;";

Do you really want to execute the above repair (enter YES or NO)? YES
executing repair script

Starting restore at 12-DEC-19
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4

channel ORA_DISK_1: restoring datafile 00003
input datafile copy RECID=5 STAMP=1026594939 file name=/u02/fra/backups/ORCLCDB_20191209_22uj161h
destination for restore of datafile 00003: /opt/oracle/oradata/ORCLCDB/sysaux01.dbf
channel ORA_DISK_1: copied datafile copy of datafile 00003, elapsed time: 00:00:15
output file name=/opt/oracle/oradata/ORCLCDB/sysaux01.dbf RECID=0 STAMP=0
Finished restore at 12-DEC-19

Starting recover at 12-DEC-19
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4

starting media recovery

archived log for thread 1 with sequence 32 is already on disk as file /u02/fra/ORCLCDB/archivelog/2019_12_10/o1_mf_1_32_gyzdmsnf_.arc
archived log for thread 1 with sequence 33 is already on disk as file /u02/fra/ORCLCDB/archivelog/2019_12_10/o1_mf_1_33_gyzdmsq7_.arc
archived log for thread 1 with sequence 1 is already on disk as file /u02/fra/ORCLCDB/archivelog/2019_12_11/o1_mf_1_1_gz1vj598_.arc
archived log for thread 1 with sequence 2 is already on disk as file /u02/fra/ORCLCDB/archivelog/2019_12_12/o1_mf_1_2_gz43g4bn_.arc
archived log for thread 1 with sequence 3 is already on disk as file /u02/fra/ORCLCDB/archivelog/2019_12_12/o1_mf_1_3_gz44nv7h_.arc
archived log file name=/u02/fra/ORCLCDB/archivelog/2019_12_10/o1_mf_1_32_gyzdmsnf_.arc thread=1 sequence=32
archived log file name=/u02/fra/ORCLCDB/archivelog/2019_12_10/o1_mf_1_33_gyzdmsq7_.arc thread=1 sequence=33
archived log file name=/u02/fra/ORCLCDB/archivelog/2019_12_11/o1_mf_1_1_gz1vj598_.arc thread=1 sequence=1
media recovery complete, elapsed time: 00:00:01
Finished recover at 12-DEC-19

sql statement: alter database datafile 3 online

sql statement: begin sys.dbms_ir.execsqlscript(filename => ''/opt/oracle/diag/rdbms/orclcdb/ORCLCDB/hm/reco_1531385993.hm'' ); end;
starting full resync of recovery catalog
full resync complete

sql statement: begin sys.dbms_ir.execsqlscript(filename => ''/opt/oracle/diag/rdbms/orclcdb/ORCLCDB/hm/reco_2846098454.hm'' ); end;
starting full resync of recovery catalog
full resync complete
repair failure complete

RMAN> list failure;

Database Role: PRIMARY

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2042       CRITICAL OPEN      12-DEC-19     SQL dictionary health check: seg$.type# 31 on object SEG$ failed
2062       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo01.log is missing

此时数据库可以启动。

还遗留一些不能自动修复的问题:

RMAN> list failure;

Database Role: PRIMARY

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2042       CRITICAL OPEN      12-DEC-19     SQL dictionary health check: seg$.type# 31 on object SEG$ failed
2062       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo01.log is missing

RMAN> advise failure;

Database Role: PRIMARY

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2042       CRITICAL OPEN      12-DEC-19     SQL dictionary health check: seg$.type# 31 on object SEG$ failed
2062       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo01.log is missing

analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=274 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=267 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=273 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=41 device type=DISK
analyzing automatic repair options complete

Mandatory Manual Actions
========================
1. If file /opt/oracle/oradata/ORCLCDB/redo01.log was unintentionally renamed or moved, restore it
2. Contact Oracle Support Services if the preceding recommendations cannot be used, or if they do not fix the failures selected for repair
3. Please contact Oracle Support Services to resolve failure 2042: SQL dictionary health check: seg$.type# 31 on object SEG$ failed

Optional Manual Actions
=======================
no manual actions available

Automated Repair Options
========================
no automatic repair options available

如下修复:

SQL> select group#, sequence#, archived, status from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          4 NO  CURRENT
         2          2 YES INACTIVE
         3          3 YES INACTIVE
SQL> select group#, status, member from v$logfile;

    GROUP# STATUS  MEMBER
---------- ------- ----------------------------------------------------------------
         3 INVALID /opt/oracle/oradata/ORCLCDB/redo03.log
         2         /opt/oracle/oradata/ORCLCDB/redo02.log
         1         /opt/oracle/oradata/ORCLCDB/redo01.log
         1         /opt/oracle/oradata/ORCLCDB/redo01_2.log
         2 INVALID /opt/oracle/oradata/ORCLCDB/redo02_2.log
         3         /opt/oracle/oradata/ORCLCDB/redo03_2.log

6 rows selected.

3和2都是INACTIVE。并且已经归档。处理就简单了:

SQL> alter database clear logfile group 2;

Database altered.

SQL> alter database clear logfile group 3;

Database altered.

SQL> select group#, status, member from v$logfile;

    GROUP# STATUS  MEMBER
---------- ------- ----------------------------------------------------------------
         3         /opt/oracle/oradata/ORCLCDB/redo03.log
         2         /opt/oracle/oradata/ORCLCDB/redo02.log
         1         /opt/oracle/oradata/ORCLCDB/redo01.log
         1         /opt/oracle/oradata/ORCLCDB/redo01_2.log
         2         /opt/oracle/oradata/ORCLCDB/redo02_2.log
         3         /opt/oracle/oradata/ORCLCDB/redo03_2.log

6 rows selected.

不过错误还在:

RMAN> list failure;

Database Role: PRIMARY

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2042       CRITICAL OPEN      12-DEC-19     SQL dictionary health check: seg$.type# 31 on object SEG$ failed
2062       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo01.log is missing

关闭错误:

RMAN> change failure 2062 closed;

Database Role: PRIMARY

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2062       HIGH     OPEN      12-DEC-19     Online log member /opt/oracle/oradata/ORCLCDB/redo01.log is missing

Do you really want to change the above failures (enter YES or NO)? YES
closed 1 failures

RMAN> list failure;

Database Role: PRIMARY

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2042       CRITICAL OPEN      12-DEC-19     SQL dictionary health check: seg$.type# 31 on object SEG$ failed

发布了342 篇原创文章 · 获赞 42 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/stevensxiao/article/details/103515601