Oracle ORA-03113 и ORA-07445 ACCESS_VIOLATION - PullRequest
1 голос
/ 01 сентября 2010

Среда

  • Oracle 10g
  • Сервер Windows 2003
  • IIS 6
  • .NET 3.5
  • Клиент Oracle 10.2.0.1.0
  • ODAC 10.2.0.2.21
  • odp.net 2.102.2.20

  • Проверить соединение = true; минимальный размер пула = 0 в строке подключения

  • Все объекты подключения, команды и параметры odp.net закрываются / удаляются после использования.

Проблема:

  1. ORA-03113 возвращается на asp.net.
  2. ORA-07445 ACCESS_VIOLATION регистрируется на стороне базы данных.(см. ниже)
  3. Это ВСЕГДА один и тот же запрос выбора (в хранимой процедуре).
  4. Это НЕ тяжелый запрос.Вся таблица занимает всего 20 тыс. Строк.
  5. Остальная часть веб-приложения не затронута.Соединение оракула и запросы работают нормально.
  6. Память и потоки, используемые w3wp.exe, являются нормальными

Наше единственное решение - для администратора баз данных перераспределить таблицу на сервере БД.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

Ответы [ 3 ]

2 голосов
/ 01 сентября 2010

Я не думаю, что вы когда-нибудь сможете назвать что-то вроде этого "проблемой приложения". Вам, вероятно, нужно убедить администратора базы данных в том, что это проблема с базой данных, чтобы он мог поговорить со службой поддержки Oracle или, по крайней мере, посмотреть ее на Metalink или что-то в этом роде. Возможно, вы его напугали, когда начали говорить об IIS, .NET и т. Д. Посмотрите, сможете ли вы воспроизвести ошибку только в SQL * Plus, это должно привлечь его внимание.

Что касается фактического решения проблемы, вам, вероятно, придется либо исправить, обновить, либо найти какой-либо способ избежать этой проблемы. Попробуйте переписать ваш запрос каким-то тривиальным способом, и он может сработать. Я обычно заканчиваю работать над этими проблемами вместо того, чтобы фактически решать их.

1 голос
/ 01 сентября 2010

Мы смогли воспроизвести то же самое с помощью SQL Developer и обнаружили проблему.

... INNER JOIN IIL_RUN_STA_VALS IRSV ON ILRN.ILRN_ID = IRSV.ILRN_ID И CURRENT_TIMESTAMP МЕЖДУ IRSV.TRANS_FROM И IRSV.TRANS_TO

эта строка является виновником. Был индекс по двум столбцам даты, TRANS_FROM и TRANS_TO. Мы бросили это. Это сработало.

После небольшого исследования мы обнаружили, что при небольшом количестве строк в соединении индекс не использовался, но по мере увеличения числа строк в соединении план запроса изменялся и использовался индекс-нарушитель. Это объясняет, почему это была временная проблема.

Но очевидно, что неоптимальный план запросов не должен приводить к смерти Oracle с ORA-07445 ... Будет вход с поддержкой Oracle.

0 голосов
/ 11 ноября 2014

Такая ошибка, вероятно, является ошибкой, и служба поддержки Oracle может найти коды и сообщить вам, где находится исправление. Само собой разумеется, что вы все равно должны идти в ногу со своими патчами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...