ORA-04065: не выполнена, изменена или удалена хранимая процедура - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть хранимая процедура в Oracle Enterprise 12c.Эта программа вызывает более 100 подпроцессов для усечения таблиц и повторной вставки (ETL).

Master Proc IS
BEGIN
  CHILD1;
  CHILD2;
  CHILD3;
   ETC...
END;

Этот процесс выполняется каждые 4 часа в соответствии с запросом.Проблема в том, что иногда мы получаем некоторые ошибки:

ORA-04065: не выполняется, изменено или удалено
ORA-04065: не выполнено, изменено или удалено хранимая процедура "child proc1"
ORA-06508: PL / SQL: не удалось найти вызываемый программный модуль: "OD

Но, похоже, это решается само собой при следующей загрузке, даже если я повторно выполню после получения ошибки, процедура завершается без каких-либоerror. Затем через некоторое время мы снова получаем ошибку с помощью случайной хранимой процедуры, сначала child1, затем child2, затем child1.

Есть идеи, как решить эту проблему или избежать ее?

Примечание: нетиспользуя пакеты. Просто автономные sp.

1 Ответ

0 голосов
/ 01 декабря 2018

Что-то делает недействительным объект PL / SQL (пакет, тип, процедуру, функцию) в цепочке вызовов, возможно, удаляя и воссоздавая таблицу, на которую он ссылается, что заставляет механизм времени выполнения перекомпилировать его при следующем вызове.Если у пакета есть состояние (глобальная переменная или курсор), оно будет потеряно при перекомпиляции, поэтому вы получите ошибку ORA-04068: existing state of packages has been discarded с ORA-04065 где-то в стеке.

Я не уверен, как вы получитедве ORA-04065 ошибки и нет ORA-04068, как я ожидал бы ORA-04068 наверху, например:

SQL> exec dbms_output.put_line(ora_04065_demo.this_creates_package_state)
BEGIN dbms_output.put_line(ora_04065_demo.this_creates_package_state); END;
*
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package "WILLIAM.ORA_04065_DEMO" has been invalidated
ORA-04065: not executed, altered or dropped package "WILLIAM.ORA_04065_DEMO"
ORA-06508: PL/SQL: could not find program unit being called: "WILLIAM.ORA_04065_DEMO"
ORA-06512: at line 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...