2010-07-28 109 views
8

我有抛出异常withing30秒ORA-03113在执行SQL查询

ORA-03113 400行SQL查询:结束文件上的通信信道

下面是要注意的事项:

  1. 我已经设置了超时10分钟
  2. 没有取出时的最后一个条件解决了这个埃罗河
  3. 只有当我分析索引时才出现此错误。

令人不安的情况是这样的:

AND UPPER (someMultiJoin.someColumn) LIKE UPPER ('%90936%') 

所以我的假设是,查询正从显然是因为其确定为资源占用服务器端终止。

我的假设是否合适?我应该如何解决这个问题?

编辑:我试图得到错误查询的解释计划,但解释计划查询也给我一个ORA-03113错误。我明白我的查询不是很高效,但为什么这应该是ORA-03113错误的原因。我试图从运行蟾蜍查询,并有生成警报日志或跟踪,我的数据库版本是 Oracle9i企业版发行9.2.0.7.0 - 生产

+0

阅读本 - 它开始与ORA-03113。 http://stackoverflow.com/questions/3347305/ora-07445-access-violation – 2010-07-28 13:45:28

+0

请添加条件导致麻烦问题文本。 – ThinkJet 2010-07-29 11:09:23

+1

@VincentMalgrat - 我不认为你应该删除你的答案。它包含有用的和相关的建议。您只需要从MOS笔记中删除大量的引用。 – APC 2010-08-10 10:05:00

回答

0

这意味着你已经断开。这可能不是由于资源耗费。

我已经看到了与数据库的连接正在通过NAT运行,并且因为没有流量,它关闭了隧道并因此断开连接。通常如果你使用连接池,你不会得到这个。

+0

这不应该是这样,因为我反复尝试,仍然得到相同的错误。 – 2010-07-28 08:31:33

0

正如@Daniel所说,与服务器的网络连接正在被破坏。你可以看看End-of-file on communication channel看看它是否提供了任何有用的建议。

分享和享受。

5

此错误的一个可能的原因是服务器端的线程崩溃。检查Oracle服务器是否生成了任何跟踪文件,或者在其警报日志中记录了任何错误。

你说从查询中删除一个条件导致问题消失。查询需要多长时间才能在没有这种情况下运行?你是否检查过这两个版本的查询的执行计划,看看是否添加该条件导致选择一些效率低下的计划?

+0

查询需要大约40秒,并且该条件被淘汰。当我尝试获得解释计划(有条件)时,我得到相同的ORA-03113错误。 – 2010-07-29 04:24:34

+2

+1 - 首先检查跟踪和警报日志。 – REW 2010-08-11 03:44:28

+1

事实上,您在执行解释计划时遇到ORA-03113错误,这是Oracle CBO崩溃的进一步证据。您需要提出Oracle支持(如果您没有支持,请尝试升级到更高版本,因为您正在访问的错误可能已修复)。也许在常量上有UPPER()的bug优化? – 2011-03-23 23:27:59

0

这在使用复杂查询的基于成本的优化器中经常是一个错误。

你可以尝试做的是改变执行计划。例如。使用WITH来拉出一些subquerys。或者使用SELECT/* + RULE * /提示来防止Oracle使用CBO。同样,删除统计数据也会有所帮助,因为Oracle会使用其他执行计划

如果您可以更新数据库,请进行9.2.0的测试安装。8并查看错误是否已经消失。

有时它有助于转储模式,将所有内容都放入并再次导入转储。

1

从目前为止的信息来看,它看起来像后端崩溃,就像Dave Costa之前提出的那样。你能检查服务器日志吗?

你能用set autotrace traceonly explain得到计划吗?它是从本地SQL * Plus发生的,还是仅通过远程连接发生?肯定听起来像后端的ORA-600可能是罪魁祸首,特别是在解析时。成功运行时间比失败时间长似乎排除了网络问题。我怀疑它很快就会失败,但客户需要长达30秒的时间才能放弃死亡连接,或者服务器花了很长时间才能写出跟踪文件和核心文件。

这可能会让您选择修补(如果您可以在Metalink上找到特定ORA-600的相关修补程序)或升级数据库;或者重写查询以避免它。如果这是一个已知的错误,你可以从Metalink中得到一些关于如何做到这一点的想法。如果你幸运的话,它可能就像提示一样简单,如果额外的条件对计划产生了意想不到的影响。 someMultiJoin.someColumn是成功版本中使用的索引的一部分吗?它可能会令人困惑,你可以通过暗示它使用索引来说服它回到成功的计划,但这显然是相当投机的。

+0

+1 - 有几个错误会导致这样的事情。 – REW 2010-08-11 03:45:17

2

您可以安全地,如果你使用的是用数字(即不区分大小写)两个部分删除了“上”,这样可以降低查询时间检查等等句子

AND UPPER (someMultiJoin.someColumn) LIKE UPPER ('%90936%') 

是等于:

AND someMultiJoin.someColumn LIKE '%90936%' 

编号不受UPPER(和%是独立字符壳体)。

3

我有类似的连接丢失的问题与查询的某些变化。在我的情况下,在某些情况下使用rownum时,连接会下降。事实证明,这是一个通过调整特定Oracle数据库配置设置来解决问题的错误。我们采取了一种解决方法,直到可以安装补丁程序。我希望自己能记住更多细节,或者在此找到一封旧邮件,但我不知道具体情况会有助于解决您的问题。我发布这只是说您可能遇到了一个错误,如果您有权访问Oracle的支持站点(support.oracle.com),您可能会发现其他人已经报告了它。

编辑: 我快速查看了Oracle的支持。有超过1000个与ORA-03113错误,但我发现了一个可能适用的:

错误5015257:QUERY WITH ORA-3113核心转储失败时QUERY_REWRITE_ENABLED = 'TRUE'

总结:

  • 在9.2.0.6.0中确定,在10.2.0中确定。1
  • 运行特定的查询 (未鉴定)导致ORA-03113
  • 运行在查询说明它的 相同
  • 有一个在 $ ORACLE_HOME/dbs中
  • 解决方法是设置 核心文件QUERY_REWRITE_ENABLED为false:alter system set query_rewrite_enabled = FALSE;

另一种可能性:

错误3659827:从长时间运行的查询

  • 9.2.0.5.0通过10.2.0.0
  • 问题ORA-3113:客户有长时间运行的查询,始终产生ORA-3113错误。
    在客户系统上,他们收到core.log文件,但在alert.log中没有收到任何错误 。在测试系统上,我使用了我收到的ORA-7445错误。
  • 解决方法:在会话级别或实例级别设置“_complex_view_merging”= false。