ORA-08104

1. Error产生的操作,以下操作异常中断:

SQL> alter index PCO_PK rebuild online;

2. 再次执行,返回ORA-08104错误信息:

SQL> alter index PCO_PK rebuild online;

ORA-08104: this index object 42808 is being online built or rebuilt

3. 查看对象状态

SQL> select obj#,flags from sys.ind$ where obj#=42808;

      OBJ#      FLAGS
---------- ----------
     42808        514

4. 查看数据字典生成脚本sql.bsq,在ind$段的flag字段,显示如下说明:

/* 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 */

此时,Oracle没来得及清理相应的临时段和标志位,仍以为该进程在活动。

5. 等待SMON进程清理,在alert_log看到:

User:,time:20080516 13:10:12,program:******
(SMON),IP:,object:PCO_PK,DDL: drop table "***"."PCO_PK"

网上有说上重启可以解决,有说直接update系统表ind$的,对于不能停机的产品库来说,这些都是不可取的方案。
重启不现实,修改系统表更是DBA的大忌。
Oracle10g则可以使用dbms_repair.online_index_clean手工清理(metalink的说法,9i打了Bug 3805539的patch的话也能用该过程了)。
所以,对于大索引的online rebuild,不要轻易中止。

6. Metalink相关参考:
Note:375856.1
Note:351585.1
Bug 4364202
Bug 3805539
Bug 2702410

Trackback

no comment untill now

Add your comment now

切换到手机版