yangtingkun
===========================================================
ORA-600(rpidrv-3)错误
===========================================================

一个没有什么危害的小bug。当建立视图时,访问一张不存在的表时,可能引发这个错误。


错误信息为:

Errors in file /u1/oracle/admin/repdb01/udump/repdb01_ora_4346.trc:
ORA-00600: internal error code, arguments: [rpidrv-3], [], [], [], [], [], [], []

对应的trace文件中,错误信息为:

ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [rpidrv-3], [], [], [], [], [], [], []
Current SQL statement for this session:
create or replace view zh_ndmain.gpo_reg_product_public as
select
a.ID,
b.DATA_PRODUCT_ID,
a.REG_ORG_ID as MANUFACTURE_ID,
a.STATUS,
a.REG_DATE,
a.REG_END_DATE,
a.EXPIRY_STATUS,
a.CREATE_DATE,
a.CREATE_USER,
a.LAST_UPDATE_DATE,
a.LAST_UPDATE_USER,
a.REMARK,
a.BID_FLAG,
a.TRADE_FLAG
from GPO_AGENT_SELLER a,GPO_REG_PRODUCT b
where a.REG_PRODUCT_ID=b.id
and a.agent_level in(1,2)
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+328 CALL ksedst()+0 FFFFFFFF7FFF5850 ?
000000000 ? 000000000 ?
00000003E ?
FFFFFFFF7FFF60E8 ?
1031D56C8 ?
kgerinv()+184 PTR_CALL 0000000000000000 000000000 ? 000103400 ?
0001035D9 ? 000102C00 ?
1035D9000 ? 1035D9C28 ?
kgesinv()+20 CALL kgerinv()+0 1035D9E88 ? 1036FA708 ?
0000013C8 ? 000000000 ?
1035DBF94 ? 1035DB258 ?
ksesin()+88 CALL kgesinv()+0 1035D9E88 ? 1036FA708 ?
103195D60 ? 000000000 ?
FFFFFFFF7FFF6A00 ?
FFFFFFFF7CF5CD48 ?
rpidrv()+2748 CALL ksesin()+0 103195D60 ? 000000000 ?
000000000 ? 1002272A0 ?
07FFFFC00 ? 400C7381A50 ?
rpiope()+72 CALL rpidrv()+0 000000064 ? 0001035E5 ?
000000000 ? 000000008 ?
400C735F8E0 ?
FFFFFFFF7FFF6B38 ?
kqdgtc()+360 CALL rpiope()+0 000000002 ? 38001A738 ?
000000002 ? 000000000 ?
000000010 ? 000000000 ?

根据错误函数查询,找到metalink上对应的bug描述:Doc ID: Note:2949392.8

根据Oracle的描述,这个错误确认影响的版本是92049205和10G都已经解决了这个bug

根据bug中的描述,当Oracle在创建一个视图的时候,没有检查创建视图的用户是否是一个存在的用户,从而导致了内部错误的发生。

比如下面就模拟了这个错误的产生,其中ABC用户并不存在:

SQL> CREATE OR REPLACE VIEW ABC.CAT_VIEW AS
2 SELECT
3 A.ID,
4 B.ID,
5 A.NAME,
6 A.ENABLE_FLAG
7 FROM CAT_NOT_EXIST B, CAT_ORG A
8 WHERE A.ID=B.ID
9 ;
FROM CAT_NOT_EXIST B, CAT_ORG A
*
ERROR at line 7:
ORA-00604: error occurred at recursive SQL level 1
ORA-00600: internal error code, arguments: [rpidrv-3], [], [], [], [], [], [], []

而最简单的避免方法莫过于在所在的表上加上用户名前缀,这样就可以避免内部错误的产生,从而报错表或视图不存在:

SQL> CREATE OR REPLACE VIEW ABC.CAT_VIEW AS
2 SELECT
3 A.ID,
4 B.ID,
5 A.NAME,
6 A.ENABLE_FLAG
7 FROM ABC.CAT_NOT_EXIST B, ABC.CAT_ORG A
8 WHERE A.ID=B.ID
9 ;
FROM ABC.CAT_NOT_EXIST B, ABC.CAT_ORG A
*
ERROR at line 7:
ORA-00942: table or view does not exist

这个bug本身没有任何的危害,只是没有给出真正导致错误的错误信息而已。

yangtingkun 发表于:2008.05.15 23:53 ::分类: ( ORACLE , Bug ) ::阅读:(119次) :: 评论 (0)

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...