ORA-00600: internal error code, arguments: [kccpb_sanity_check_2], [16226], [16217], [0x0], [], [],

本文记录了因突然断电导致Oracle数据库出现磁盘存储故障及控制文件损坏后的恢复过程。包括使用dbv检测坏块、重建控制文件、使用备份控制文件进行数据库恢复等步骤,并解决了索引一致性问题。

oracle机器断电,导致磁盘存贮故障

 

dbv检测undo表空间有坏块

 

ORA-00600: internal error code, arguments: [kccpb_sanity_check_2], [16226], [16217], [0x0], [], [], [], []

试各个控制文件,成功mount

 

重建控制文件

alter database backup controlfile to trace;

 

 

REATE CONTROLFILE REUSE DATABASE "DUXIU" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\DUXIU\REDO01.LOG'  SIZE 50M,
  GROUP 2 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\DUXIU\REDO02.LOG'  SIZE 50M,
  GROUP 3 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\DUXIU\REDO03.LOG'  SIZE 50M
DATAFILE
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\DUXIU\SYSTEM01.DBF',
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\DUXIU\UNDOTBS01.DBF',
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\DUXIU\SYSAUX01.DBF',
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\DUXIU\USERS01.DBF',
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\DUXIU\NBDL'
CHARACTER SET ZHS16GBK;

 

 

ALTER DATABASE RECOVER  DATABASE USING BACKUP CONTROLFILE ;


Thu Aug 08 10:24:10 2013
Media Recovery Start
WARNING! Recovering data file 1 from a fuzzy file. If not the current file
it might be an online backup taken without entering the begin backup command.
WARNING! Recovering data file 2 from a fuzzy file. If not the current file
it might be an online backup taken without entering the begin backup command.
WARNING! Recovering data file 3 from a fuzzy file. If not the current file
it might be an online backup taken without entering the begin backup command.
WARNING! Recovering data file 4 from a fuzzy file. If not the current file
it might be an online backup taken without entering the begin backup command.
WARNING! Recovering data file 5 from a fuzzy file. If not the current file
it might be an online backup taken without entering the begin backup command.
 parallel recovery started with 7 processes
ORA-279 signalled during: ALTER DATABASE RECOVER  DATABASE USING BACKUP CONTROLFILE  ...
Thu Aug 08 10:25:03 2013


ALTER DATABASE RECOVER    LOGFILE 'F:\oracle\product\10.2.0\oradata\DUXIU\REDO02.LOG' 
Thu Aug 08 10:25:03 2013
Media Recovery Log F:\oracle\product\10.2.0\oradata\DUXIU\REDO02.LOG
Thu Aug 08 10:25:10 2013
Hex dump of (file 2, block 2882) in trace file f:\oracle\product\10.2.0\admin\duxiu\bdump\duxiu_p004_2784.trc
Corrupt block relative dba: 0x00800b42 (file 2, block 2882)
Fractured block found during media recovery
Data in bad block:
 type: 2 format: 2 rdba: 0x00800b42
 last change scn: 0x0000.02898e29 seq: 0x9 flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0

 

 alter database open resetlogs;

成功打开数据库。

 

但是观察alert日志有报错

 

hu Aug 08 10:48:26 2013
Errors in file f:\oracle\product\10.2.0\admin\duxiu\bdump\duxiu_j000_1896.trc:
ORA-12012: 自动执行作业 1 出错
ORA-08102: 未找到索引关键字, 对象号 239, 文件 1, 块 1674 (2)

Thu Aug 08 10:48:26 2013
Errors in file f:\oracle\product\10.2.0\admin\duxiu\bdump\duxiu_j000_1896.trc:
ORA-12012: 自动执行作业 1 出错
ORA-08102: 未找到索引关键字, 对象号 239, 文件 1, 块 1674 (2)

Thu Aug 08 10:48:26 2013
Errors in file f:\oracle\product\10.2.0\admin\duxiu\bdump\duxiu_j000_1896.trc:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-08102: 未找到索引关键字, 对象号 239, 文件 1, 块 1674 (2)
ORA-12012: 自动执行作业 1 出错
ORA-08102: 未找到索引关键字, 对象号 239, 文件 1, 块 1674 (2)

Thu Aug 08 10:50:10 2013
Errors in file f:\oracle\product\10.2.0\admin\duxiu\bdump\duxiu_j000_2660.trc:

Thu Aug 08 10:50:11 2013
Errors in file f:\oracle\product\10.2.0\admin\duxiu\bdump\duxiu_j000_2660.trc:
ORA-12012: 自动执行作业 1 出错
ORA-08102: 未找到索引关键字, 对象号 239, 文件 1, 块 1674 (2)

 

这是索引的一致性问题,找到这个对象:

SQL> select object_name from dba_objects where object_id=239;

OBJECT_NAME
--------------------------------------------------------------------------------
I_JOB_NEXT


直接DROP掉了重建:

SQL> drop index I_JOB_NEXT;

Index dropped.

SQL> create index i_job_next on job$ (next_date);

Index created.

错误消除,参考Metalink:1036858.6

 参考资料;http://www.eygle.com/archives/2010/12/fractured_controlfile_recovery.html

 

另外一个数据库也出现问题

alert日志如下

Recovery of Online Redo Log: Thread 1 Group 1 Seq 410 Reading mem 0
  Mem# 0 errs 0: F:\ORACLE\PRODUCT\10.2.0\ORADATA\CSSP\REDO01.LOG
Thu Aug 08 10:06:48 2013
Completed redo application
Thu Aug 08 10:06:49 2013
Errors in file f:\oracle\product\10.2.0\admin\cssp\bdump\cssp_p002_1512.trc:
ORA-07445: 出现异常错误: 核心转储 [IN_PAGE_ERROR] [_ktspfredo+0] [PC:0x1677A48] [] [] []

Thu Aug 08 10:06:49 2013
Errors in file f:\oracle\product\10.2.0\admin\cssp\bdump\cssp_p000_2848.trc:
ORA-07445: 出现异常错误: 核心转储 [IN_PAGE_ERROR] [_kturdb+0] [PC:0x17755D4] [] [] []

Thu Aug 08 10:06:49 2013
Errors in file f:\oracle\product\10.2.0\admin\cssp\bdump\cssp_p003_3628.trc:
ORA-07445: 出现异常错误: 核心转储 [IN_PAGE_ERROR] [_kturdb+0] [PC:0x17755D4] [] [] []

Thu Aug 08 10:06:49 2013
Errors in file f:\oracle\product\10.2.0\admin\cssp\bdump\cssp_p004_3928.trc:
ORA-07445: 出现异常错误: 核心转储 [IN_PAGE_ERROR] [_kturdh+0] [PC:0x1774A38] [] [] []

Thu Aug 08 10:06:50 2013
Errors in file f:\oracle\product\10.2.0\admin\cssp\bdump\cssp_p005_3720.trc:
ORA-07445: 出现异常错误: 核心转储 [IN_PAGE_ERROR] [_ktspfredo+0] [PC:0x1677A48] [] [] []

Thu Aug 08 10:07:32 2013
Aborting crash recovery due to slave death, attempting serial crash recovery
Thu Aug 08 10:07:32 2013

 

处理方法和上面大同小异

重建控制文件,

### ORA-00600错误代码参数为-4019的解决方案 ORA-00600Oracle数据库中的一种内部错误,通常表示数据库遇到了一个不可预期的情况。当参数为`-4019`时,该错误可能与索引块损坏或索引结构不一致相关[^1]。以下是关于ORA-00600 internal error code arguments -4019的具体分析和解决方案: #### 1. 错误原因 ORA-00600 [-4019]通常发生在对索引进行操作时,例如插入、更新或删除数据。这种错误可能是由于以下原因之一引起的: - 索引块损坏。 - 索引结构不一致。 - 数据库文件(如数据文件或重做日志文件)存在物理损坏。 - 使用了隐藏参数或不当的数据库恢复方法。 #### 2. 解决方案 以下是针对ORA-00600 [-4019]的常见解决步骤: ##### 2.1 检查告警日志和跟踪文件 首先需要检查数据库的告警日志和相关的跟踪文件,以获取更多关于错误的详细信息。这些文件通常位于`$ORACLE_BASE/diag/rdbms/<dbname>/<instance>/trace/`目录下。通过分析这些文件,可以确定具体的索引对象及其相关问题[^3]。 ##### 2.2 验证索引完整性 使用`ANALYZE INDEX`命令验证受影响的索引是否存在逻辑损坏: ```sql ANALYZE INDEX <index_name> VALIDATE STRUCTURE; ``` 如果发现索引损坏,可以通过重建索引来修复问题: ```sql ALTER INDEX <index_name> REBUILD; ``` ##### 2.3 检查数据文件一致性 如果索引重建无法解决问题,可能需要进一步检查数据文件的一致性。可以使用`DBVERIFY`工具验证数据文件的物理和逻辑结构: ```bash dbv file=<datafile_path> blocksize=<block_size> ``` ##### 2.4 恢复受影响的对象 如果上述方法无效,可以尝试从备份中恢复受影响的表空间或数据文件。在恢复之前,请确保已启用归档模式并备份了所有必要的归档日志。 ##### 2.5 联系Oracle支持 如果以上方法均无法解决问题,建议收集相关诊断信息(如告警日志、跟踪文件等),并联系Oracle官方支持以获取进一步帮助。 #### 3. 示例代码 以下是一个示例脚本,用于验证和重建索引: ```sql -- 验证索引结构 ANALYZE INDEX my_index VALIDATE STRUCTURE; -- 如果发现损坏,重建索引 ALTER INDEX my_index REBUILD; ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值