DBAtlas · データベース運用アトラス

ORA-04061: existing state of package/procedure has been invalidated(パッケージ/プロシージャの既存の状態が無効化された)

Oracle

意味

呼び出された PL/SQL オブジェクト (パッケージ、プロシージャ、関数) の既存の状態が、依存するオブジェクトの変更により無効化された。ORA-04068 を伴う状態喪失の一種であり、セッションが保持するパッケージ状態はもはや有効ではない。

原因

セッションがパッケージを使用している間に、そのパッケージまたは依存オブジェクトに DDL が適用された (表構造の変更、再コンパイル、権限の変更)。その結果、セッションの既存のパッケージ状態が無効化された。アプリケーション稼働中にスキーマ変更を行う、デプロイ頻度の高い環境で見られる。

対処方法

通常、同じ呼出しは 2 回目で成功する (状態がリセットされているため)。アプリケーションでこのエラーを捕捉し、安全に再試行する。スキーマ変更はアプリケーションのトラフィックが少ない時間帯/メンテナンス時間帯に行う。無効なオブジェクトを一括でコンパイルする: EXEC DBMS_UTILITY.COMPILE_SCHEMA('APP_SCHEMA'); パッケージ状態 (グローバル変数) を最小限にする設計により、この影響を軽減できる。

DBAtlas で開く →

同じデータベースの他の項目