今天后台出现了很多ORA-600,其中第一个错误参数为999。
这个问题在METALINK上没有找到类似的说明。
这篇进一步深入研究数据库中缺少了哪些信息造成了这个问题。
关于错误问题产生的原因参考:ORA-600(999)错误(一):http://yangtingkun.itpub.net/post/468/281181
上一篇文章简单讨论了为什么会出现这个问题。这里打算分析一下这个数据库缺少了哪些数据字典信息,导致了问题的产生。
首先,虽然Oracle缺少了部分信息,但是Oracle仍然认为这个对象是物化视图,而且物化视图的刷新一直都是正常的。
看来要寻找问题产生的原因首先必须从错误入手。
对于正常的物化视图表,Oracle在ALTER TABLE RENAME时会报错,而对于这个数据库,则可以成功,说明在ALTER TABLE RENAME操作执行时,进行了某种检查。
寻找问题最简单的方法是进行SQL_TRACE,然后进行比较:
SQL> CREATE TABLE T_RENAME (ID NUMBER);
表已创建。
SQL> ALTER SESSION SET SQL_TRACE = TRUE;
会话已更改。
SQL> ALTER TABLE T_RENAME RENAME TO T_RENAMED;
表已更改。
SQL> ALTER SESSION SET SQL_TRACE = FALSE;
会话已更改。
SQL> DISC从 Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production 断开
SQL> CONN TEST/TEST@TESTZJ已连接。
SQL> DROP TABLE T_RENAMED;
表已删除。
SQL> ALTER SESSION SET SQL_TRACE = TRUE;
会话已更改。
SQL> ALTER TABLE MV_T RENAME TO T_MV;
ALTER TABLE MV_T RENAME TO T_MV
*第 1 行出现错误:
ORA-32318: cannot rename a materialized view
SQL> ALTER SESSION SET SQL_TRACE = FALSE;
会话已更改。
IXDBA.NET技术社区将得到的两个TRACE信息进行比对:
*** 2007-04-06 12:25:47.625
*** SESSION ID:(37.124) 2007-04-06 12:25:47.596
APPNAME mod='SQL*Plus' mh=3669949024 act='' ah=4029777240
=====================
PARSING IN CURSOR #1 len=34 dep=0 uid=60 oct=42 lid=60 tim=1148274948853089 hv=4177740527 ad='78ec71e0'
ALTER SESSION SET SQL_TRACE = TRUE
END OF STMT
EXEC #1:c=10000,e=116,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=1148274948824465
*** 2007-04-06 12:26:07.649
XCTEND rlbk=0, rd_only=1
=====================
PARSING IN CURSOR #1 len=40 dep=0 uid=60 oct=15 lid=60 tim=1148274968407963 hv=4141242299 ad='78ec6db8'
ALTER TABLE T_RENAME RENAME TO T_RENAMED
END OF STMT
PARSE #1:c=0,e=614,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=1148274968407947
=====================
PARSING IN CURSOR #2 len=256 dep=1 uid=0 oct=47 lid=0 tim=1148274968411117 hv=701589132 ad='735961d8'
BEGIN
/* NOP UNLESS A TABLE OBJECT */
IF dictionary_obj_type = 'TABLE' AND sys.dbms_cdc_publish.active > 0
THEN
sys.dbms_cdc_publish.change_table_trigger(dictionary_obj_owner,dictionary_obj_name,sysevent);
END IF;
END;
END OF STMT
PARSE #2:c=10000,e=2954,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=1148274968411112
=====================
PARSING IN CURSOR #18 len=43 dep=2 uid=0 oct=3 lid=0 tim=1148274968411517 hv=1600975027 ad='734ee3a0'
SELECT MINOR_VERSION FROM SYS.CDC_SYSTEM$
END OF STMT
EXEC #18:c=0,e=42,p=0,cr=0,cu=0,mis=0,r=0,dep=2,og=4,tim=1148274968411511
FETCH #18:c=0,e=123,p=0,cr=3,cu=0,mis=0,r=1,dep=2,og=4,tim=1148274968411726
EXEC #2:c=0,e=493,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=4,tim=1148274968411791
=====================
PARSING IN CURSOR #2 len=198 dep=1 uid=0 oct=3 lid=0 tim=1148274968412570 hv=2703824309 ad='72f8687c'