INIT 呼び出し

初期設定 (INIT) 呼び出しを使用す ると、(各 DB PCB を検査することによって) アプリケーションはデッ ドロックの発生とデータ可用性に関する状況コードを受け取ることがで きます。

GSAM データベースの場合、初期設定 (INIT) 呼び出しを使用して、ラージ・フォーマット・データ・セットのレコードを検索するときにプログラムが 12 バイトのレコード検索引数 (RSA) を受け入れることができると IMS™ に伝えることができます。

フォーマット

構文図を読む構文図をスキップする
>>-INIT--+-i/o pcb-+--i/o area---------------------------------><
         '-aib-----'             

呼び出し名 DB/DC DBCTL DCCTL DB バッチ TM バッチ
INIT X X X X X

パラメーター

i/o pcb
呼び出しで使用する入出力 PCB を指定します。INIT は、入出力 PCB を参照しなければなりません。このパラメーターは入出力パラメーターです。
aib
呼び出しで使用する AIB を指定します。このパラメーターは入出力パラメーターです。AIB 内でこれらの フィールドを初期設定する必要があります。
AIBID
目印。この 8 バイトのフィールドには DFSAIBbb を入れる必要があります。
AIBLEN
AIB の長さ。このフィールドには、アプリケーション・プログラムが 入手した AIB の実際の長さを入れます。
AIBRSNM1
リソース名。この 8 バイトの左寄せフィールドには PCB 名 IOPCBbbb を指定しなければなりません。
AIBOALEN
入出力域の長さ。このフィールドには、呼び出しリストで指定された入出力域の長さを指定する必要があります。
i/o area
どの INIT 機能が要求されたのかを示す 1 つまたは 複数の文字ストリングが入っている、ユーザーのプログラム内の入出力 域を指定します。 このパラメーターは入力パラメーターです。

指定できる機能には、以下のものがあります。

  • DBQUERY
  • RSA12
  • STATUS GROUPA
  • STATUS GROUPB
  • 変更の始まりVERSION変更の終わり

使用法

この呼び出しは、共用環境の IMS バッチを含む任意のアプリケーション・プロ グラムで使用できます。

アプリケーション・プログラム内の機能を、入出力域に文字ストリングで指 定してください。

例えば、LLZZ 文字ストリングの形式 を使用してください。ここで、LL は文字ストリングの長さで、LLZZ 部 分の長さを含みます。ZZ は 2 進数のゼロでなければなりません。PL/I の場合、LL フィールドはフルワードとして定義する必要があります。 この値は、LLZZ 部分の長さを含む文字ストリングの長さから 2 を引い た値です。この入出力域が無効の場合には、AJ 状況コードが戻されま す。 以下の表には、アセンブラー言語 、COBOL、C 言語、Pascal、および PL/I で使用される場合の INIT の入出力域の例 を示しています。

データベース可用性の判別: INIT DBQUERY

INIT 呼び出しを、入出力域に DBQUERY 文字ストリングを指定して発行すると、 アプリケーション・プログラムで各 PCB のデータの使用可能性に関する情報を入手することができます。

変更の始まり言語非依存 AIB インターフェース、またはアセンブラー、COBOL、C、または Pascal のプログラミング言語の言語固有インターフェースを使用するアプリケーション・プログラムは、2 バイトの LL フィールドを使用して、入出力域の長さを指定します。以下の表は、LLZZ の長さフィールドおよび DBQUERY が指定された INIT 呼び出し入出力域の例を示しています。変更の終わり

表 1. AIB、ASMTDLI、CBLTDLI、CTDLI、および PASTDLI の各インターフェースの INIT DBQUERY 例
L L Z Z 文字ストリング
00 0B 00 00 DBQUERY
注: X'0B' の LL 値は、10 進数の 11 を 16 進数で表した値です。ZZ フィールドは 2 進数です。

以下の表は、PL/I で DBQUERY を指定した INIT 呼び出しの入出力域の例を示します。PLITDLI インターフェースでは、入出力域の長さに 4 バイトの LLLL フィールドを使用します。

表 2. INIT DBQUERY: PLITDLI の場合の入出力域の例
L L L L Z Z 文字ストリング
00 00 00 0B 00 00 DBQUERY
注: X'0B' の LL 値は、10 進数の 11 を 16 進数で表した値です。ZZ フィールドは 2 進数です。
LL または LLLL
文字ストリングの長さに、LL のための 2 バイトを加えた長さが 入る 2 バイト・フィールドです。PLITDLI インターフェースの場合には、4 バイトのフィールド LLLL を使用します。AIB インターフェ ース (AIBTDLI) を使用する場合の PL/I プログラムでは、2 バイト・ フィールドだけが必要となります。
ZZ
2 進数ゼロが入る 2 バイト・フィールドです。
各データベースの PCB について、以下のいずれかの状況コードが戻されます。
NA
この PCB を使用してアクセスできるデータベースのうちの少なくとも 1 つが 使用できない。この PCB を使用して呼び出しを行うと、おそらく、INIT STATUS GROUPA 呼び出しが発行されている場合は BA または BB の状況コードが返され、発行されていない場合は DFS3303I メッセージが出されて 3303 疑似異常終了になります。動的割り振りが失敗したためにデータベースが使用できない場合は例外です。この場合、呼び出しを発行すると、状況コード AI (オープン不能) が返されることになります。

DCCTL 環境では、状況コードは常に NA です。

NU
この PCB を使用して更新できるデータベースのうちの少なくとも 1 つが更新に 使用することができない。この PCB を使用して ISRTDLET、または REPL 呼び出しを発行すると、INIT STATUS GROUPA 呼び出しが出されていれば状況コード BA が、出されて いなければ DFS3303I メッセージが送られ、3303 の疑似異常終了が発生します。状況コード NU の原因となったデータベースは、削除処理の場合のみ必要になる場合があります。その場合、DLET 呼び出しは失敗しますが、ISRT 呼び出しおよび REPL 呼び出しは成功します。
bb
この PCB でアクセスできるデータは、PCB が許容するすべての機能に使用 可能です。DEDB および MSDB の状況コードは常に bb です。

データ可用性状況に加えて、ルート・セグメントのデータベース編成の名前が、PCB のセグメント名フィールドに返されます。セグメント名フィールドには データベース編成が入ります。DEDB、MSDB、GSAM、HDAM、PHDAM、HIDAM、 PHIDAM、HISAM、HSAM、INDEX、SHSAM、SHISAM のいずれかです。

DCCTL 環境の場合、データベース編成は UNKNOWN です。

重要: High Availability Large Database (HALDB) を扱っている場合、データ可用性に関する PSB スケジュール時のフィードバックは、HALDB マスターが使用可能かどうかを表すだけで、HALDB 区画が使用可能かどうかを示すものではないことに注意する必要があります。 ただし、HALDB 区画のデータが使用できないことを伝えるエラー設定値は、非 HALDB データベースのそれと同じであり、状況コード 'BA' か、疑似異常終了 U3303 となります。

自動 INIT DBQUERY

プログラムが最初にスケジューリングされたときには、 データベース PCB 内の状況コードは INIT DBQUERY 呼び出しが出されたときと同じよう に初期設定されます。したがって、アプリケーション・プログラムは、INIT 呼び出しを出 さなくてもデータベースの可用性を判別できます。

INIT 呼び出しに関するパフォーマンスの考慮事項 (IMS オンラインのみ)

DCCTL 環境の場合、状況コードは NA です。

パフォーマンスの低下を防ぐために、入出力 PCB に対する最初の GU 呼び出 しを出す前には INIT 呼び出しを出さないでくだ さい。INIT 呼び出しを最初に出すと、GU 呼び出しが効率よく処 理されなくなります。

異常終了を発生させずにデータ可用性状況を確認する

異常終了 U3303 を回避するには、最初に INIT STATUS GROUPx (x=A or B) を使用します。 IMS から、使用不能なデータベース (または HALDB 区画) の状況コードが通知されます。その後に、INIT DBQUERY を使用して各 DB PCB に状況コードを設定します。DB 呼び出しを試行する前に、すべての PCB で非ブランクの状況を検査できます。

データ可用性状況コードを使用可能にする: INIT STATUS GROUPA

以下の表は、アセンブラー言語、COBOL、 C 言語、Pascal での INIT 呼び出しの入出力域の例を示し ます。

表 3. ASMTDLI、CBLTDLI、CTDLI、および PASTDLI の場合の INIT 入出力域の例
L L Z Z 文字ストリング
00 11 00 00 STATUS GROUPA
注: X'11' の LL 値は、10 進数の 17 を 16 進数で表した値です。ZZ フィールドは 2 進数です。

以下の表は、PL/I での INIT 呼び出しの入出力域の例を示します。

表 4. PLITDLI の場合の INIT 入出力域の例
L L L L Z Z 文字ストリング
00 00 00 11 00 00 STATUS GROUPA
注: X'11' の LL 値は、10 進数の 17 を 16 進数で表した値です。ZZ フィールドは 2 進数です。
LL または LLLL
LL はハーフワード長フィールドです。非 PLITDLI 呼び出しの場合、LLLL は PLITDLI 用のフルワード長フィールドです。
ZZ
2 進数ゼロが入る 2 バイト・フィールドです。

LLZZ データまたは LLLLZZ データの値は、常に (LLZZ または LLLLZZ のた めの) 4 バイトにデータ長を加えた値です。

推奨事項: 本書の読者は、データ可用性について理解している必要があります。

入出力域に文字ストリング STATUS GROUPA を指定して INIT 呼び出しを出すと、アプリケーション・プログラムは IMS に対してデータの非可用性に関する状況コードを受け取るための用 意ができていることを通知します。 これにより、IMS は、引き続いて出される呼び出しが使用不能データへ のアクセスを必要とする場合には、結果として生じる疑似異常終了では なく状況コードを戻します。IMS が使用不能データを検出したときに戻す状況コードは BA と BB で す。状況コード BA および BB はともに、アクセスする必要のあ るデータが使用不能であったために呼び出しを完了できなかったことを 表します。 DEDB は BA または BB 状況コードを受け取ることができます。

状況コード BA が戻されると、システムは、使用不能データを検出する 前に現行呼び出しで行われた更新だけをバックアウトします。 直前の呼び出しにより変更が行われている場合には、アプリケーション ・プログラムは、この変更内容をコミットするかしないかを決定しなけ ればなりません。 データベースは、失敗した呼び出しが出される前の状態に なります。呼び出されたのが REPL または DLET 呼び出しである場 合には、PCB 位置は変化しません。呼び出しが Get タイプまたは ISRT 呼び出しである場合には、PCB 位置は予測できません。

状況コード BB が戻されると、システムは、最後のコミット・ポイント 以降にプログラムが行ったすべてのデータベース更新をバックアウトし 、最後のコミット・ポイント以降に送られたすべての非緊急メッセージ を取り消します。 どの PCB でも、データベースの開始点が PCB 位置となります。

デッドロック発生状況コードを使用可能にする: INIT STATUS GROUPB

以下の表は、アセンブラー言語、COBOL、 C 言語、Pascal での INIT 呼び出しの入出力域の例を示し ます。

表 5. ASMTDLI、CBLTDLI、CTDLI、および PASTDLI の場合の INIT 入出力域の例
L L Z Z 文字ストリング
00 11 00 00 STATUS GROUPB
注: X'11' の LL 値は、10 進数の 17 を 16 進数で表した値です。ZZ フィールドは 2 進数です。

以下の表は、PL/I での INIT 呼び出しの入出力域の例を示します。

表 6. PLITDLI の場合の INIT 入出力域の例
L L L L Z Z 文字ストリング
00 00 00 11 00 00 STATUS GROUPB
注: X'11' の LL 値は、10 進数の 17 を 16 進数で表した値です。ZZ フィールドは 2 進数です。
LL または LLLL
LL はハーフワード長フィールドです。非 PLITDLI 呼び出しの場合、LLLL は PLITDLI 用のフルワード長フィールドです。
ZZ
2 進数ゼロが入る 2 バイト・フィールドです。

LLZZ データまたは LLLLZZ データの値は、常に (LLZZ または LLLLZZ のた めの) 4 バイトにデータ長を加えた値です。

入出力域に文字ストリング STATUS GROUPB を指定して INIT 呼び出し を出すと、アプリケーション・プログラムは IMS に対してデータの 非可用性およびデッドロック発生に関する状況コードを受け取るための用 意ができていることを通知します。データ非可用性に関する状況コード は、"データ可用性状況コードを使用可能にする: INIT STATUS GROUPA" で述べたとおり BA と BB です。

INITSTATUS GROUPB 呼び出しが出されていたときに バッチでデッドロックが発生すると、次のことが起こります。

  • データベースが変更されていない場合、BC 状況コードが戻されます。
  • データベースが変更されている場合、データ・ログが存在していて BKO=YES が指定されていると、BC 状況コードが戻されます。
  • データベースが変更されている場合、ディスク・ログが存在しない か、BKO=YES が指定されていないときには、777 疑似異常終了が発生し ます。

アプリケーション・プログラムがデッドロックの発生を検出すると、IMS は次のことを行います。

  • (GSAM および DB2® を除く) すべてのデータベース・リソースを最 後のコミット・ポイントまでバックアウトします。GSAM PCB は純バッチまたは BMP 環境用に定義することができます が、GSAM の変更はバックアウトされません。DB2 の場合にデータベー ス・リソースがバックアウトされるのは、IMS が同期点コーディネーターであるときだけです。

    純バッチ環境で INIT STATUS GROUPB を使用するときには、 DISKLOG および BACKOUT オプションを指定しなければなりません。

  • すべての出力メッセージを最後のコミット・ポイントにバックアウトします。
  • すべての入力メッセージを次のようにキューに入れなおします。
    環境
    処置
    MPP および BMP
    すべての入力メッセージがメッセージ・キューに戻されます。アプリケーション・プログラムは その入力メッセージを制御しなくなります。
    IFP
    すべての入力メッセージが IMS 高速機能 (IFP) 平衡グループ・キュー (BALGRP) に戻され、 BALGRP 上のその他の IFP 領域で使用可能になります。デッドロック状態になった IFP は、BALGRP で使用可能な次のトランザ クションまたはメッセージを受け取ります。
    DBCTL
    処置の対象は、DBCTL (例えば、データベース更新) によって 管理されるリソースに限られます。
  • データベース PCB に BC 状況コードを入れてプログラムに戻します。

ラージ・フォーマット・データ・セット用の GSAM データベースの判別: INIT RSA12

入出力域で文字ストリング "RSA12" を設定して INIT 呼び出しを実行すると、GSAM アプリケーション・プログラムは、ラージ・フォーマット・データ・セットのレコードを検索するときにプログラムが 12 バイトの RSA を受け入れることができると IMS に伝えます。次の表は、アセンブラー言語、COBOL、C 言語、および Pascal で RSA12 を指定した INIT 呼び出しの入出力域のサンプルを示しています。

表 7. INIT RAS12: ASMTDLI、CBLTDLI、CTDLI、および PASTDLI の場合の例
L L Z Z 文字ストリング
00 09 00 00 RSA12
注: X'09' の LL 値は 10 進数 9 の 16 進表記です。ZZ フィールドは 2 進数です。

以下の表は、PL/I で RSA12 を指定 した INIT 呼び出しの入出力域の例を示します。

表 8. INIT RSA12: PLITDLI の例
L L L L Z Z 文字ストリング
00 00 00 09 00 00 RSA12
注: X'09' の LL 値は 10 進数 9 の 16 進表記です。ZZ フィールドは 2 進数です。
LL または LLLL
入出力域の合計長さが入る 2 バイトまたは 4 バイトのフィールド。PL/I では、LLLL フィールドの長さは、実際には 4 バイト・フィールドであっても 2 バイトと見なされます。AIBTDLI インターフェースを使用する場合、レコードの長さは「LL + ZZ + 文字ストリング」の合計の長さに等しくなります。PLITDLI インターフェースの場合は、レコードの長さは「LLLL + ZZ + 文字ストリング」の合計長さに等しくなります。ここで LLLL は 2 バイトと見なされます。
ZZ
2 進数ゼロが入る 2 バイト・フィールドです。
変更の始まり

データベースのバージョン番号を INIT VERSION(dbname=version) で指定します

データベースのバージョン管理が可能な場合、アプリケーション・プログラムは「VERSION」関数を使用して、データベースのバージョン (PCB 上でそのアプリケーション・プログラム用に指定されているバージョン番号または IMS によって返されるデフォルトのバージョンとは異なるもの) を要求できます。 INIT VERSION 呼び出しで指定されるバージョン番号は、他のすべてのバージョン指定およびデフォルトに優先します。

データベースにアクセスするための DL/I より前に INIT VERSION 呼び出しが発行されない場合、アプリケーション・プログラムに返されるデータベースのバージョンは、PCB ステートメントの DBVER キーワードによって決定されます。DBVER キーワードが指定されない場合、IMS は、ACB ライブラリーでアクティブなデータベースのバージョン、またはデータベースのバージョン 0 を返します。これは、PSBGEN ステートメント内、または DFSDFxxx PROCLIBメンバーのデータベース・セクション内の DBLEVEL キーワードによって決定されます。

入出力域で、VERSION 関数は次の形式を使用して指定されます。
構文図を読む構文図をスキップする
            .-,--------------.     
            V                |     
>>-VERSION(---dbname=version-+-)-------------------------------><

各データベース名は英字を使用して指定され、指定可能な回数は 1 回のみです。 指定するのは物理データベースの名前のみです。 論理データベースの名前はサポートされていません。

各バージョンは 0 から 2147483647 までの数値として指定されます。指定される番号は、指名されているデータベースの DBD で定義され、IMS カタログに保管されているバージョン番号と一致している必要があります。

入出力域に必要なサイズは、入力の入出力域に指定されているデータベースの数に 20 を乗算して計算します。

例えば、次の表は、アセンブラー言語、COBOL、C 言語、および Pascal での INIT VERSION 呼び出しの入出力域の例を示しています。 次の表で、LL 値 X'3C' は、10 進数 60 の 16 進表記です。これは、3 つのデータベース名が入力に指定されている場合に、その出力を入出力域に保持するために必要な長さ (バイト単位) です。 ZZ フィールドは 2 進数です。

表 9. INIT VERSION: ASMTDLI、CBLTDLI、CTDLI、および PASTDLI での形式の例
L L Z Z 文字ストリング
00 3C 00 00 VERSION (DBa=1,DBb=2,DBc=3)

次の表は、PL/I の場合の、VERSION を指定した INIT 呼び出しの入出力域の例を示しています。この表で、LL 値 X'3C' は 10 進数 60 の 16 進表記です。 ZZ フィールドは 2 進数です。

表 10. INIT VERSION: PLITDLI での形式の例
L L L L Z Z 文字ストリング
00 00 00 3C 00 00 VERSION (DBa=1,DBb=2,DBc=3)
LL または LLLL
入出力域の合計長さが入る 2 バイトまたは 4 バイトのフィールド。PL/I では、LLLL フィールドの長さは、実際には 4 バイト・フィールドであっても 2 バイトと見なされます。AIBTDLI インターフェースを使用する場合、レコードの長さは「LL + ZZ + 文字ストリング」の合計の長さに等しくなります。PLITDLI インターフェースの場合、レコードの長さは「LLLL + ZZ + 出力に必要な長さ」の合計長さに等しくなります。ここで LLLL は 2 バイトと見なされます。
ZZ
2 進数ゼロが入る 2 バイト・フィールドです。
文字ストリング
入力での関数の指定。LL または LLLL に指定される長さは、出力に必要な長さ (すなわち、入力文字ストリングに指定されているデータベースごとに 20 バイトずつ) です。
変更の終わり

制約事項

CICS® 環境の機能シップの場合、ローカルおよびリモート CICS はともに DBCTL でなければなりません。

IMS V13 システム管理」で説明されているデッドロック発生についてよく理解しておく必要があります。