我正在编写一个相当大的查询,我有 2 个表,内连接和 15 个左外连接表。当我添加 16 时,我得到ORA-03113: end-of-file on communication channel。如果我删除一个表以添加新表,则查询工作正常。
该查询在 SQL Server 上运行良好,只是 Oracle 似乎在苦苦挣扎。
当客户端与数据库之间的连接意外中断时,会遇到 ORA-3113 错误。两个主要原因是:
如果您可以通过语句可靠地生成 ORA-3113,那么您属于第二种情况,很可能是 Oracle 的错误。当一个 Oracle 进程意外终止时,它会在您的 USER_DUMP_DEST 中(在 SQL*Plus 中show parameter user_dump_dest
)留下一个跟踪文件。使用编辑器打开跟踪文件并查找其他更重要的错误消息(搜索ORA-
)。
您很可能会发现像 ORA-7445 或 ORA-600 这样的服务器错误。在这种情况下,您需要打开 Oracle 支持说明 ID 153788.1以进一步确定问题及其解决方案。
我也遇到了这样的问题,它们与 Oracle 中的错误有关。最近我没有任何这些,可能是由于聘请的 DBA 对我们的数据库应用了许多补丁。
由于加入了 15 个表,因此不会出现此问题。我已经建立了更多的查询。我相信我写的最大查询大约有 450 行,以许多不同的方式连接至少 50 个表。
有时它会以不同的方式编写查询。您可以发布您的查询吗?我可能会认识到某种模式也给我带来了麻烦,并提出替代方案。
我想补充一点,查询的运行时间几乎不是造成这种情况的原因。我已经看到查询运行了几分钟而没有任何问题,而其他人在几秒钟内就给出了这个问题。
ORA-03113 意味着您的客户端应用程序已失去与 Oracle 影子进程的通信。因此,您可以先尝试不同的客户端工具。
当 Oracle 可执行文件被终止、终止或崩溃并且客户端连接未按顺序关闭时,也会发生 ORA-03113。您没有提到在那之后您必须重新启动 Oracle,所以我认为它与客户端或网络相关。否则,您将不得不检查日志文件 alert.ora 等...
请放心,Oracle 可以很好地处理 15 个以上的表......