Ric*_*old 6 oracle oracle11gr2
我需要在内联视图中创建集合中的元素集合.我尝试使用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
/
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
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,在 Windows 上为 ORACLE_HOME\network\trace。
2.监听器.ORA
TRACE_LEVEL_listener_name - 指定侦听器的跟踪工具记录的详细级别。- off(相当于 0)不提供跟踪 - user(相当于 4)跟踪,用于识别用户引起的错误情况 - admin(相当于 6)跟踪,用于识别特定于安装的问题 - support(相当于 16)提供跟踪信息Oracle 支持服务的故障排除信息
TRACE_DIRECTORY_listener_name - 建立跟踪文件的目标目录和文件。默认情况下,该目录在 UNIX 上为 $ORACLE_HOME/network/trace,在 Windows 上为 ORACLE_HOME\network\trace,文件名为listener.trc。
3.CMAN.ORA
TRACE_DIRECTORY - 默认情况下,该目录在 UNIX 上为 $ORACLE_HOME/network/trace,在 Windows 上为 ORACLE_HOME\network\trace。
使用在各种 Oracle 配置文件中创建的跟踪文件应该可以为您提供识别错误根本原因所需的信息。我会专注于围绕听众的问题或由于内存不足而导致的问题。