3

我正在编写一个相当大的查询,我有 2 个表,内连接和 15 个左外连接表。当我添加 16 时,我得到ORA-03113: end-of-file on communication channel。如果我删除一个表以添加新表,则查询工作正常。

该查询在 SQL Server 上运行良好,只是 Oracle 似乎在苦苦挣扎。

4

4 回答 4

7

当客户端与数据库之间的连接意外中断时,会遇到 ORA-3113 错误。两个主要原因是:

  1. 出现网络问题。
  2. 处理您的请求的服务器进程已终止

如果您可以通过语句可靠地生成 ORA-3113,那么您属于第二种情况,很可能是 Oracle 的错误。当一个 Oracle 进程意外终止时,它会在您的 USER_DUMP_DEST 中(在 SQL*Plus 中show parameter user_dump_dest)留下一个跟踪文件。使用编辑器打开跟踪文件并查找其他更重要的错误消息(搜索ORA-)。

您很可能会发现像 ORA-7445 或 ORA-600 这样的服务器错误。在这种情况下,您需要打开 Oracle 支持说明 ID 153788.1以进一步确定问题及其解决方案。

于 2011-05-17T09:02:46.597 回答
2

我也遇到了这样的问题,它们与 Oracle 中的错误有关。最近我没有任何这些,可能是由于聘请的 DBA 对我们的数据库应用了许多补丁。

由于加入了 15 个表,因此不会出现此问题。我已经建立了更多的查询。我相信我写的最大查询大约有 450 行,以许多不同的方式连接至少 50 个表。

有时它会以不同的方式编写查询。您可以发布您的查询吗?我可能会认识到某种模式也给我带来了麻烦,并提出替代方案。

我想补充一点,查询的运行时间几乎不是造成这种情况的原因。我已经看到查询运行了几分钟而没有任何问题,而其他人在几秒钟内就给出了这个问题。

于 2011-05-17T06:54:39.383 回答
2

Oracle 的各种限制可在其数据库文档的附录 A中找到。我找不到任何专门针对查询中允许的联接数的信息,但是由于在查询中最多允许 255个子查询,因此我认为 16 个左联接不会超出其能力范围。编辑WHERE:子句中允许有 255 个子查询。显然它在条款中是无限的FROM

但是,您列出的错误消息往往表明它是整个查询的实际长度:

SQL 语句的长度限制取决于许多因素,包括数据库配置、磁盘空间和内存

于 2011-05-17T06:55:45.123 回答
1

ORA-03113 意味着您的客户端应用程序已失去与 Oracle 影子进程的通信。因此,您可以先尝试不同的客户端工具。

当 Oracle 可执行文件被终止、终止或崩溃并且客户端连接未按顺序关闭时,也会发生 ORA-03113。您没有提到在那之后您必须重新启动 Oracle,所以我认为它与客户端或网络相关。否则,您将不得不检查日志文件 alert.ora 等...

请放心,Oracle 可以很好地处理 15 个以上的表......

于 2011-05-17T09:02:16.697 回答