环境
odp.net 2.102.2.20
验证Connection = true;连接字符串中的Min Pool Size = 0
问题:
我们唯一的解决方案是DBA在数据库服务器上重新分配表。 DBA说这是应用程序问题,我不太确定但是......
我已阅读SO 上的所有相关帖子,但欢迎任何建议!
谢谢, P
ORA-07445:遇到异常:核心转储[ACCESS_VIOLATION] [evaopn2 + 2896] [PC:0x15F3876] [ADDR:0x0] [UNABLE_TO_READ] []
SELECT ILRS.ILRS_ID,
ILRS.EXT_IDENTIFIER RUN_SET_EXTERNAL_IDENTIFIER,
ILRS.DESCRIPTION RUN_SET_DESCRIPTION,
ISST.CODE IIL_RUN_SET_STATUS_CODE,
ILRN.ILRN_ID,
ILRN.EXT_IDENTIFIER RUN_EXTERNAL_IDENTIFIER,
ILRN.RUN_DATE,
IRTY.CODE IIL_RUN_TYPE_CODE,
PDCT.CODE PRODUCT_CODE,
ILRN.STOCHASTIC_SCENARIOS STOCHASTIC_SCENARIOS,
ILRN.PRIORITY PRIORITY,
ILRN.DESCRIPTION RUN_DESCRIPTION,
IRLB.CODE IIL_RUN_LABEL_CODE,
IRST.CODE IIL_RUN_STATUS_CODE,
ILRN.ACTIVE,
UPDATE_USER.FIRST_NAME || ' ' || UPDATE_USER.SURNAME UPDATE_USER,
ILRN.LAST_UPDATED,
IRSV.TRANS_FROM STATUS_LAST_UPDATED
FROM IIL_RUN_SETS ILRS
INNER JOIN IIL_RN_SET_STA_VALS ISSV ON ILRS.ILRS_ID = ISSV.ILRS_ID
AND CURRENT_TIMESTAMP BETWEEN ISSV.TRANS_FROM AND ISSV.TRANS_TO
INNER JOIN IIL_RN_SET_STATUSES ISST ON ISSV.ISST_ID = ISST.ISST_ID
INNER JOIN IIL_RUNS ILRN ON ILRS.ILRS_ID = ILRN.ILRS_ID
LEFT OUTER JOIN IIL_RUN_LABELS IRLB ON ILRN.IRLB_ID = IRLB.IRLB_ID
INNER JOIN IIL_RUN_STA_VALS IRSV ON ILRN.ILRN_ID = IRSV.ILRN_ID
AND CURRENT_TIMESTAMP BETWEEN IRSV.TRANS_FROM AND IRSV.TRANS_TO
INNER JOIN IIL_RUN_STATUSES IRST ON IRSV.IRST_ID = IRST.IRST_ID
INNER JOIN IIL_RUN_TYPES IRTY ON ILRN.IRTY_ID = IRTY.IRTY_ID
INNER JOIN PRODUCTS PDCT ON ILRN.PDCT_ID = PDCT.PDCT_ID
INNER JOIN USERS UPDATE_USER ON ILRN.UPDATE_USER_ID = UPDATE_USER.USER_ID
WHERE ILRS.ILRS_ID = :B1
ORDER BY ILRN.ILRN_ID
答案 0 :(得分:2)
我认为你不能称之为“应用程序问题”。您可能需要说服DBA这是一个数据库问题,这样他就可以与Oracle支持人员交谈,或者至少在Metalink上查找它。当你开始谈论IIS,.NET等时,你可能已经吓坏了他。看看你是否只能在SQL * Plus中重现错误,那应引起他的注意。
至于实际解决问题,您可能需要修补,升级或找到某种方法来避免这个问题。尝试以一些微不足道的方式重写您的查询,它可能会工作。我通常最终解决这些问题而不是实际解决它们。
答案 1 :(得分:1)
我们能够使用SQL Developer重现相同的内容,因此发现了问题。
... INNER JOIN IIL_RUN_STA_VALS IRSV ON ILRN.ILRN_ID = IRSV.ILRN_ID 和CURSENT_TIMESTAMP在IRSV.TRANS_FROM和IRSV.TRANS_TO之间
这条线是罪魁祸首。两个日期列上有一个索引,TRANS_FROM和TRANS_TO。 我们掏了这个。它奏效了。
经过一番调查后,我们发现连接中的行数很少,但未使用索引,但随着连接中行数的增加,查询计划将发生变化,并且将使用违规索引。这解释了为什么这是一个间歇性的问题。
但显然一个次优的查询计划不应该导致Oracle死于ORA-07445 ...... 将使用Oracle支持进行登录。
答案 2 :(得分:0)
这样的错误可能是一个错误,Oracle支持人员可以查找代码并告诉您修复的位置。毫无疑问,无论如何你都应该跟上你的补丁。