DBAtlas · Атлас эксплуатации баз данных

ORA-04061: existing state of package/procedure has been invalidated

Oracle

Что это значит?

Существующее состояние вызванного объекта PL/SQL (пакета, процедуры, функции) стало недействительным, так как изменился объект, от которого он зависит. Это вариант потери состояния, сопровождаемый ORA-04068; состояние пакета, хранимое сеансом, больше недействительно.

Почему возникает?

Пока сеанс использовал пакет, к этому пакету или его зависимостям был применён DDL (изменение структуры таблицы, перекомпиляция, изменение привилегий). В результате существующее состояние пакета в сеансе стало недействительным. Встречается в средах с частыми развёртываниями, когда изменения схемы вносятся при работающем приложении.

Как исправить

Тот же вызов обычно успешен со второй попытки (так как состояние сброшено); перехватывайте эту ошибку в приложении и безопасно повторяйте. Вносите изменения схемы при низком трафике приложения/в окно обслуживания. Массово компилируйте недействительные объекты: EXEC DBMS_UTILITY.COMPILE_SCHEMA('APP_SCHEMA'); Проекты, минимизирующие состояние пакетов (глобальные переменные), уменьшают этот эффект.

Открыть в DBAtlas →

Ещё по этой СУБД