我需要在内联视图中创建集合中元素的集合。我尝试使用collect和table函数对集合进行解聚并再次聚合,但是ORA-03113失败了。
以下是导致问题的查询的简化版本。
在我的实现中,我将在单个查询中将多个级别的嵌套查询与联合连接,这些查询应将所有集合聚合为一个集合。出于性能原因(昂贵的上下文切换),实现PL / SQL代码来聚合集合不是一种选择。
非常感谢您的反馈/建议。
SELECT BANNER FROM V$VERSION
/
CREATE OR REPLACE TYPE OBJECT_ID_TAB_T IS TABLE OF NUMBER(11);
/
SELECT OWNER, CAST(COLLECT( MULTISET(SELECT COLUMN_VALUE FROM TABLE((OBJECT_ID_LIST) ))) AS OBJECT_ID_TAB_T) AS OBJECT_ID_LIST
FROM (SELECT OWNER, OBJECT_NAME, CAST(COLLECT(OBJECT_ID) AS OBJECT_ID_TAB_T) AS OBJECT_ID_LIST
FROM ALL_OBJECTS
GROUP BY OWNER, OBJECT_NAME
)
GROUP BY OWNER
/
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
5 rows selected.
Type created.
SELECT OWNER, CAST(COLLECT( MULTISET(SELECT COLUMN_VALUE FROM TABLE((OBJECT_ID_LIST) ))) AS OBJECT_ID_TAB_T) AS OBJECT_ID_LIST
FROM (SELECT OWNER, OBJECT_NAME, CAST(COLLECT(OBJECT_ID) AS OBJECT_ID_TAB_T) AS OBJECT_ID_LIST
FROM ALL_OBJECTS
GROUP BY OWNER, OBJECT_NAME
)
GROUP BY OWNER
*
Error at line 0
ORA-03113: end-of-file on communication channel
Process ID: 8000
Session ID: 154 Serial number: 164
Script Terminated on line 25.
答案 0 :(得分:1)
ORA-03113 :通讯渠道错误的文件结尾是一般错误,因为您可能知道如果您在此处发布了此问题。因此,这里有一系列可以帮助您解决问题的内容,而不是让您了解可能的原因。此错误非常常见,以至于不太可能找到确切的原因,因此您需要了解如何通过挖掘日志和/或跟踪文件来调试此特定错误。
建议:我首先想建议减少查询所需的内存,并降低复杂性。创建中间表并在单独的步骤中执行查询。 Oracle可能会遇到内存问题(特别是在Windows上)并且可能导致侦听器内存不足和连接终止问题。您可以使用直接SQL执行此操作,因为您说您不想使用PL * SQL。
解决问题的想法:检查服务器上的alert_sid.log。 alert_sid.log的位置由BACKGROUND_DUMP_DEST初始化参数指定。它可能表示服务器已关闭。您可能需要修改重新传输计数。接下来检查其他Oracle跟踪文件。
使用 Oracle配置文件设置跟踪选项。
的 1。 SQLNET.ORA 强> 的
TRACE_DIRECTORY_CLIENT建立目标目录 客户端跟踪输出。默认情况下,客户端目录是 UNIX上的$ ORACLE_HOME / network / trace和ORACLE_HOME \ network \ trace on 视窗。
的 2。 LISTENER.ORA
TRACE_LEVEL_listener_name - 指定跟踪的详细程度 听众的设施记录。 - off(相当于0)不提供跟踪 - 用户(相当于4个)跟踪以识别用户引发的错误情况 - admin(相当于6个)跟踪以识别特定于安装的问题 - 支持(相当于16)为Oracle支持服务的故障排除信息提供跟踪信息
TRACE_DIRECTORY_listener_name - 建立目标目录 和跟踪文件的文件。默认情况下,目录是 UNIX上的$ ORACLE_HOME / network / trace和ORACLE_HOME \ network \ trace on Windows,文件名是listener.trc。
第3。 CMAN.ORA 强> 的
TRACE_DIRECTORY - 默认情况下,目录为$ ORACLE_HOME / network / trace on Windows上的UNIX和ORACLE_HOME \ network \ trace。
使用在各种Oracle配置文件中创建的跟踪文件,应该为您提供识别错误根本原因所需的信息。我会关注围绕听众的问题或由于内存不足而导致的问题。