外部ルーチンのライブラリーおよびクラス・ファイルに対する変更

既存の外部ルーチンのロジックに対する変更は、外部ルーチンをデプロイしており、それが実動データベース・システム環境で使用中になってから必要になる場合があります。 既存のルーチンに対する変更を行うことは可能ですが、更新のための明確なテークオーバーのポイント・イン・タイムを定義し、ルーチンの並行呼び出しが中断するリスクを最小限に抑えるように、注意深く行うことが重要です。

外部ルーチン・ライブラリーを更新する必要が生じたら、データベース・マネージャーの稼働中に現行ルーチンが使用しているのと同じターゲット・ファイル (例えば、sqllib/function/foo.a) にルーチンを再コンパイルおよび再リンクしないでください。 ルーチンの現在の呼び出しがルーチン・プロセスのキャッシュ・バージョンにアクセスする場合、 基本ライブラリーが置き換えられていると、ルーチンの呼び出しは失敗することがあります。 データベース・マネージャーの停止と再始動の過程を経ないでルーチンの本体を変更する必要が生じた場合、以下のステップを行ってください。

  1. 別のライブラリーまたはクラス・ファイル名を使用して、新規の外部ルーチン・ライブラリーを作成します。

  2. それが組み込み SQL ルーチンである場合、BIND コマンドを使用してルーチン・パッケージをデータベースにバインドします。

  3. ALTER ROUTINE ステートメントを使用してルーチン定義を変更し、EXTERNAL NAME 節が更新されたルーチン・ライブラリーまたはクラスを参照できるようにします。 更新されるルーチン本体が、複数のデータベースにカタログされたルーチンによって使用される場合には、 このセクションで指示されたアクションを、関係する各データベースについて実行しなければなりません。

  4. JAR ファイルに組み込まれている Java™ ルーチンを更新するには、CALL SQLJ.REFRESH_CLASSES() ステートメントは、データベース・マネージャーに新規クラスのロードを強制します。 CALL SQLJ.REFRESH_CLASSES() ステートメントでは、 データベース・マネージャー は以前のバージョンのクラスを引き続き使用します。 データベース・マネージャーは、COMMIT または ROLLBACK が生じると、クラスをリフレッシュします。

ルーチン定義が更新されたら、ルーチンの後続の呼び出しはすべて、新規の外部ルーチン・ライブラリーまたはクラスをロードして実行します。