Первый вызов хранимой процедуры после успешной компиляции завершается неудачно.Oracle 10g - PullRequest
2 голосов
/ 02 ноября 2011

У меня есть установка Oracle 10G (Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod) и веб-приложение java, которое вызывает хранимые процедуры и функции в oracle через соединение JDBC.SP и функции являются частью пакета.При первом вызове SP или функции после успешной компиляции я получаю следующие ошибки:

(я заменил имя нашей схемы и имя пакета на "# имя-схемы #. # Имя-пакета# ")

ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "#schema-name#.#package-name#" has been invalidated
ORA-04065: not executed, altered or dropped package body "#schema-name#.#package-name#"
ORA-06508: PL/SQL: could not find program unit being called: "#schema-name#.#package-name#"
ORA-06512: at "#schema-name#.#package-name#", line 5393
ORA-06512: at line 1

В следующий раз, когда он вызывается, все идет так, как должно.Любые идеи о том, почему и как это предотвратить?

Ответы [ 2 ]

4 голосов
/ 02 ноября 2011

Это нормальное поведение для пакетов с состоянием, то есть с переменными тела.Когда пакет скомпилирован, необходимо сбросить существующее состояние, и все сеансы, которые использовали пакет до этого, получают ошибку ORA-04068 (кроме той, которая скомпилировала пакет).

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

Один из обходных путей - вызвать DBMS_SESSION.RESET_PACKAGE, который отбрасывает состояние всех пакетов текущего сеанса.Другой способ - проверить, можно ли избавиться от состояния сеанса, что несколько проблематично в сочетании с пулом соединений.

0 голосов
/ 02 ноября 2011

Я не думаю, что есть какой-то способ обойти это, не прерывая и не воссоздая ваш сеанс

Посмотрите на это

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