DB2 LUW で Micro Focus 実装の DSNRLI を使用する場合、次の制限事項と制約事項が適用されます。
- Micro Focus の DSNRLI 実装は、厳密には DB2 の拡張機能ではないため、メインフレーム バージョンで提供されている関数の一部は、この実装では提供されていません。実装されていない関数には、次が含まれます。
- SIGNON
- AUTH SIGNON
- CONTEXT SIGNON - ユーザー ID などの接続の詳細は、エンタープライズ サーバーの XA リソース定義に含まれます。データベースに対しては、直接呼び出しまたは SQL アプリケーション処理呼び出しは実行されないため、これらは演算なし呼び出しです。
- SET_ID
- SET_CLIENT_ID - CONTEXT SIGNON を参照
- FIND_DB2_SYSTEMS - 必要なシステムおよび XA リソースはエンタープライズ サーバーの構成で定義されているため、DB2 システムを検索する関数は必要ありません。
- (暗黙的な接続) - メインフレームでは、最初の EXEC SQL の呼び出しの前に IDENTIFY、SIGNON、CREATE THREAD シーケンスの呼び出しが行われない場合、DSNRLI が暗黙的な接続を実行します。本実装では、DSNRLI は EXEC SQL を認識しないため、暗黙的な接続は行われません。特定の XA リソースを作業単位に関連付けるには、アプリケーションが DSNRLI に対して明示的な呼び出しを実行する必要があります。
- DSNHLI, DSNHLR - SQL 呼び出しを実行するためのエントリ ポイントは使用されていません。アプリケーションが EXEC SQL 呼び出しを実行し、既存の SQL 機能を使用する必要があります。
- DSNWLI, DSNWLIR - Instrumentation Facility Interface (IFI) は DB2 LUW では使用できないため、IFI 呼び出しを実行するためのエントリ ポイントは使用されていません。
-
DB2 LUW の問題により、1 フェーズ コミット (1PC) プログラムが含まれるジョブが、DSNRLI を使用する 2 フェーズ コミット (2PC) プログラムが同じイニシエータで実行された後に実行されることはありません。つまり、IKJEFTxx で実行されるプログラム、または DSNALI を使用するプログラムは、同じイニシエータで 同じ DB2 スイッチ モジュールを使用する DSNRLI プログラムが実行済みの場合、失敗します。この問題の症状は、次のようなメッセージ シーケンスで現れます。
JCLCM0188I JOB01001 MFIAFN2 JOB STARTED
CASXO0001S XA Resource Manager initialization error. Resource DSN open failed, reason -00003
CASXO0016S DSN XA interface initialization failure
MVSXM0036S JOB01001 MFIAFN2 Database OPEN call failed "PROGRAM NAME"
ここで、MFIAFN2 は 'DSN SYSTEM(DSN)' を使用する IKJEFT01 ステップと、同じイニシエータで実行済みの DSNRLI および同じ XA リソース (DSN) が含まれるジョブです。
この問題を解決するには、次のいずれかを実行します。
- 1PC ジョブが、2PC ジョブと同じイニシエータを使用していないことを確認します。これには、別のクラスとしてジョブを実行します。例えば、1PC ジョブをクラス A、2PC ジョブをクラス B として実行し、1PC クラス ジョブと 2PC クラス ジョブに別々のイニシエータのセットを使用することができます。
- DSNRLI ジョブを実行した SEP が、ジョブの最後に再使用されるようにします。つまり、SEP をダーティとしてマークすることで、その SEP がクローズされ、新しく開始されるようにします。こうするには、環境変数 MFJ_DSNRLI_RESET=Y をリージョンの構成設定に設定します。
SEP のシャットダウンと再起動には、かなりのシステム リソースが使用されるため、可能であれば 1 つ目の選択肢を使用してください。また、2 つ目の選択肢は DB2 ジョブと、DSNRLI を使用するデータベース以外のジョブ (MQ Series など) を区別しないため、すべての場合で SEP が再使用されます。
同一のジョブ内に IKJEFT01 と DSNRLI が混在する場合、DSNRLI ステップの前に、すべての IKJEFT01 ステップを実行する必要があります。