ORA-04061: existing state of package/procedure has been invalidated
OracleЧто это значит?
Существующее состояние вызванного объекта PL/SQL (пакета, процедуры, функции) стало недействительным, так как изменился объект, от которого он зависит. Это вариант потери состояния, сопровождаемый ORA-04068; состояние пакета, хранимое сеансом, больше недействительно.
Почему возникает?
Пока сеанс использовал пакет, к этому пакету или его зависимостям был применён DDL (изменение структуры таблицы, перекомпиляция, изменение привилегий). В результате существующее состояние пакета в сеансе стало недействительным. Встречается в средах с частыми развёртываниями, когда изменения схемы вносятся при работающем приложении.
Как исправить
Тот же вызов обычно успешен со второй попытки (так как состояние сброшено); перехватывайте эту ошибку в приложении и безопасно повторяйте. Вносите изменения схемы при низком трафике приложения/в окно обслуживания. Массово компилируйте недействительные объекты: EXEC DBMS_UTILITY.COMPILE_SCHEMA('APP_SCHEMA'); Проекты, минимизирующие состояние пакетов (глобальные переменные), уменьшают этот эффект.
Ещё по этой СУБД
- ORA-19804cannot reclaim N bytes disk space from M bytes limit
- ORA-00494enqueue held for too long by 'inst N, osid M'
- ORA-04021timeout occurred while waiting to lock object
- ORA-01466unable to read data - table definition has changed
- ORA-08176consistent read failure; rollback data not available
- ORA-00020maximum number of processes (N) exceeded
- ORA-01113file N needs media recovery