Oracle中可以加入的表的数量是否有限制?

问题描述:

我正在写一个相当大的查询,我有2个表,内连接和15个表左外加入。当我添加16时,我得到ORA-03113:通讯通道上的文件结束。如果我删除一个表来添加新的表,查询工作正常。Oracle中可以加入的表的数量是否有限制?

该查询对SQL Server运行正常,它只是似乎在挣扎的Oracle。

+2

您可能会考虑在http://dba.stackexchange.com/ – Gabe 2011-05-17 07:06:31

+0

处提问您的问题。Oracle绝对没有问题,只能连接17个表。你是否在使用任何可能触发ORA-600的奇特数据类型?或者新表中是否存在任何块级别的损坏? – Gaius 2011-05-17 09:26:30

ORA-3113错误,当客户端之间的连接并且数据库意外中断。这两个主要原因是:

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

如果你能可靠地产生ORA-3113与语句,你是在第二种情况下,最有可能从Oracle的错误。当Oracle进程意外死机时,它会在USER_DUMP_DEST中留下一个跟踪文件(在SQL * Plus show parameter user_dump_dest中)。使用编辑器打开跟踪文件并查找其他更重要的错误消息(搜索ORA-)。

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

我也遇到过这样的问题,它们与Oracle中的错误有关。 最近我还没有这些,可能是由于雇佣的DBA将很多补丁应用到我们的数据库。

由于连接了15个表,因此不会发生此问题。我已经构建了更多的查询。我相信我写的最大的查询约为450行,以许多不同的方式连接至少50个表格。

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

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

Oracle的各种限制可在其数据库文档的Appendix A中找到。我找不到任何专门针对查询中允许的连接数量,但由于在查询中允许多达255个子查询,我不认为16个左连接没有超出其能力。 编辑WHERE子句中允许有255个子查询。显然,它的FROM子句中的unlimited

但是,你所列出的错误信息会倾向于认为它是查询的实际总长度:

上的SQL语句可以持续多久的限制取决于在许多因素上,包括数据库配置,磁盘空间和内存

ORA-03113意味着您的客户端应用程序与Oracle影子进程失去了通信。所以你可能会先尝试一个不同的客户端工具。

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

请放心,甲骨文处理15+表相当不错......遇到