美文网首页linux redhat & Oracle
ORA-08102 index key的错误恢复

ORA-08102 index key的错误恢复

作者: 重庆思庄 | 来源:发表于2019-02-28 15:47 被阅读0次

    一 总体描述

    自己的实验虚拟数据库中的alert不停的报下面的错误.alert日志刷的闹心.

    Sun Jun 10 23:44:42 2012

    Errors in file /u01/app/oracle/product/10.2.0/db_1/admin/testb/bdump/testb_j000_4944.trc:

    ORA-00604: error occurred at recursive SQL level 1

    ORA-08102: index key not found, obj# 239, file 1, block 1674 (2)

    ORA-12012: error on auto execute of job 21

    ORA-08102: index key not found, obj# 239, file 1, block 1674 (2)

    二 操作环境

    OS

    $cat /etc/redhat-release

    Red Hat Enterprise Linux Server release 5.6 (Tikanga)

    $uname -a

    Linux stu00 2.6.18-238.el5 #1 SMP Tue Jan 4 15:24:05 EST 2011 i686 i686 i386 GNU/Linux

    DB

    SQL> set lines 150

    COL PRODUCT FORMAT A55

    COL VERSION FORMAT A15

    COL STATUS FORMAT A15

    SELECT * FROM PRODUCT_COMPONENT_VERSION;SQL> SQL> SQL> SQL>

    PRODUCT VERSION STATUS

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

    NLSRTL 10.2.0.4.0 Production

    Oracle Database 10g Enterprise Edition 10.2.0.4.0 Prod

    PL/SQL 10.2.0.4.0 Production

    TNS for Linux: 10.2.0.4.0 Production

    SQL>

    other

    三 排错思路概况

    1.报错信息ORA-12012:

    error on auto execute of job 21,ORA-08102: index key not found, obj#

    239, file 1, block 1674 (2) 是由于job 21执行的时候没有找到索引key.所以alert日志不停的刷.

    2.查询job

    3.查询索引

    4.重建索引

    四 详细步骤操作

    1.查看 /u01/app/oracle/product/10.2.0/db_1/admin/testb/bdump/testb_j000_4944.trc文件内容(汗,看不懂,这里跳过)

    2.根据排错思路查看job 21的情况:

    SQL> r

    1* select job,log_user,interval,what from dba_jobs where job=21

    JOB LOG_USER INTERVAL WHAT

    ----------

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

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

    21 SYS sysdate + 1 / (24 * 60) EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS();

    SQL>

    原来是EM的维护操作,1分钟执行一次.

    3.查询obj# 239号是什么obj:

    SQL> r

    1* select owner,object_name,object_id,object_type,status from DBA_OBJECTS where OBJECT_ID=239

    OWNER OBJECT_NAM OBJECT_ID OBJECT_TYPE STATUS

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

    SYS I_JOB_NEXT 239 INDEX VALID

    SQL>

    obj# 239真是一个索引哈,看status是valid的,这里竟然不一致.不管为什么不一致了,先解决这个alert再说. (嘿嘿,实验机有快照,有兴趣再研究的请留言)

    4.重建问题索引:(使用在线重建方式)

    SQL> ALTER INDEX I_JOB_NEXT REBUILD ONLINE;

    Index altered.

    SQL>

    5.观察alert日志是否还有错误产生.

    6.日志已无报错.

    五 个人总结

    面对报错不要心急,静心的去分析每一个报错提示.官方支持文档中有说使用索引重建方式依然解决不了alert日志报错的.唯有重建索引一种方式.这里附上使用dbms_metadata.get_ddl查找索引ddl的方式.

    SQL> select DBMS_METADATA.GET_DDL('INDEX','I_JOB_NEXT','SYS') from dual;

    DBMS_METADATA.GET_DDL('INDEX','I_JOB_NEXT','SYS')

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

    CREATE INDEX "SYS"."I_JOB_NEXT" ON "SYS"."JOB$" ("NEXT_DATE")

    PCTFREE 10 I

    SQL>

    六 资料参考引用

    ORA-08102: TRYING TO MANIPULATE A JOB IN DBA_JOBS [ID 1036858.6]

    oracle认证

    相关文章

      网友评论

        本文标题:ORA-08102 index key的错误恢复

        本文链接:https://www.haomeiwen.com/subject/tvtkuqtx.html