问题描述
又是一个PL/DEVELOPER的bug。
客户数据库是9.2.0.8,告警日志中出现大量下面的错误信息:
Thu DEC 1 08:37:52 2011 Errors IN file /oracle9/app/admin/db/udump/db1_ora_1995124.trc: ORA-00600: internal error code, arguments: [17113], [0x000000000], [], [], [], [], [], [] Thu DEC 1 08:37:52 2011 Trace dumping IS performing id=[cdmp_20111201083752] Thu DEC 1 08:38:21 2011 Errors IN file /oracle9/app/admin/db/udump/db1_ora_1995124.trc: ORA-00600: internal error code, arguments: [17113], [0x000000000], [], [], [], [], [], [] Thu DEC 1 08:39:47 2011 Errors IN file /oracle9/app/admin/db/udump/db1_ora_2982400.trc: ORA-00600: internal error code, arguments: [17113], [0x000000000], [], [], [], [], [], [] Thu DEC 1 08:41:32 2011 Errors IN file /oracle9/app/admin/db/udump/db1_ora_1995124.trc: ORA-00600: internal error code, arguments: [17113], [0x000000000], [], [], [], [], [], [] Thu DEC 1 08:42:13 2011 Errors IN file /oracle9/app/admin/db/udump/db1_ora_1995124.trc: ORA-00600: internal error code, arguments: [17113], [0x000000000], [], [], [], [], [], [] Thu DEC 1 08:43:37 2011 Errors IN file /oracle9/app/admin/db/udump/db1_ora_1995124.trc: ORA-00600: internal error code, arguments: [17113], [0x000000000], [], [], [], [], [], []
专家解答
在详细TRACE文件/oracle9/app/admin/db/udump/db1_ora_1995124.trc中,可以看到这是一个DEVELOPER工具发起的会话:
O/S info: USER: Administrator, term: PC2011100510, ospid: 2676:2564, machine: WORKGROUP\PC2011100510 program: plsqldev.exe application name: PL/SQL Developer, hash VALUE=1190136663 action name: Main SESSION, hash VALUE=1773317990
而导致错误的SQL语句为:
DECLARE
t_owner varchar2(30);
t_name varchar2(30);
PROCEDURE check_mview IS
dummy INTEGER;
BEGIN
IF :object_type = 'TABLE' THEN
SELECT 1 INTO dummy
FROM sys.all_objects
WHERE owner = :object_owner
AND object_name = :object_name
AND object_type = 'MATERIALIZED VIEW'
AND rownum = 1;
:object_type := 'MATERIALIZED VIEW';
END IF;
exception
WHEN others THEN NULL;
END;
BEGIN
:sub_object := NULL;
IF :deep != 0 THEN
BEGIN
IF :part2 IS NULL THEN
SELECT constraint_type, owner, constraint_name
INTO :object_type, :object_owner, :object_name
FROM sys.all_constraints c
WHERE c.constraint_name = :part1 AND c.owner = USER
AND rownum = 1;
ELSE
SELECT constraint_type, owner, constraint_name, :part3
INTO :object_type, :object_owner, :object_name, :sub_object
FROM sys.all_constraints c
WHERE c.constraint_name = :part2 AND c.owner = :part1
AND rownum = 1;
END IF;
IF :object_type = 'P' THEN :object_type := 'PRIMARY KEY'; END IF;
IF :object_type = 'U' THEN :object_type := 'UNIQUE KEY'; END IF;
IF :object_type = 'R' THEN :object_type := 'FOREIGN KEY'; END IF;
IF :object_type = 'C' THEN :object_type := 'CHECK CONSTRAINT'; END IF;
RETURN;
exception
WHEN no_data_found THEN NULL;
END;
END IF;
:sub_object := :part2;
IF (:part2 IS NULL) OR (:part1 != USER) THEN
BEGIN
SELECT object_type, USER, :part1
INTO :object_type, :object_owner, :object_name
FROM sys.all_objects
WHERE owner = USER
AND object_name = :part1
AND object_type IN ('MATERIALIZED VIEW', 'TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'TYPE', 'TRIGGER', 'SYNONYM')
AND rownum = 1;
IF :object_type = 'SYNONYM' THEN
SELECT s.table_owner, s.TABLE_NAME
INTO t_owner, t_name
FROM sys.all_synonyms s
WHERE s.synonym_name = :part1
AND s.owner = USER
AND rownum = 1;
SELECT o.object_type, o.owner, o.object_name
INTO :object_type, :object_owner, :object_name
FROM sys.all_objects o
WHERE o.owner = t_owner
AND o.object_name = t_name
AND object_type IN ('MATERIALIZED VIEW', 'TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'TYPE', 'TRIGGER', 'SYNONYM')
AND rownum = 1;
END IF;
:sub_object := :part2;
IF :part3 IS NOT NULL THEN
:sub_object := :sub_object || '.' || :part3;
END IF;
check_mview;
RETURN;
exception
WHEN no_data_found THEN NULL;
END;
END IF;
BEGIN
SELECT s.table_owner, s.TABLE_NAME
INTO t_owner, t_name
FROM sys.all_synonyms s
WHERE s.synonym_name = :part1
AND s.owner = 'PUBLIC'
AND rownum = 1;
SELECT o.object_type, o.owner, o.object_name
INTO :object_type, :object_owner, :object_name
FROM sys.all_objects o
WHERE o.owner = t_owner
AND o.object_name = t_name
AND object_type IN ('MATERIALIZED VIEW', 'TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'TYPE', 'TRIGGER', 'SYNONYM')
AND rownum = 1;
check_mview;
RETURN;
exception
WHEN no_data_found THEN NULL;
END;
:sub_object := :part3;
BEGIN
SELECT o.object_type, o.owner, o.object_name
INTO :object_type, :object_owner, :object_name
FROM sys.all_objects o
WHERE o.owner = :part1
AND o.object_name = :part2
AND object_type IN ('MATERIALIZED VIEW', 'TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'TYPE', 'TRIGGER', 'SYNONYM')
AND rownum = 1;
check_mview;
RETURN;
exception
WHEN no_data_found THEN NULL;
END;
BEGIN
IF :part2 IS NULL AND :part3 IS NULL
THEN
SELECT 'USER', NULL, :part1
INTO :object_type, :object_owner, :object_name
FROM sys.all_users u
WHERE u.username = :part1
AND rownum = 1;
RETURN;
END IF;
exception
WHEN no_data_found THEN NULL;
END;
BEGIN
IF :part2 IS NULL AND :part3 IS NULL AND :deep != 0
THEN
SELECT 'ROLE', NULL, :part1
INTO :object_type, :object_owner, :object_name
FROM sys.session_roles r
WHERE r.ROLE = :part1
AND rownum = 1;
RETURN;
END IF;
exception
WHEN no_data_found THEN NULL;
END;
:object_owner := NULL;
:object_type := NULL;
:object_name := NULL;
:sub_object := NULL;
END;这显然是DEVELOPER在获取数据字典源数据时执行的SQL,关于这个错误的描述可以参考文档:ORA-00600: internal error code, arguments: [17113] using pl/sql developer [ID 396326.1]。
Oracle针对这个问题的解决方案只有一句,把pl/sql developer升级到最新版本。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




