【PL/SQL】無効なオブジェクトの抽出と再コンパイル(リコンパイル)
オブジェクトに変更を加えたにもかかわらず、ビュー・パッケージ・プロシージャ・ファンクション等のオブジェクトが無効状態になっている事があります
これは、依存関係にあるオブジェクトの状態が変更された時に発生します
オブジェクトが無効状態になると、そのオブジェクトが次に参照される時に自動的に再コンパイルが発生します
自動再コンパイルは、ユーザから見るとかなりのレスポンス悪化に見えます
無効なオブジェクトの確認方法
下記のSQLを発行し確認します
無効なオブジェクトの「所有者」・「タイプ」・「名前」・「状態情報」を表示しています
所有者、タイプ、名前の昇順で並び替えをしています
SELECT OWNER, OBJECT_TYPE, OBJECT_NAME, STATUS
FROM ALL_OBJECTS
WHERE STATUS = 'INVALID'
ORDER BY OWNER, OBJECT_TYPE, OBJECT_NAME;
無効なオブジェクトの再コンパイル(リコンパイル)
SELECT文で無効状態のオブジェクトを確認し、下記のALTER文で再コンパイルします
ALTER PROCEDURE <プロシージャ名> COMPILE;
ALTER FUNCTION <ファンクション名> COMPILE;
ALTER PACKAGE <パッケージ名> COMPILE;
トリガーの無効状態の確認方法
トリガーオブジェクトの無効状態は下記のSELECT文で確認します
SELECT TABLE_NAME, TRIGGER_NAME, STATUS
FROM ALL_TRIGGERS
ORDER BY TABLE_NAME, TRIGGER_NAME;