IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    ORA-600 kclchkblk_4 故障恢复

    惜分飞发表于 2014-11-03 12:18:05
    love 0

    朋友和我说,他们数据库由于存储控制器异常,导致数据库无法正常启动.
    数据库recover database 提示需要已经覆盖的redo

    -bash-3.2$ sqlplus / as sysdba
    
    SQL*Plus: Release 10.2.0.5.0 - Production on Mon Nov 3 17:23:35 2014
    
    Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.
    
    
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
    With the Partitioning, Real Application Clusters, Data Mining and Real Application Testing options
    
    SQL> recover database;
    ORA-00279: change 1639063379 generated at 11/01/2014 12:06:33 needed for thread
    2
    ORA-00289: suggestion :
    /export/home/oracle/product/10.2.0/db_1/dbs/arch2_29919_790965041.dbf
    ORA-00280: change 1639063379 for thread 2 is in sequence #29919
    
    
    Specify log: {=suggested | filename | AUTO | CANCEL}
    cancel
    Media recovery cancelled.
    
    SQL> select thread#,group#,sequence# from v$log;
    
       THREAD#     GROUP#  SEQUENCE#
    ---------- ---------- ----------
             1          1      30261
             1          2      30262
             1          3      30258
             1          4      30259
             1          5      30260
             2          6      29966
             2          7      29967
             2          8      29968
             2          9      29969
             2         10      29970
    
    10 rows selected.
    
    SQL> select group#,member from v$logfile;
    
        GROUP# MEMBER
    ---------- --------------------------------------------------
             1 /dev/md/oradg/rdsk/d115
             2 /dev/md/oradg/rdsk/d116
             3 /dev/md/oradg/rdsk/d117
             4 /dev/md/oradg/rdsk/d118
             5 /dev/md/oradg/rdsk/d119
             6 /dev/md/oradg/rdsk/d120
             7 /dev/md/oradg/rdsk/d121
             8 /dev/md/oradg/rdsk/d122
             9 /dev/md/oradg/rdsk/d123
            10 /dev/md/oradg/rdsk/d124
    
    10 rows selected.
    
    SQL> recover database;
    ORA-00279: change 1639063379 generated at 11/01/2014 12:06:33 needed for thread 2
    ORA-00289: suggestion : /export/home/oracle/product/10.2.0/db_1/dbs/arch2_29919_790965041.dbf
    ORA-00280: change 1639063379 for thread 2 is in sequence #29919
    
    
    Specify log: {=suggested | filename | AUTO | CANCEL}
    cancel
    Media recovery cancelled.
    

    数据库没归档,redo覆盖,无法继续恢复,使用_allow_resetlogs_corruption屏蔽前滚,继续恢复

    SQL> startup mount pfile='/tmp/pfile.txt';
    ORACLE instance started.
    
    Total System Global Area 2097152000 bytes
    Fixed Size                  2053120 bytes
    Variable Size            1090522112 bytes
    Database Buffers          855638016 bytes
    Redo Buffers              148938752 bytes
    Database mounted.
    SQL> recover database until cancel;          
    ORA-00279: change 1639063379 generated at 11/01/2014 12:58:20 needed for thread
    1
    ORA-00289: suggestion :
    /export/home/oracle/product/10.2.0/db_1/dbs/arch1_30262_790965041.dbf
    ORA-00280: change 1639063379 for thread 1 is in sequence #30262
    
    
    Specify log: {=suggested | filename | AUTO | CANCEL}
    cancel
    ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
    ORA-01194: file 1 needs more recovery to be consistent
    ORA-01110: data file 1: '/dev/md/oradg/rdsk/d105'
    
    
    ORA-01112: media recovery not started
    
    
    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    ERROR at line 1:
    ORA-01092: ORACLE instance terminated. Disconnection forced
    

    查看alert日志

    Mon Nov 03 17:37:11 CST 2014
    Completed crash recovery at
     Thread 2: logseq 1, block 3, scn 1639083385
     0 data blocks read, 0 data blocks written, 1 redo blocks read
    Picked broadcast on commit scheme to generate SCNs
    Mon Nov 03 17:37:12 CST 2014
    Thread 2 advanced to log sequence 2 (thread open)
    Thread 2 opened at log sequence 2
      Current log# 7 seq# 2 mem# 0: /dev/md/oradg/rdsk/d121
    Successful open of redo thread 2
    Mon Nov 03 17:37:12 CST 2014
    MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
    Mon Nov 03 17:37:13 CST 2014
    SMON: enabling cache recovery
    Mon Nov 03 17:37:13 CST 2014
    Errors in file /export/home/oracle/admin/iesdb/udump/iesdb2_ora_15700.trc:
    ORA-00600: internal error code, arguments: [kclchkblk_4], [0], [1640589405], [0], [1639117006], [], [], []
    Mon Nov 03 17:37:14 CST 2014
    Errors in file /export/home/oracle/admin/iesdb/udump/iesdb2_ora_15700.trc:
    ORA-00600: internal error code, arguments: [kclchkblk_4], [0], [1640589405], [0], [1639117006], [], [], []
    Mon Nov 03 17:37:14 CST 2014
    Error 600 happened during db open, shutting down database
    USER: terminating instance due to error 600
    Instance terminated by USER, pid = 15700
    ORA-1092 signalled during: alter database open...
    

    参考:In 10.1.0.2: ORA-600 [kclchkblk_4] and ORA-600 [2662] After Recovery of Database (Doc ID 275902.1),删除tempfile继续打开数据库

    SQL> alter database tempfile '/dev/md/oradg/rdsk/d109' drop;
    
    Database altered.
    
    SQL> c/109/110
      1* alter database tempfile '/dev/md/oradg/rdsk/d110' drop
    SQL> /
    
    Database altered.
    
    SQL> alter database open;
    alter database open
    *
    ERROR at line 1:
    ORA-01092: ORACLE instance terminated. Disconnection forced
    

    数据库依然报ORA-00600kclchkblk_4]错误,因此解决该问题选择使用bbed修改文件头scn来完成,具体参考类似文章:使用bbed修复损坏datafile header

    -bash-3.2$ sqlplus / as sysdba
    
    SQL*Plus: Release 10.2.0.5.0 - Production on Mon Nov 3 17:41:17 2014
    
    Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.
    
    Connected to an idle instance.
    
    SQL> startup pfile='/tmp/pfile.txt' mount; 
    ORACLE instance started.
    
    Total System Global Area 2097152000 bytes
    Fixed Size                  2053120 bytes
    Variable Size            1090522112 bytes
    Database Buffers          855638016 bytes
    Redo Buffers              148938752 bytes
    Database mounted.
    SQL> alter database open;
    
    Database altered.
    
    SQL> alter tablespace temp add tempfile '/dev/md/oradg/rdsk/d109' size 8388608000 autoextend off;
    
    Tablespace altered.
    
    SQL> alter tablespace temp add tempfile '/dev/md/oradg/rdsk/d110' size 8388608000 autoextend off;
    
    Tablespace altered.
    
    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup
    ORACLE instance started.
    
    Total System Global Area 2097152000 bytes
    Fixed Size                  2053120 bytes
    Variable Size            1090522112 bytes
    Database Buffers          855638016 bytes
    Redo Buffers              148938752 bytes
    Database mounted.
    Database opened.
    

    至此数据库恢复完成,建议逻辑方式重建数据库

    • 记录8.0.5数据库恢复过程
    • 恢复备份控制文件避免resetlogs方式打开数据库
    • _allow_resetlogs_corruption和adjust_scn解决ORA-01190
    • 当前联机日志损坏恢复
    • 使用_allow_resetlogs_corruption打开无归档日志rman备份库
    • 数据库恢复遭遇ORA-00600[3705]
    • 重建控制文件丢失undo异常恢复—ORA-01173模拟与恢复
    • 分享一次ORA-01113 ORA-01110故障处理过程


沪ICP备19023445号-2号
友情链接