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

时间:2011-05-17 06:46:55

标签: sql database oracle join ora-03113

我正在写一个相当大的查询,我有2个表,内连接和15个表左外连接。当我添加16时,我得到 ORA-03113:通信频道上的文件结尾。如果我删除一个表来添加新表,查询工作正常。

查询运行正常,对于SQL Server来说,只是甲骨文似乎正在挣扎。

4 个答案:

答案 0 :(得分:7)

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

  1. 发生了网络问题。
  2. 处理您的请求的服务器进程已终止
  3. 如果您可以使用语句可靠地生成ORA-3113,那么您将处于第二种情况,很可能是来自Oracle的错误。当Oracle进程意外死亡时,它会在USER_DUMP_DEST中保留一个跟踪文件(在SQL * Plus show parameter user_dump_dest中)。使用编辑器打开跟踪文件,并查找其他更重要的错误消息(搜索ORA-)。

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

答案 1 :(得分:2)

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

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

有时它以不同的方式编写查询。你可以发帖吗?我可能会认识到某种模式也会给我带来麻烦,并提出另一种选择。

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

答案 2 :(得分:2)

Oracle的各种限制可在Appendix A的数据库文档中找到。我找不到任何具体的查询允许的连接数,但由于查询中允许最多255个子查询,我不认为16个左连接不会超出它的能力。 编辑:您在WHERE子句中允许255个子查询。显然FROM子句中的unlimited

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

  

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

答案 3 :(得分:1)

ORA-03113表示您的客户端应用程序与Oracle影子进程失去了通信。因此,您可以先尝试使用其他客户端工具。

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

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