REBIND PACKAGE サブコマンド(DSN)
DSN サブコマンド REBIND PACKAGE は、パッケージに影響を与える変更を行ったが、プログラム内の SQL ステートメントを変更していない場合に、アプリケーション・パッケージを再バインドします。
例えば、以下のアクティビティーを完了した後、REBIND PACKAGE を使用できます。
- Db2 の新しいリリースに移行する
- Db2 への保守の適用
- 許可を変更する
- パッケージ内のステートメントが使用できる新規索引を作成する
- RUNSTATS ユーティリティーを使用して、または別のユーティリティーで STATISTICS キーワードを使用して統計を収集する
このコマンドは、高度なトリガー用にパッケージを再設定するために使用できます。 ただし、 機能レベル500 以上 のアクティベーション前に作成されたトリガー、または基本トリガーでREBIND PACKAGEコマンドを発行すると、エラーが発生します。
高度なトリガーのトリガーパッケージについては、以下の活動に対してREBIND PACKAGEを使用できます。

- 新規索引を作成した後、または RUNSTATS ユーティリティーを使用した後に、トリガー内の SQL ステートメントを再最適化する
- パッケージの作成時に使用されたデフォルトのバインド・オプションの一部を変更する
- トリガーが依存していたオブジェクトがドロップされたためにトリガー・パッケージに無効のマークが付けられた後で、トリガー・パッケージを有効にする

REBIND PACKAGE を使用して、既存の REST サービスのデフォルトの REST サービス・バージョンを変更できます。
- SQL ステートメントを変更する場合
- プログラムを再コンパイルする場合
- 前に SQLERROR(CONTINUE) オプションを指定して BIND PACKAGE を実行した
REBIND PACKAGE(*) コマンドを発行する場合、影響を受けるトリガー・パッケージは、発行者が再バインドを許可されている拡張トリガーのもののみです。

パッケージコピーの段階的導入 REBIND PACKAGE
FL 505REBIND PACKAGEコマンドは、既存の現在のコピーをフェーズアウト・コピーとして保持したまま、パッケージの新しい現在のコピーを作成する場合があります。 これは 再バインド・フェーズインと呼ばれます。 既存のパッケージのコピーは複数存在する場合がありますが、現行コピーは 1 つしか存在しません。 1 つのオリジナル・コピー、1 つの前のコピー、および複数のフェーズアウト・コピーが存在する場合があります。
コピー ID が 0 (または non-0) の現行コピーは、カタログ表 SYSPACKAGE に保管されています。 前のコピーと元のコピーはそれぞれコピー ID 1 と 2 で、SYSPACKCOPY 表にあります。 すべてのフェーズアウト・コピーは、1 および 2 以外のコピー ID で、SYSPACKCOPY でも見つけることができます。
スレッドが実行するパッケージ・コピーは、パッケージ・アカウンティング・トレース・レコードにあります。 そのコピーは、現行のものでも、段階的に廃止されたものでもよい。 Db2 REBIND PACKAGEコマンドのその後の実行時に、段階的に廃止されたコピーを削除する可能性があります。 フェーズアウト・コピーを実行するスレッドを静止してから、パッケージを再バインドして、フェーズアウト・コピーによって生じるストレージを削減することができます。
- APREUSE(NONE) PLANMGMT(EXTENDED)
- APREUSE(WARN) PLANMGMT(EXTENDED) APREUSESOURCE(CURRENT)
- APREUSE(ERROR) PLANMGMT(EXTENDED) APREUSESOURCE(CURRENT)
PLANMGMT(EXTENDED)オプションの使用を妨げるようなバインドオプションの変更も指定するコマンドでは、リバインドフェーズインはサポートされない。 詳しくは PLANMGMTバインドオプションを参照のこと。
パッケージは、トリガーやSQLルーチン(プロシージャやユーザー定義関数など)のために生成されたパッケージであってはなりません。
Db2 は、IRLMRWT サブシステム・パラメーターで指定された期間待機してから、再バインド・フェーズイン操作のパッケージ・コピーを作成します。
詳細については、 「パッケージの再バインドの段階的導入」 を参照してください。

環境 REBIND PACKAGE
REBIND PACKAGE は DB2I 経由で使用したり、フォアグラウンドや バックグラウンドで実行中の DSN セッションから REBIND PACKAGE サブコマンド を入力することができます。
データ共有範囲 :グループ
承認 REBIND PACKAGE
パッケージ所有者は、エラー・メッセージを返さずにパッケージを作成するために、REBIND PACKAGE のパッケージに組み込まれているすべての SQL ステートメントを実行する許可を持っている必要があります。 VALIDATE(BIND)の場合、 Db2 はバインド時に認証を検証します。 VALIDATE (RUN) の場合、Db2 はバインド時に最初に許可を検査しますが、許可の検査が失敗した場合、Db2 は実行時に許可を再検査します。
EXPLAIN(ONLY) が指定された場合、EXPLAIN権限が必要です。
パッケージ所有者は、 ロール所有権があるトラステッド・コンテキストで REBIND PACKAGE を実行するためのロールでなければなりません。
以下の表に、指定されたオプションごとに、REBIND PACKAGE の実行に必要な許可を示します。
| オプション | REBIND PACKAGE を実行するのに必要な許可 |
|---|---|
| REBIND PACKAGE、所有権の変更なし (OWNER キーワードが指定されていないため)。 | この処理の許可 ID には、次のいずれかの権限が必要です。
|
| REBIND PACKAGE、所有権の変更なし、 ただし、OWNER キーワードに元の所有者が指定されている。 | この処理の許可 ID には、次のいずれかの権限が必要です。
|
| REBIND PACKAGE、所有権の変更あり。 (元の所有者ではない許可 ID が OWNER キーワード に指定されています。) | 新しい OWNER には次のいずれかの権限が必要です。
プロセスのいずれかの許可 ID またはロールに SYSADM 権限、SYSCTRL 権限、またはシステム DBADM 権限が付与されている場合、サブシステム・パラメーター SEPARATE_SECURITY が NO に設定されていると、OWNER authorization-id には任意の値を指定できます。 いずれかの許可 ID にその所有者から付与された BINDAGENT 特権がある場合、 authorization-id は 付与者を OWNER として指定することができます。 そうでない 場合、OWNER authorization-id はバインダーの 1 次または 2 次許可 ID の 1 つでなければなりません。 OWNER authorization-id を指定した場合、 Db2 はまずOWNER を、次にバインダーをチェックして必要なバインド特権があるかどうかを確認します。 バインダーに SYSADM、SYSCTRL、またはシステム DBADM 権限がない場合は、 新しいパッケージ、または既存のパッケージの新しいバージョンを コレクションに追加するために、OWNER の許可 ID またはロールに以下のいずれか 1 つが必要です。
|

構文 REBIND PACKAGE
- 1 NOREOPT(VARS) は REOPT(NONE) の同義語として指定できます
- 2 REOPT(VARS) は REOPT(ALWAYS) の同義語として指定できます
- 3 PATHDEFAULTキーワードとPATHキーワードは、同時に使用することはできません。 この両方のキーワードを同じ REBIND コマンドに指定しないでください。
- 4 「RESTSERVICEDEFAULT」オプションは、ローカルのRESTサービスパッケージのみに有効です。

説明文 REBIND PACKAGE
以下のオプションは、場所、コレクション、パッケージ名、バージョンを指定することで、再バインドするパッケージを特定します。 パッケージ名を指定する必要があります。また、バージョンIDを指定することもできます。
- location-name
パッケージが再バインドされ、パッケージの記述が存在するDBMSの場所。 場所の名前は、 SYSIBM.LOCATIONS カタログテーブルで定義されている必要があります。 この表が存在しないか、DBMS がその中にない場合は エラー・メッセージが出されます。 LOCATIONSカタログの表を参照してください。
デフォルトは、ローカル DBMS です。
- collection-id または *
バインドするパッケージを入れるコレクション、または再バインドする パッケージを既に含んでいるコレクションを指定します。 デフォルトはありません。
アスタリスク(
*)を使用すると、バインド権限を持つすべてのコレクションで、指定した パッケージIDを持つ すべてのローカルパッケージを再バインドすることができます。- パッケージID または *
カタログ表 SYSPACKAGE の列 NAME のリストに従い、再バインドする パッケージ名を指定します。 デフォルトはありません。 アスタリスク(
*)を使用すると、バインド権限を持つコレクションID 内のすべてのローカルパッケージを再バインドすることができます。package-id の値は、区切り記号のない識別子または区切り記号のある識別子とすることができます。 パッケージIDの区切り文字は二重引用符(")です。 パッケージID が区切られている場合、 Db2 は値を大文字に変換しません。
- バージョンID または *
- カタログ表 SYSPACKAGE の列 VERSION のリストに従い、再バインド
するパッケージのバージョンを指定します。
アスタリスク (*) を使用すれば、自分がバインド特権を有する collection-id の 指定された package-id のすべてのローカル・バージョンを再バインドできます。
()だけを使用すると、空文字列で識別されるパッケージのバージョンが再バインドされます。version-id を省略した場合、デフォルトは package-id を指定した方法によって異なります。 package-id に * を 使用すると、 version-id のデフォルトも * と なります。 package-id に明示的に値を指定した場合、 version-id の デフォルトは空ストリングのバージョンになります。
- *
- 該当する承認IDがBIND特権を持つすべてのローカル Db2 パッケージを再バインドします。
(*)を指定することは、パッケージ名を(*.*.(*))または(*.*)と指定することと同じです。 適用可能な許可 ID は以下のとおりです。- オプション OWNER を使用する場合には、OWNER の値
- オプション OWNER を使用しない場合には、 バインドを実行する処理の 1 次許可 ID
- パッケージの再結合の他のオプション
構文図の他のオプションの説明については、 パッケージ、プラン、サービスのBINDとREBINDオプションのトピックを参照してください。
使用上の注意事項 REBIND PACKAGE
- 複数のパッケージを再バインドする
- 複数のパッケージを再バインドする場合、 Db2 は次のパッケージを再バインドする前に、各パッケージの再バインドが成功したことを確認します。
パッケージ・リバインドの段階的導入
FL 505rebind-phase inを使うと、 Db2 、パッケージの実行と同時にリバインドできる。 再バンドル操作により、パッケージの新しいコピーが作成されます。 再バインド操作が終了すると、新しいスレッドで新しいパッケージ・コピーを即時に使用でき、既存のスレッドでは再バインドの前に使用されていたコピー (フェーズアウトされたコピー) を中断せずに使用することができます。 詳しくは、 パッケージのリバインドの段階的導入 を参照のこと。
- ネイティブSQLプロシージャのパッケージを再バインドする
ネイティブSQLプロシージャ・パッケージに対してREBIND PACKAGEコマンドを発行した場合、変更できるバインド・オプションはEXPLAIN (ただしEXPLAIN(ONLY)は受け付けない)、PLANMGMT、SWITCH、APRETAINDUP、APREUSE、APREUSESOURCE、およびAPCOMPAREのみです。
他のバインドオプションを変更しようとすると、コマンドは失敗し、メッセージ が返されます。 DSNT215I REBIND PACKAGE コマンドは、プロシージャーに含まれている SQL ステートメントのみを再バインドし、
プロシージャー定義内の制御ステートメントは再バインドしません。- SQL関数のパッケージを再バインドする
- SQL 関数のパッケージに対して REBIND PACKAGE コマンドを発行する場合、変更できるバインド・オプションは、EXPLAIN、PLANMGMT、および SWITCH のみです。 他のバインド・オプションを変更しようとすると、 コマンドは失敗してメッセージ DSNT215I が戻されます。 REBIND PACKAGE コマンドは、関数に含まれている SQL ステートメントのみを再バインドし、 関数定義内の制御ステートメントは再バインドしません。
トリガー用パッケージの再バインド
DBCS 文字は一般にトリガー名で許可されますが、DBCS 文字を含むトリガー名は REBIND TRIGGER PACKAGE 操作では使用できません。 
高度なトリガーのためのリバインド・パッケージ

アドバンスト・トリガのパッケージに対してREBIND PACKAGEコマンドを発行する場合、変更できるバインド・オプションはEXPLAIN (ただしEXPLAIN(ONLY)は受け付けられません )、FLAG、PLANMGMT、CONCENTRATESTMTのみです。 他のバインド・オプションを変更しようとすると、 コマンドは失敗してメッセージ DSNT215I が戻されます。
REBIND PACKAGE コマンドは、トリガーに含まれている SQL ステートメントのみを再バインドし、トリガー定義内の制御ステートメントは再バインドしません。

トリガーパッケージの制限
トリガー・パッケージは明示的に再バインドできますが、BIND PACKAGE サブコマンドを使用して明示的にバインドすることはできません。 トリガー・パッケージは、FREE PACKAGE サブコマンドまたは DROP PACKAGE ステートメントを使用して、明示的に解放することはできません。 トリガー・パッケージを削除するには、DROP TRIGGER ステートメントを使用してください。 トリガー・パッケージはコピーできず、ローカルでのみ再バインドできます。 トリガー・パッケージのリモートでの再バインドはできません。
- データ共有メンバーのトレース情報
- グループスコープを持つこのコマンドが Db2 のデータ共有メンバーで発行されると、他のすべてのアクティブなメンバーでも実行されます。 他のグループメンバーのIFICID 090トレースレコードでは、元のコマンドが発行されたメンバーからのトレースレコードに加えて、 016.TLPKN5F の相関IDからSYSOPR権限IDによって同じコマンドが発行されたことが示されます。 Db2 のデータ共有におけるコマンドの適用範囲を参照してください。
例) REBIND PACKAGE
REBIND PACKAGE (USIBMSTODB22.TEST.DSN8BC81.(MAY_VERSION),
USIBMSTODB22.PRODUCTION.DSN8BC81.(DEC_VERSION)) -
ENABLE (CICS,DLIBATCH) CICS (CON2) 