当前位置:  数据库>oracle

online rebulid index 异常终止遇到ORA-08104

    来源: 互联网  发布时间:2017-05-15

    本文导语: create index idx_p_merchant_detail_id on D_ORDER_DETAIL (merchant_detail_id) Online; 创建好长时间,没有反映;然后取消,结果删除索引的时候,报如下的错误: 通过 ONLINE 参数创建索引(或者重建索引), 如果进程被突然终止,或者是手工 CTRL+C 取...

create index idx_p_merchant_detail_id on D_ORDER_DETAIL (merchant_detail_id) Online;

创建好长时间,没有反映;然后取消,结果删除索引的时候,报如下的错误:

通过 ONLINE 参数创建索引(或者重建索引), 如果进程被突然终止,或者是手工 CTRL+C 取消该操作,在非常个别的时候,麻烦来了。重新创建索引,会告诉你该索引已经存在,drop index ,会告诉你该索引被锁,或者是 ORA-08104(this index object xxxxx is being online built or rebuilt) 错误。

该过程失败之前创建的一些临时对象由 SMON 负责清除,糟糕的是, SMON 可不是那么听话,马上出来清除,这个清除时间可能会很长,据说在 9i 上观察是 2 个小时才清除掉。

 如何解决呢?
在Oracle10g之前,对于这种情况没有太好的办法,只有等SMON进程来进行清理了。网上有说上重启库可以解决,有说直接update系统表ind$的,对于不能停机的产品库来说,这些都是不可取的方案。重启不现实,修改系统表更是DBA的大忌。

 

最好是等系统自动清除,如果因此给你带来的影响让你不得不手动尽早清除的话,那就看你的运气了
如果是Oracle10g,则可以使用dbms_repair.online_index_clean手工清理(metalink的说法,9i打了Bug 3805539的patch的话也能用该过程了)。

如果是一个比较繁忙的 OLTP 系统, 并且是要维护单列索引,那么风险真的是很大的。在 SMON 清除这些临时对象之前,没有办法在该列上建立新的索引。服务器能撑住么?

异常终止的情况下,可以发现ind$关于该索引的状态还是online rebuild的:

 SQL> select obj#,flags from ind$ where obj#=67420;

OBJ# FLAGS
---------- ----------
67420 514

Flags字段的说明可以在ind$的sql.bsq脚本中找到:

/* mutable flags: anything permanent should go into property */
/* unusable (dls) : 0x01 */
/* analyzed : 0x02 */
/* no logging : 0x04 */
/* index is currently being built : 0x08 */
/* index creation was incomplete : 0x10 */
/* key compression enabled : 0x20 */
/* user-specified stats : 0x40 */
/* secondary index on IOT : 0x80 */
/* index is being online built : 0x100 */
/* index is being online rebuilt : 0x200 */
/* index is disabled : 0x400 */
/* global stats : 0x800 */
/* fake index(internal) : 0x1000 */
/* index on UROWID column(s) : 0x2000 */
/* index with large key : 0x4000 */
/* move partitioned rows in base table : 0x8000 */
/* index usage monitoring enabled : 0x10000 */

514=0×202,表示该索引状态为index is being online rebuilt : 0×200 + analyzed : 0×02

在SMON完成清理动作后,再次查询索引状态已经恢复正常:

SQL> select obj#,flags from ind$ where obj#=67420;

OBJ# FLAGS
---------- ----------
67420 2

清理完后,可以在alert.log中看到如下记录:

User:,time:20071209 03:12:09,program:oracle@db1
(SMON),IP:,object:SYS_JOURNAL_67420,DDL: drop table "TAOBAO"."SYS_JOURNAL_67420"


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 三维空间战斗游戏 Vendetta Online
  • Java Online Gaming Real-time Engine
  • JSON Editor Online
  • The Advanced Online Translator
  • online-markdown-editor
  • 急, 关于怎样得磁盘序列号?? Online!!
  • 在unix下面,执行tbinit进程可以启动OnLine,怎么才能执行tbinit啊?
  • 两个页面之间的控制??????????????(online)
  • vga zone pointer(online ,thx)
  • LINUX下多媒体演示程序的编写(waiting online)
  • JPad Pro help!!!!!(online)
  • About DISPLAY!(online wait)
  • 如何调整不同用户的时间? ——onLine
  • 父子进程间的数据传输!online!
  • 我在 http://freesoft.online.sh.cn下载了freeBSD的4.1-install.iso 有644M 。接下来我应该怎么办。
  • 请问jsp中有没转意字符,如想输出"——急!急!急!(online wait)
  • the problem of nfs and exports (waiting online)
  • 如何在redHat6.2上安装配置j2ee1.3?-- i am online waiting....
  • how to use assembly language in c on (Linux platform) .............waiting online
  • How to use Chinese Input in RedHat 7.3!!!!! (hurry!hurry! online waiting!)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,