风哥教程

培训 . 交流 . 分享
Make progress together!

恢复误删Oracle数据库所有文件后出现ORA-08102: index key not found......

[复制链接]
内容发布:风哥| 发布时间:2013-12-24 11:35:02
问题原因:
一个数据库,由于误删了所有的文件,包括控制文件、在线重做日志文件、数据文件、归档日志文件等等,通过操作系统层面的方法恢复了控制文件、数据文件,但是日志文件是无法恢复的,这个时候只能通过重建控制文件、_allow_resetlogs_corruption_corrupted_rollback_segments等一系列动作强制打开数据库,打开数据库后,alert日志出现以下报错:
Errors in file /oracle/admin/source/bdump/source_j000_17181.trc:
ORA-12012: error on auto execute of job 64
ORA-08102: index key not found, obj# 239, file 1, block 846 (2)
Sat Aug 18 00:56:01 2012
Errors in file /oracle/admin/source/bdump/source_j000_17181.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-08102: index key not found, obj# 239, file 1, block 846 (2)
ORA-12012: error on auto execute of job 64
ORA-08102: index key not found, obj# 239, file 1, block 846 (2)
查看/oracle/admin/source/bdump/source_j000_17181.trc,内容如下:
ksedmp: internal or fatal error
Current SQL statement for this session:
update sys.job$ set failures=0, this_date=null, flag=:1, last_date=:2,  next_date = greatest(:3, sysdate),  total=total+(s
ysdate-nvl(this_date,sysdate)) where job=:4
----- Call Stack Trace -----
ora-08102这种错误说明索引或表出现了数据不一致的,索引上记录的键值和表里的数据不一致,引起访问失败,一般重建下索引就可以解决。
解决过程
SQL> col OBJECT_NAME format a20
SQL> SELECT owner, object_name, object_type
  2            FROM Dba_Objects
  3           WHERE object_id IN (239);
OWNER                          OBJECT_NAME          OBJECT_TYPE
------------------------------ -------------------- -------------------
SYS                            I_JOB_NEXT           INDEX
可以查出object_name的名字,发现是表SYS的索引,然后重建索引
这个时候需要使用rebuild online,因为他会重新读表来创建索引,而rebuild可能会读取原先的索引段而不会去读表。
SQL> alter index I_JOB_NEXT rebuild online;
Index altered.
通过以上的方法得到解决。
如果以上的方法还不能解决,就删除重新创建
SQL> select index_name,column_name from all_ind_columns where          index_name='I_JOB_NEXT';
INDEX_NAME                                        COLUMN_NAME
---------------------------------------------------
I_JOB_NEXT   NEXT_DATE
SQL> drop index I_JOB_NEXT;
SQL> create index I_JOB_NEXT on job$(next_date);
测试后正常。






上一篇:oracle数据库意外宕机启动后报错:ORA-25153: Temporary Tablespace is Empty
下一篇:【oracle数据库】通过bbed修改表的数据内容
专业提供Oracle/MySQL/NoSQL/Linux数据库培训与技术支持服务,QQ号:113257174
关注风哥教程微信公众号itpux_com  ,了解本站最新技术资料的分享.

欢迎加QQ群,提供超多高质量Oracle/Unix/Linux技术文档与视频教程的下载。

Oracle/MySQL/Linux群4-5:189070296  150201289  
Oracle/MySQL/Linux群6-8:244609803   522261684   522651731
备注:请勿重复加群,另请注明 from itpux
回复

使用道具 举报

1框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门文章教程

  • 风哥Oracle数据库巡检工具V1.0(附2.6网页
  • Oracle 12cR2 九大新功能全面曝光_详解云数
  • 实战PHP与MySQL权威指南PDF电子书下载
  • 大数据技术与应用入门培训教程(电子版下载
  • Oracle OCP认证考试IZ0-053题库共712题数据
  • MySQL5权威指南(第3版)PDF电子版下载
快速回复 返回顶部 返回列表