ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORA-600(999)错误(三)

ORA-600(999)错误(三)

原创 Linux操作系统 作者:yangtingkun 时间:2007-05-04 00:00:00 0 删除 编辑

今天后台出现了很多ORA-600,其中第一个错误参数为999

这个问题在METALINK上没有找到类似的说明。

这篇进一步深入研究数据库中缺少了哪些信息造成了这个问题。

关于错误问题产生的原因参考:ORA-600(999)错误(一):http://yangtingkun.itpub.net/post/468/281181

错误原因的进一步分析:ORA-600(999)错误(二):http://yangtingkun.itpub.net/post/468/281592


上一篇文章已经详细分析了问题产生的原因,本来认为这个问题已经没有可说的了,结果今天在处理后续问题的时候,发现了其他的有趣现象。

回顾一下问题,由于确实了表上的物化视图信息,导致物化视图的基表可以修改名称,进而导致物化视图刷新的过程中无法找到基表,因此出现ORA-600错误。

今天发现,虽然物化视图找不到基本无法刷新,但是物化视图可以删除,而且删除后改名的基表不受影响。

SQL> drop materialized view usr_user;

Materialized view dropped.

SQL> SELECT MVIEW_NAME, CONTAINER_NAME FROM USER_MVIEWS WHERE MVIEW_NAME LIKE 'USR%';

MVIEW_NAME CONTAINER_NAME
------------------------------ ------------------------------
USR_ROLE USR_ROLE
USR_USER_ROLE USR_USER_ROLE

SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'USR%';

TABLE_NAME
------------------------------
USR_ROLE_BAK_20070403
USR_USER_BAK_20070403
USR_USER_ROLE_BAK_20070403

下面将修改名称的表恢复,看看再删除物化视图的时候是否会删除基表:

SQL> SELECT MVIEW_NAME, CONTAINER_NAME FROM USER_MVIEWS WHERE MVIEW_NAME LIKE 'USR%';

MVIEW_NAME CONTAINER_NAME
------------------------------ ------------------------------
USR_ROLE USR_ROLE
USR_USER_ROLE USR_USER_ROLE

SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'USR%';

TABLE_NAME
------------------------------
USR_ROLE_BAK_20070403
USR_USER_BAK_20070403
USR_USER_ROLE_BAK_20070403

SQL> ALTER TABLE USR_ROLE_BAK_20070403 RENAME TO USR_ROLE;

Table altered.

SQL> DROP MATERIALIZED VIEW USR_ROLE;

Materialized view dropped.

SQL> SELECT MVIEW_NAME, CONTAINER_NAME FROM USER_MVIEWS WHERE MVIEW_NAME LIKE 'USR%';

MVIEW_NAME CONTAINER_NAME
------------------------------ ------------------------------
USR_USER_ROLE USR_USER_ROLE

SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'USR%';

TABLE_NAME
------------------------------
USR_USER_BAK_20070403
USR_USER_ROLE_BAK_20070403

从上面的结果可以看到,如果基表存在的话,Oracle会将其一起删除,而对于无法找到基表的情况,Oracle只删除了物化视图,而并未报错。

最后验证一下将表名恢复,物化视图的刷新是否恢复正常:

SQL> ALTER TABLE USR_USER_ROLE_BAK_20070403 RENAME TO USR_USER_ROLE;

Table altered.

SQL> EXEC DBMS_MVIEW.REFRESH('USR_USER_ROLE')

PL/SQL procedure successfully completed.

对于普通的物化视图的基表是无法直接删除的,但是根据上一篇文章分析的结果,这里肯定也是可以直接删除的。

SQL> DROP TABLE USR_USER_ROLE;

Table dropped.

SQL> DROP MATERIALIZED VIEW USR_USER_ROLE;

Materialized view dropped.

数据字典的不完整也许在短时间内没有什么体现,但是肯定会为系统埋下陷阱。这个例子就是一个很好的证明。

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

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10354609