gpt4 book ai didi

oracle - 查询导致数据库失败,ORA-0113

转载 作者:行者123 更新时间:2023-12-04 16:00:13 25 4
gpt4 key购买 nike

我需要使用内联 View 中的集合中的元素创建一个集合。我已尝试对集合进行解聚合并使用 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.

最佳答案

ORA-03113 : end-of-file on communication channel 错误是一个通用错误,因为如果您在此处发布问题,您可能会知道。因此,不要让您厌烦可能的原因,这里列出了一些可以帮助您解决问题的事项。此错误非常普遍,以至于人们不太可能找到确切原因,因此您需要了解如何通过深入研究日志和/或跟踪文件来调试此特定错误。

建议 :我想首先提出一些建议来减少查询所需的内存,并降低复杂性。创建一个中间表并在单独的步骤中执行查询。 Oracle 可能会遇到内存问题(尤其是在 Windows 上),这可能会导致监听器内存不足和连接终止出现问题。您可以使用直接 SQL 执行此操作,因为您说过不想使用 PL*SQL。

解题思路 : 检查服务器上的alert_sid.log。 alert_sid.log 的位置由 Background_DUMP_DEST 初始化参数指定。它可能表示服务器已关闭。您可能需要修改重新传输计数。接下来检查其他 Oracle 跟踪文件。

使用 设置跟踪选项Oracle 配置文件 .

1. SQLNET.ORA

  • 设置使用 Oracle Net Manager
  • TRACE_DIRECTORY_CLIENT 建立目标目录
    客户端跟踪输出。默认情况下,客户端目录是
    $ORACLE_HOME/network/trace on UNIX 和 ORACLE_HOME\network\trace on
    视窗。
  • TRACE_DIRECTORY_SERVER - 建立目标目录
    数据库服务器跟踪输出。默认情况下,服务器目录为
    $ORACLE_HOME/network/trace on UNIX 和 ORACLE_HOME\network\trace on
    视窗。


  • 2. LISTENER.ORA
  • 设置使用 Oracle Enterprise ManagerOracle Net Manager
  • TRACE_LEVEL_listener_name - 指定跟踪的详细程度
    听众的设施记录。
    - off(相当于 0)不提供跟踪
    - 用户(相当于 4 个)跟踪以识别用户引起的错误情况
    - 管理员(相当于 6 个)跟踪以识别特定于安装的问题
    - support(相当于 16)为 Oracle 支持服务的故障排除信息提供跟踪信息
  • TRACE_DIRECTORY_listener_name - 建立目标目录
    和跟踪文件的文件。默认目录是
    $ORACLE_HOME/network/trace on UNIX 和 ORACLE_HOME\network\trace on
    Windows,文件名为 listener.trc。


  • 3. CMAN.ORA
  • 设置使用 Oracle Net Manager
  • TRACE_DIRECTORY - 默认情况下,目录为 $ORACLE_HOME/network/trace on
    Windows 上的 UNIX 和 ORACLE_HOME\network\trace。


  • 使用在各种 Oracle 配置文件中创建的跟踪文件应该为您提供确定错误根本原因所需的信息。我会关注围绕听众的问题或由于内存不足而导致的问题。

    关于oracle - 查询导致数据库失败,ORA-0113,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11083718/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com