ORA-08104 指定的索引正在被联机重建或...

ORA-08104: this index object 索引# is being online built or rebuilt

尝试在一个表上通过create index .. online创建索引, 之后,因耗时太长,把session杀掉了
drop索引时, 得到错误信息:ORA-08104

可以通过如下脚本进行清理:

DECLARE
  isclean BOOLEAN;
BEGIN
  isclean := FALSE;


  WHILE isclean = FALSE LOOP
    isclean := dbms_repair.online_index_clean(object_id     => dbms_repair.all_index_id,
                                              wait_for_lock => dbms_repair.lock_wait);
    dbms_lock.sleep(10);
  
  END LOOP;
END;


清理之后再次创建,成功

SMON进程有清理临时段的功能,而创建索引时需要使用到临时段
http://www.askmaclean.com/archives/smon-cleanup-temporary-segment.html

根据以上说明,我们可以知道在进行online rebuild 的时候,Oracle 会修改如下信息:
(1)修改ind$中索引的flags,将该flags+512. 关于这个flags的含义,在下面的实验中进行说明。
(2)在该用户下创建一个journal table 来保存在rebuild期间的增量数据。 该表明名称: sys_journal_<object_id>.
 
       如果异常结束online rebuild操作,那么oracle就没及时清理journal table和ind$的flags标志位,系统会认为online rebuild还在操作。

http://www.ningoo.net/html/2007/dba_memo_online_rebuild_index_encounter_ora-08104.html

ORA-08104: this index object 67420 is being online built or rebuilt
这是由于在异常终止online rebuild操作的时候,oracle没来得及清理相应的临时段和标志位,系统认为online rebuild操作还在进行造成的。在Oracle10g之前,对于这种情况没有太好的办法,只有等SMON进程来进行清理了。网上有说上重启可以解决,有说直接update系统表ind$的,对于不能停机的产品库来说,这些都是不可取的方案。重启不现实,修改系统表更是DBA的大忌。Oracle10g则可以使用dbms_repair.online_index_clean手工清理(metalink的说法,9i打了Bug 3805539的patch的话也能用该过程了)。所以,对于大索引的online rebuild,不要轻易中止。否则可能要等上相当一段时间SMON才能完成清理工作,清理完后,可以在alert.log中看到如下记录:


参考: http://agstamy.blogspot.jp/2014/02/ora-08104-after-session-has-been-killed.html
         http://blog.csdn.net/tianlesoftware/article/details/6538928
       http://www.askmaclean.com/archives/smon-cleanup-temporary-segment.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8520577/viewspace-2123338/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8520577/viewspace-2123338/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值