这个错误由于在异常终止online rebuild的时候,还没来得及清理相应的临时段和标志位,系统认为online rebuild操作还在进行造成的。

根据文章 Session Was Killed During The Rebuild Of Index ORA-08104 (文档 ID 375856.1)说明
 
1.等smon清理
 
2.在10g之后用dbms_repair.online_index_clean手工清理这些信息,在Oracle 9i下,需要打Bug 3805539 后才可以使用该工具
DECLARE
RetVal BOOLEAN;
OBJECT_ID BINARY_INTEGER;
WAIT_FOR_LOCK BINARY_INTEGER;
BEGIN
OBJECT_ID := 53367;
WAIT_FOR_LOCK := NULL;
RetVal := SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN ();
COMMIT;
END;
/
 
 
3.修改字典数据

(1)先查看ind$ flags 标志,如果不正确,就减去512.

       sql>update ind$ set flags=flags-512 where obj#=<object id>;

(2)drop journal table,这个步骤可能会报资源忙,因为有大量的日志正在插入,可以反复重试一下。

       sql>drop table <owner>.sys_journal_<object_id>;

 

注意:

       这个步骤不能反,如果先删除sys_journal_<object_id>临时表,然后再修改index的flags状态,则会报出ora-600 [4610]号错误,即数据字典不一致的错误。

 
 
 

原创文章,转载请注明: 转载自ORADBCA

本文链接地址: ORA-08104: this index object ##### is being online built or rebuilt

36.3K