2012年11月20日火曜日

スキーマ・オブジェクトの依存性

依存オブジェクトと参照オブジェクトについては良く言われている。
昔の時代は、依存性が正しい形であっても、実行時エラーで落ちるような時代があった認識している。(昔からオラクルを触っているメンバーは、皆そう言う人が多い。)
 しかし、今のマニュアルを参照する限り、実行時もしくは参照時に検証、再コンパイル行うの、問題がないと記述されている。但し、その影響として、以下2点があると書かれている。

1. 無効になったオブジェクトが多数ある場合は、初期実行時の待機時間が長時間になる可能性がある。 (但し、逆を言えば、依存性を見つつ、再コンパイルしているということ、と理解している。)
2. 無効になったオブジェクトを別セッションで同時に実行していた場合、以下のORAエラーが発生する。
  ORA-04061 -- stringの既存状態は無効になりました。
      原因: プロシージャが変更または削除されたため、無効になった既存状態またはストアド・プロ
              シージャと矛盾が発生した既存状態を使用して、ストアド・プロシージャの実行を再開しよ
              うとしました。
      処置: 再試行してください。このエラーでは、すべてのパッケージの既存状態に再初期化が
              必要です。
  ORA-04064 --- 実行されませんでした。stringは無効になりました  
      原因: 無効になったストアド・プロシージャを実行しようとしました。 
      処置: 再コンパイルしてください。
  ORA-04065 ---実行されませんでした。stringを変更または削除しています
     原因: 変更または削除されたストアド・プロシージャを実行しようとしたため、コール元プロシー
              ジャからのコールができません。
      処置: その依存関係を再コンパイルしてください。
  ORA-04068 ---パッケージstringstringstringの既存状態は廃棄されました。  
      原因: ストアド・プロシージャを実行しようとして、4060から4067のいずれかのエラーが発生し
      した。  
      処置: アプリケーション状態を完全に再初期化してから、プロシージャを再試行してください。

上のマニュアルを信じる場合、間違ったオブジェクトをUpせず、アプリ処理を無風状態にしておけば、どんなにInvalidが増えても、時間をかければ自動的にValidになるということで、昔の時代の認識は、もう過去のものということになる。本当かな?

あと、コンパイル系の検証、再コンパイルは、DBMS_UTILITY(11gのリンク)UTL_RECOMP(11gのリンク)が有効。

0 件のコメント:

コメントを投稿