ORA-04061: existing state of package/procedure has been invalidated(パッケージ/プロシージャの既存の状態が無効化された)
Oracle意味
呼び出された PL/SQL オブジェクト (パッケージ、プロシージャ、関数) の既存の状態が、依存するオブジェクトの変更により無効化された。ORA-04068 を伴う状態喪失の一種であり、セッションが保持するパッケージ状態はもはや有効ではない。
原因
セッションがパッケージを使用している間に、そのパッケージまたは依存オブジェクトに DDL が適用された (表構造の変更、再コンパイル、権限の変更)。その結果、セッションの既存のパッケージ状態が無効化された。アプリケーション稼働中にスキーマ変更を行う、デプロイ頻度の高い環境で見られる。
対処方法
通常、同じ呼出しは 2 回目で成功する (状態がリセットされているため)。アプリケーションでこのエラーを捕捉し、安全に再試行する。スキーマ変更はアプリケーションのトラフィックが少ない時間帯/メンテナンス時間帯に行う。無効なオブジェクトを一括でコンパイルする: EXEC DBMS_UTILITY.COMPILE_SCHEMA('APP_SCHEMA'); パッケージ状態 (グローバル変数) を最小限にする設計により、この影響を軽減できる。
同じデータベースの他の項目
- ORA-19804cannot reclaim N bytes disk space from M bytes limit(M バイトの上限から N バイトのディスク領域を再利用できない)
- ORA-00494enqueue held for too long by 'inst N, osid M'('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(最大プロセス数 (N) を超えた)
- ORA-01113file N needs media recovery(ファイル N にメディアリカバリが必要)