OpenFrame HiDBの定義ユーティリティ
本章では、OpenFrame HiDBのデータベース定義ユーティリティについて説明します。
1. 概要
OpenFrame HiDBユーティリティ・プログラムは、OpenFrame HiDBエンジンと共に提供されるプログラムであり、JCLを通じてバッチジョブとして実行されるプログラムを指します。これらのユーティリティ・プログラムは、メインフレームで使用されるデータベース・ユーティリティ・プログラムとの互換性を維持するために提供されており、データベースの定義、再編成、初期化機能などを提供します。
以下は、OpenFrame HiDBデータベースを定義するユーティリティ・プログラムの一覧です。各ユーティリティの詳細については、該当の節で詳しく説明します。
プログラム名 | 説明 |
---|---|
OpenFrame HiDBのデータベース・スキーマをシステムに定義する際に使用します。 |
|
データベースに対する論理構造およびDCインターフェース・ブロックを定義します。 |
2. DBDGEN
DBDGENユーティリティは、OpenFrame HiDBデータベース・スキーマをシステムに定義する際に使用します。データベース・スキーマ情報は、データベース定義ブロック(DBDブロック)として作成され、システム・ライブラリに格納されます。
DBDGENユーティリティを使用すると、以下の種類のデータベースを定義できます。
-
HSAMデータベース(SHSAMを含む)
-
HISAMデータベース(SHISAMを含む)
-
HDAMデータベース
-
HIDAMデータベース
-
DEDBデータベース
-
INDEXデータベース
-
LOGICALデータベース
以下は、DBDGENC0プログラムとDFSILNK0プログラムを実行するDBDGENプロシージャの内容を示す例であり、次のように2つのステップで構成されています。
// PROC MBR=TEMPNAME,SOUT=A,RGN=4M,SYS2= //C EXEC PGM=DBDGENC0,REGION=&RGN,PARM='OBJECT,NODECK' //SYSLIB DD DSN=IMS.&SYS2MACLIB,DISP=SHR //SYSLIN DD UNIT=SYSDA,DISP=(,PASS), // SPACE=(80,(100,100),RLSE), // DCB=(BLKSIZE=80,RECFM=F,LRECL=80) //SYSPRINT DD SYSOUT=&SOUT,DCB=BLKSIZE=1089, // SPACE=(121,(300,300),RLSE,,ROUND) //SYSUT1 DD UNIT=SYSDA,DISP=(,DELETE), // SPACE=(CYL,(10,5)) //L EXEC PGM=DFSILNK0,PARM='XREF,LIST',COND=(0,LT,C) //SYSLIN DD DSN=*.C.SYSLIN,DISP=(OLD,DELETE) //SYSPRINT DD SYSOUT=&SOUT,DCB=BLKSIZE=1089, // SPACE=(121,(90,90),RLSE) //SYSLMOD DD DSN=IMS.&SYS2DBDLIB(&MBR),DISP=SHR //SYSUT1 DD UNIT=SYSDA,DISP=(,DELETE), // SPACE=(1024,(100,10),RLSE)
上記のDBDGENプロシージャの最初のステップであるCステップは、コンパイル・ステップであり、OpenFrame HiDBデータベース定義スクリプトをコンパイルするためにDBDGENC0ユーティリティを実行し、オブジェクト・モジュールを生成します。次のLステップは、DFSILNK0ユーティリティを実行するリンクエディット・ステップであり、前のコンパイル・ステップで生成されたオブジェクト・モジュールをシステム・ライブラリにコピーする処理を行います。
2.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSIN DD |
OpenFrame HiDBデータベース定義スクリプトを含む入力データセットを指定します。 |
SYSLMOD DD |
IMS.DBDLIBなどのDBDブロックを格納するためのPDSデータセットを指定します。 |
2.2. JCLパラメータ
以下は、JCLパラメータの項目です。
項目 | 説明 |
---|---|
MBR |
DBD名を指定します。この名前は、DBD文のNAMEパラメータに指定した名前と同じである必要があります。 |
SOUT |
SYSOUT DD文に割り当てられるクラスを指定します。(デフォルト値: 'A') |
SYS2 |
IMSシステム・データセットの2番目の修飾子(qualifier)を指定します。(例:SYS2='IMSA.') |
2.3. コマンドの設定
DBDGENでは、DBD制御文を使用してデータベース・スキーマを定義します。
以下は、DBD制御文についての説明です。
制御文 | 説明 |
---|---|
データベース全体に関する情報を指定します。 |
|
データベースを構成するデータセットの情報を指定します。 |
|
DEDBデータベースはAREA文を使用してデータセットの情報を指定します。 |
|
直前のDATASET文で定義されたデータセットに含まれるセグメント情報を指定します。 |
|
直前のSEGM文で定義されたセグメントの論理的な子セグメント情報を指定します。 |
|
直前のSEGM文で定義されたセグメントのフィールド情報を指定します。 |
|
二次索引関係でのセグメント検索フィールド情報を指定します。 |
|
データベース定義の終了を示します。 |
|
制御文の終了を示します。 |
|
任意指定であり、互換性のために存在します。 |
DBD制御文の記述順序は以下の規則に従います。
-
DBD文はDBD制御文の先頭に記述します。
-
DBD文の後には必ずDATASET文を記述します。(DEDBの場合は、DATASET文の代わりにAREA文を使用します)
-
DBD文に続いて1つ以上のDATASET文、SEGM文、FIELD文が存在する必要があります。ただし、論理データベース定義ではFIELD文、LCHILD文が存在してはなりません。
-
HDAM、HIDAM、HISAM(SHISAM)以外のデータベース定義では、XDFLD文を使用してはいけません。
-
FIELD文は、二次索引関係を指定するLCHILD文の後に記述してはいけません。
-
デフォルト索引を指定するLCHILD文、または論理関係を指定するLCHILD文は、二次索引関係を指定するLCHILD文の後に指定してはなりません。
以下は、DBD制御文の入力順序です。
DBD ...................... データベース定義の開始 DATASET ................ データセット情報 SEGM ................. セグメント情報 FIELD .............. フィールド情報 LCHILD ............. 論理子情報 XDFLD .............. セグメント検索フィールド SEGM FIELD SEGM FIELD DBDGEN ................... データベース定義の終了 END ...................... 制御文の終了
2.3.1. DBD文
記述しているデータベース名を指定し、データベース構造のDL/I情報を提供します。1つのデータベース定義スクリプトには1つのDBD文を使用できます。
-
HSAM(SHSAM)データベース
以下は、HSAM(SHSAM)データベースのDBD文です。
DBD NAME=dbname1,ACCESS={HSAM|SHSAM}
-
HISAM(SHISAM)データベース
以下は、HISAM(SHISAM)データベースのDBD文です。
DBD NAME=dbname1,ACCESS=({HISAM|SHISAM}[,VSAM]) [,PASSWD={NO|YES}] [,VERSION='n']
-
HDAMデータベース
以下は、HDAMデータベースのDBD文です。
DBD NAME=dbname1,ACCESS=(HDAM,{VSAM|OSAM}) ,RMNAME=(mod[,anch,rbn,bytes]) [,PASSWD={NO|YES}] [,VERSION='n']
-
HIDAMデータベース
以下は、HIDAMデータベースのDBD文です。
DBD NAME=dbname1,ACCESS=(HIDAM,{VSAM|OSAM}) [,PASSWD={NO|YES}] [,VERSION='n']
-
DEDBデータベース
以下は、DEDBデータベースのDBD文です。
DBD NAME=dbname1,ACCESS=DEDB ,RMNAME=(mod,...XCI) [,VERSION='n']
-
INDEXデータベース
以下は、INDEXデータベースのDBD文です。
DBD NAME=(dbname1[,dbname2]),ACCESS=(INDEX,VSAM) [,PASSWD={NO|YES}]
-
LOGICALデータベース
以下は、LOGICALデータベースのDBD文です。
DBD NAME=dbname1,ACCESS=LOGICAL
以下は、DBD文のパラメータについての説明です。
項目 | 説明 |
---|---|
NAME |
記述しているデータベースのDBD名を指定します。ただし、PSB名と異なる名前を使用する必要があります。 |
ACCESS |
データベースで使用されるDL/Iとデータセットのアクセス方式を指定します。 以下の方式を使用できます。
|
PASSWD |
VSAMパスワードとしてDBD名を使用するかどうかを指定します。(デフォルト値: NO) |
VERSION |
DBDを識別できる文字列を最大255文字まで指定できます。 |
RMNAME |
ACCESSパラメータ値としてHDAMまたはDEDBが指定された場合、データベースに格納されるデータを管理する情報を指定します。 この情報によってランダマイザー・モジュールの動作方式が決まります。 |
OpenFrame HiDBではVSAMパスワードを使用しません。 |
2.3.2. DATASET文
DATASET文はデータベース内のデータセット・グループを定義します。
-
HSAM(SHSAM)データベース
以下は、HSAM(SHSAM)データベースのためのDATASET文です。
DATASET DD1=ddname1,DD2=ddname2 [,BLOCK=(blkfact1,blkfact2)] [,RECORD=(reclen1,reclen2)]
-
HISAM(SHISAM)データベース
以下は、HISAM(SHISAM)データベースのためのDATASET文です。
DATASET DD1=ddname1,OVFLW=ddname3 [,BLOCK=(blkfact1,blkfact2)] [,SIZE=(size1,size2)] [,RECORD=(reclen1,reclen2)]
SHISAMデータベースはOVFLWを記述しません。
-
HDAM / HIDAMデータベース
以下は、HDAMまたはHIDAMデータベースのためのDATASET文です。
DATASET DD1=ddname1 [,BLOCK=size0] [,SIZE=(,size1)] [,SCAN=cyls] [,FRSPC=(fbff,fspf)] [,SEARCHA=0|1|2]
-
INDEXデータベース
以下は、INDEXデータベースのためのDATASET文です。
DATASET DD1=ddname1,OVFLW=ddname3 [,BLOCK=(blkfact1,blkfact2)] [,SIZE=(size1,size2)] [,RECORD=(reclen1,reclen2)]
-
LOGICALデータベース
以下は、LOGICALデータベースのDATASET文です。
DATASET LOGICAL
以下は、DATASET文のパラメータについての説明です。
項目 | 説明 |
---|---|
DD1 |
データセット・グループの最初のデータセットのDD名を指定します。 データベース・タイプによって次のような意味を持ちます。
|
DD2 |
HSAM(SHSAM)データベース・タイプの出力データセットのDD名を指定します。 |
OVFLW |
HISAMデータベースまたはINDEXデータベース・タイプのオーバーフロー・データセットのDD名を指定します。 |
BLOCK |
ブロック化因数(blocking factors)を指定します。詳細については下の表を参照してください。 |
RECORD |
オプション・パラメータであり、論理レコードのサイズを指定します。詳細については下の表を参照してください。 |
SIZE |
DBDGENプロシージャーでVSAM制御間隔のサイズを再定義するときに使用します。 |
SCAN |
セグメントを挿入する際、空きスペースを検索するためにスキャンされるデバイスのシリンダー数を指定します。OpenFrame HiDBでは構文のみチェックし、機能はサポートされません。 |
FRSPC |
HDAMまたはHIDAMデータベース・タイプで使用可能な空きスペースの量を指定します。 |
SEARCHA |
セグメントを挿入するとき、空きスペースを検索するアルゴリズム・タイプを指定します。OpenFrame/HiDBでは構文のみチェックし、機能はサポートされません。 |
LOGICAL |
LOGICALデータベースが定義されていることを示します。 |
以下は、前述のBLOCKとRECORDパラメータについての説明です。
-
HSAM(SHSAM)データベース
HSAM(SHSAM)は非ブロッキングI/Oを使用します。したがって、LRECLとBLKSIZEの値を同一に指定します。
パラメータ 説明 BLOCK
-
blkfact1:入力データセットのブロック化因数を指定します。(常に1に指定)
-
blkfact2:出力データセットのブロック化因数を指定します。(常に1に指定)
RECORD
-
reclen1:入力データセットのレコード・サイズを指定します。
-
reclen2:出力データセットのレコード・サイズを指定します。
-
-
HISAM(SHISAM)、INDEXデータベース
パラメータ 説明 BLOCK
-
blkfact1:デフォルト・データセットのブロック化因数を指定します。
-
blkfact2:オーバーフロー・データセットのブロック化因数を指定します。
RECORD
-
reclen1:デフォルト・データセットのレコード・サイズを指定します。
-
reclen2:オーバーフロー・データセットのレコード・サイズを指定します。
-
-
HDAM / HIDAMデータベース
パラメータ 説明 BLOCK
オーバーヘッドを除いたVSAM制御間隔サイズをsize0に指定します。VSAMデータセットのデフォルト・オーバーヘッドの値は5です。
RECORD
指定しても無視されます。
2.3.3. AREA文
DEDBデータベースは、AREA文を使用してデータを格納するデータセット領域を定義します。DEDBを定義するDBDGENスクリプトを作成する際、すべてのAREA文はDBD文と最初のSEGM文の間に位置させる必要があります。
以下は、DEDBデータベースのAREA文です。
AREA DD1=ddname1 [,DEVICE=nnnn] ,SIZE=size1 ,UOW=(number1,overflow1) ,ROOT=(number2,overflow2)
項目 | 説明 |
---|---|
DD1 |
定義されるエリアのDD名を指定します。 |
DEVICE |
物理的な記憶装置のデバイス・タイプを指定します。 指定しない場合のデフォルト値は3380です。 |
SIZE |
制御間隔のサイズを指定します。 512B、1KB、2KB、4KB、8KB、28KBを指定できます。 VSAMデータセットの制御間隔のサイズと同一に指定します。 |
UOW |
1つのUOW(Unit of Work)に使用される制御間隔の数を指定します。
|
ROOT |
DEDBエリアの属性を定義します。
|
2.3.4. SEGM文
SEGM文はデータベースのセグメントを定義します。特定のデータベース内でセグメントの階層と物理的な属性、および他のセグメントとの関係などを定義します。
-
HSAM(SHSAM)データベース
以下は、HSAM(SHSAM)データベースのSEGM文です。
SEGM NAME=segname1 ,PARENT=segname2 ,BYTES=max_bytes [,FREQ=frequency]
-
HISAM(SHISAM)データベース
以下は、HISAM(SHISAM)データベースのSEGM文です。
SEGM NAME=segname1 ,PARENT=(segname2[(lpsegname,[{VIRTUAL|PHYSICAL}],dbname1)]) ,BYTES=max_bytes[,min_bytes] [,FREQ=frequency] [,POINTER|PTR={LPARNT|CTR|PAIRED}] [,RULES=([{L|P|V}{L|P|V|B}{L|P|V}],[{LAST|FIRST|HERE}])]
-
HDAMまたはHIDAMデータベース
以下は、HDAMまたはHIDAMデータベースのSEGM文です。
SEGM NAME=segname1 ,PARENT=(segname2[,{SNGL|DBLE}][,(lpsegname,[{VIRTUAL|PHYSICAL}],dbname1)]) ,BYTES=max_bytes[,min_bytes] [,POINTER|PTR={HIER|HIERBWD|TWIN|TWINBWD|NOTWIN} ,{LTWIN|LTWINBWD},{LPARNT|CTR|PAIRED}] [,RULES=([{L|P|V}{L|P|V|B}{L|P|V}],[{LAST|FIRST|HERE}])]
-
DEDBデータベース
以下は、DEDBデータベースのSEGM文です。
SEGM NAME=segname1 ,PARENT=(segname2[,{SNGL|DBLE}]) ,BYTES=max_bytes,min_bytes,TYPE={DIR|SEQ} [,RULES={HERE|LAST|FIRST}]
-
INDEXデータベース
以下は、INDEXデータベースのSEGM文です。
SEGM NAME=segname1 [,PARENT=0] ,BYTES=max_bytes
以下は、SEGM文のパラメータについての説明です。
項目 | 説明 |
---|---|
NAME |
現在定義しているセグメント名を指定します。 |
PARENT |
現在定義しているセグメントの親セグメントを指定します。物理親セグメントと論理親セグメントを指定することができます。 |
BYTE[S] |
セグメントのデータ部のサイズを指定します。最大32760まで指定できます。
|
FREQ |
親セグメントの各インスタンスに存在する子セグメント・インスタンスの平均推定値を指定します。 |
POINTER |
現在定義しているセグメントのデータの先頭に格納されるポインターを指定します。このポインターは現在のセグメントを親セグメントまたは兄弟セグメントと関連付けます。 以下のポインター・タイプのいずれかの値を持つことができます。
|
RULES |
セグメントの追加(Insert)、削除(Delete)、変更(Replace)コマンドを実行する際の規則を指定します。
|
TYPE |
DEDBデータベースの従属セグメントのタイプを指定します。 以下の2つタイプのいずれかを指定できます。
|
SOURCE |
以下の2つの目的で使用されます。
|
2.3.5. LCHILD文
LCHILD文は、2つのセグメント間の論理関係、2つのセグメント間のHIDAM1次索引または二次索引を定義します。
-
HISAM(SHISAM)データベース
以下は、HISAM(SHISAM)データベースのLCHILD文です。
LCHILD NAME=(segname1,dbname) [,POINTER|PTR={DBLE|NONE|SYMB}] [,PAIR=segname2] [,RULES={LAST|FIRST|HERE}]
-
HDAMまたはHIDAMデータベース
以下は、HDAMまたはHIDAMデータベースのLCHILD文です。
LCHILD NAME=(segname1,dbname) [,POINTER|PTR={DBLE|NONE|INDX|SYMB}] [,PAIR=segname2] [,RULES={LAST|FIRST|HERE}]
-
INDEXデータベース
以下は、INDEXデータベースのLCHILD文です。
LCHILD NAME=(segname1,dbname) [,POINTER|PTR={SNGL|SYMB}] ,INDEX=fldname
以下は、LCHILD文のパラメータについての説明です。
項目 | 説明 |
---|---|
NAME |
segname1に論理子、索引ポインターまたは索引ターゲットの名前を指定します。dbnameには、segname1に指定したセグメントが定義されているデータベース名を指定します。 |
POINTER |
論理関係または索引関係で使用されるポインターを指定します。
|
PAIR |
双方向論理関係で物理的または仮想的なペア・セグメントを指定するために使用されます。 |
RULES |
論理関係における論理子兄弟間の挿入順序を指定します。
|
INDEX |
INDEXデータベースのLCHILD文で使用されます。 fldnameは、HIDAMの1次索引のルート・セグメントを指定するか、HIDAMの二次索引のXDFLDを示します。 |
2.3.6. FIELD文
FIELD文は、特定のセグメント内のフィールドを定義します。
-
HSAM(SHSAM)データベース
以下は、HSAM(SHSAM)データベースのFIELD文です。
FIELD NAME=(fldname1[,SEQ,{U|M}]) ,BYTES=bytes ,START=startpos [,TYPE={C|X|P}]
-
HISAM(SHISAM)、HDAM、HIDAMデータベース
以下は、HISAM(SHISAM)、HDAM、HIDAMデータベースのFIELD文です。
FIELD NAME={(fldname1[,SEQ,{U|M}])|systrelfldname} ,BYTES=bytes ,START=startpos [,TYPE={C|X|P}]
-
DEDBデータベース
以下は、DEDBデータベースのFIELD文です。
FIELD NAME=(fldname1[,SEQ,U]) ,BYTES=bytes ,START=startpos [,TYPE={C|X|P}]
-
INDEXデータベース
以下は、INDEXデータベースのFIELD文です。
FIELD NAME=(fldname1[,SEQ,{U|M}]) ,BYTES=bytes ,START=startpos [,TYPE={C|X|P}]
以下は、FIELD文のパラメータについての説明です。
項目 | 説明 |
---|---|
NAME |
特定のセグメント内で定義されるフィールド名を指定します。
|
BYTE[S] |
現在定義しているフィールド・サイズを指定します。 |
START |
現在定義しているフィールドの開始位置を指定します。 |
TYPE |
現在定義しているフィールドのデータ・タイプを指定します。 以下の値を指定できます。
|
2.3.7. XDFLD文
XDFLD文は、二次索引関係で使用される索引フィールドを定義します。
以下は、HISAM(SHISAM)、HDAMまたはHIDAMデータベースのXDFLD文です。
XDFLD NAME=fldname [,SEGMENT=segname] [,CONST=char] ,SRCH=list1 [,SUBSEQ=list2] [,DDATA=list3] [,NULLVAL=value1]
項目 | 説明 |
---|---|
NAME |
索引データ・フィールド名を指定します。 |
SEGMENT |
索引ソース・セグメント名を指定します。 |
SRCH |
索引ソース・セグメントのフィールド・リストを指定します。 |
SUBSEQ |
二次索引のサブシーケンス・フィールドを指定します。 |
DDATA |
二次索引の重複データ・フィールドを指定します。 |
OpenFrame HiDBでは、XDFLD文でCONSTとNULLVALパラメータはサポートされません。 |
2.4. 使用例
以下は、DBDGENプロシージャーを使用してHIDAMデータベースを定義するJCLの例です。
//DBDGEN JOB MSGLEVEL=1 // EXEC DBDGEN,MBR=SKILLINV //C.SYSIN DD * DBD NAME=SKILLINV,ACCESS=HIDAM DATASET DD1=SKLHIDAM,BLOCK=1648,SCAN=5 * SEGM NAME=SKILL,BYTES=31,PTR=T,PARENT=0 LCHILD NAME=(INDE,INDEXDB),PTR=INDX * FIELD NAME=(TYPE,SEQ,U),BYTES=21,START=1,TYPE=C FIELD NAME=SDCODE,BYTES=10,START=22,TYPE=C * SEGM NAME=NAME,BYTES=20,PTR=T,PARENT=((SKILL,SNGL)) FIELD NAME=(STDCLEVL,SEQ,U),BYTES=20,START=1,TYPE=C * SEGM NAME=EXPR,BYTES=20,PTR=T,PARENT=((NAME,SNGL)) FIELD NAME=PREVJOB,BYTES=10,START=1,TYPE=C FIELD NAME=CLASSIF,BYTES=10,START=11,TYPE=C * SEGM NAME=EDUC,BYTES=75,PTR=T,PARENT=((NAME,SNGL)) FIELD NAME=GRADLEVL,BYTES=10,START=1,TYPE=C FIELD NAME=SCHOOL,BYTES=65,START=11,TYPE=C * DBDGEN FINISH END /*
2.5. 戻りコード
以下は、DBDGENユーティリティの戻りコードです。
-
正常に実行された場合
戻りコード0を返します。
-
エラーが発生した場合
SYSPRINT DDにエラーメッセージを出力し、該当するエラーコードを返します。
コード 説明 12
回復不能エラーです。次のようなエラーがあります。
-
SYSLIN DDまたはSYSLMOD DDが指定されていない場合
-
SYSLIN DDまたはSYSLMOD DDのタイプが正しくない場合
-
SYSIN DD文の構文エラー
16
システム・エラーです。次のようなエラーがあります。
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
SYSLIN DDまたはSYSLMOD DDのオープン・エラー
-
SYSIN DDまたはSYSLIN DDの読み込みエラ
-
3. PSBGEN
PSBGENは、アプリケーション側から見たHiDBデータベースの論理構造、およびデータ・コミュニケーションとのインターフェース・ブロックを定義するために使用するユーティリティ・プログラムです。定義されたプログラム・アクセス仕様(Program Access Sepcification)ブロックはシステム・ライブラリに格納されます。
以下は、PSBGENC0とDFSILNK0を実行させるPSBGENプロシージャーの内容です。2つのステップで構成されています。
// PROC MBR=TEMPNAME,SOUT=A,RGN=4M,SYS2= //C EXEC PGM=PSBGENC0,REGION=&RGN,PARM='OBJECT,NODECK' //SYSLIB DD DSN=IMS.&SYS2MACLIB,DISP=SHR //SYSLIN DD UNIT=SYSDA,DISP=(,PASS), // SPACE=(80,(100,100),RLSE), // DCB=(BLKSIZE=80,RECFM=F,LRECL=80) //SYSPRINT DD SYSOUT=&SOUT,DCB=BLKSIZE=1089, // SPACE=(121,(300,300),RLSE,,ROUND) //SYSUT1 DD UNIT=SYSDA,DISP=(,DELETE), // SPACE=(CYL,(10,5)) //L EXEC PGM=DFSILNK0,PARM='XREF,LIST',COND=(0,LT,C) //SYSLIN DD DSN=*.C.SYSLIN,DISP=(OLD,DELETE) //SYSPRINT DD SYSOUT=&SOUT,DCB=BLKSIZE=1089, // SPACE=(121,(90,90),RLSE) //SYSLMOD DD DSN=IMS.&SYS2PSBLIB(&MBR),DISP=SHR //SYSUT1 DD UNIT=SYSDA,DISP=(,DELETE), // SPACE=(1024,(100,10),RLSE)
上記のPSBGENプロシージャーの第1ステップのCはコンパイル・ステップです。SYSINで入力されたPSB定義スクリプトをコンパイルするためにPSBGENC0を実行させ、オブジェクト・モジュールを作成します。第2ステップのLはリンク-編集(Link-Edit)ステップです。前のコンパイル・ステップで作成されたオブジェクト・モジュールをシステム・ライブラリにコピーします。
3.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSIN DD |
PSBコンパイラーを使用してコンパイルするためのPSBスクリプト入力データセットを指定します。 |
SYSLMOD DD |
IMS.PSBLIBなどのPSBブロックを格納するためのPDSを指定します。 |
3.2. JCLパラメータ
以下は、JCLのパラメータ項目です。
項目 | 説明 |
---|---|
MBR |
作成するPSB名を指定します。この名前は、PSBGEN文のPSBNAMEパラメータに指定した名前と同じである必要があります。 |
SOUT |
SYSOUT DD文に割り当てるクラスを指定します。(デフォルト値: 'A') |
SYS2 |
IMSシステム・データセットの第2レベルの修飾子を指定します。(例:SYS2='IMSA.') |
3.3. コマンドの設定
PSBGENでは、PSB制御文を使用してPSBブロックを作成します。
以下は、PSBGENを使用する際のPSB制御文の入力順序です。
PCB TYPE=TP .............. 論理端末のPCB情報 PCB TYPE=DB .............. データベースのPCB情報 SENSEG SENFLD SENFLD PCB TYPE=DB SENSEG SENSEG PSBGEN ................... PSBブロック定義の終了 END ...................... 制御文の終了
以下は、PSB制御文についての説明です。
制御文 | 説明 |
---|---|
現在の入力メッセージの送信元以外の宛先を指定します。(PSBGENを使用する場合) |
|
DL/IまたはFastPathデータベースのためのPCBを記述します。 |
|
アプリケーションが使用するデータベース・セグメントを宣言します。 |
|
SENSEGで指定されたセグメントでアプリケーションが使用するフィールドを指定します。 |
|
PSBブロック定義の終了を指定します。 |
|
制御文の終了を指定します。 |
3.3.1. 代替PCB文
現在の入力メッセージの送信元以外の宛先を指定します。(PSBGENを使用する場合)
以下は、代替PCB文の構文です。
PCB TYPE=TP [,LTERM|NAME=name] [,ALTRESP={NO|YES}] [,SAMETRM={NO|YES}] [,MODIFY={NO|YES}] [,EXPRESS={NO|YES}] [,PCBNAME=pcbname] [,LIST={YES|NO}]
項目 | 説明 |
---|---|
TYPE |
すべての代替PCBに必須のパラメータです。 |
LTERM |
メッセージが出力される論理端末名またはトランザクション・コードを指定します。 |
ALTRESP |
入出力PCBの代わりに代替PCBを使用できるかどうかを指定します。 |
SAMETRM |
論理端末が実際の物理端末に割り当てられているかどうかを指定します。 |
MODIFY |
アプリケーション内で代替PCBを変更できるかどうかを指定します。 |
EXPRESS |
アプリケーションが異常終了した際、代替PCBからのメッセージを宛先の端末に送信するのか、あるいは削除するのかを指定します。 |
PCBNAME |
PCBの名前を指定します。アセンブラー・ラベルに置き換えられます。 |
LIST |
アプリケーションが実行される際、入り口でアプリケーションに渡されるPCBリストにこのPCBを含めるかどうかを指定します。 |
3.3.2. データベースPCB文
DL/IまたはFastPathデータベースのためのPCBを記述します。
以下は、データベースPCB文の構文です。
PCB TYPE=DB ,DBDNAME|NAME=name [,PCBNAME=pcbname] [,PROCOPT=nnnn] [,SB={NO|COND}] ,KEYLEN=value [,POS={SINGLE|MULTIPLE}] [,PROCSEQ=index_dbname] [,VIEW=MSDB] [,LIST={YES|NO}]
項目 | 説明 |
---|---|
TYPE |
すべてのDL/IデータベースPCBに必須のパラメータです。 |
DBDNAME |
物理データベース名を指定します |
PCBNAME |
PCBの名前を指定します。アセンブラー・ラベルに置き換えられます。 |
PROCOPT |
PCB処理パラメータを指定します。 最大4つのオプションをアルファベット文字で指定できます。アルファベット文字の意味は次のとおりです。
|
SB |
順次バッファリングを使用するかどうかを指定します。未サポート機能です。 |
KEYLEN |
最大の連結キーの長さを指定します。(1~3825) |
POS |
論理データ構造の単一または複数の位置付けを指定します。 以下のような略字を使用できます。
|
PROCSEQ |
データベースにアクセスするための二次索引の名前を指定します。 |
VIEW |
MSDBコミット・ビューを指定するために使用します。未サポート機能です。 |
LIST |
アプリケーションが実行される際、入り口でアプリケーションに渡されるPCBリストにこのPCBを含めるかどうかを指定します。 |
複数の位置付けについての詳細は、IBMの『IMS アプリケーション・プログラミング: データベース・マネージャー』の「Using Multiple Processing」を参照してください。 |
3.3.3. SENSEG文
SENSEG文は、階層的に連結されたデータ・セグメントを定義します。センシティブ・セグメントを指定する際は、階層パス上にある上位レベルのすべてのセグメントがセンシティブ・セグメントである必要があります。
以下は、SENSEG文の構文です。
SENSEG NAME=name ,PARENT=name [,PROCOPT=nnnn] [,INDICES|SIENTRY=list1]
項目 | 説明 |
---|---|
NAME |
DBDの作成時にSEGM文で定義したセグメント名を指定します。 |
PARENT |
現在のセグメントの親セグメントを指定します。 |
PROCOPT |
関連付けられたアプリケーションが使用するセグメント処理パラメータを指定します。 特定のセグメントのみ読み込むか、変更できないようにセキュリティ処理を行うことができます。最大4文字以内で指定します。 このパラメータを指定しない場合のデフォルト値は、PCB文のPROCOPTの値に従います。
|
INDICES |
索引セグメントへの検索フィールドが含まれている二次索引を指定します。 |
3.3.4. SENFLD文
SENSEG文と一緒に使用されます。アプリケーションで使用できるフィールドを指定します。ただし、SENFLD文を指定すると、そのセグメントに対してはDLET/REPL/ISRT呼び出しを発行できません。
以下は、SENFLD文の構文です。
SENFLD NAME=name, START=startpos [,REPLACE|REPL={YES|NO}]
項目 | 説明 |
---|---|
NAME |
DBDの作成時にFIELD文で定義したフィールド名を指定します |
START |
ユーザー入力域内でフィールドの開始位置を指定します。以下は、指定する際の注意事項です。
|
REPLACE |
REPLACE要求によって指定したフィールドを変更できるようにするかどうかを指定します。 |
3.3.5. PSBGEN文
PSBGEN文はアプリケーションの属性を指定します。
以下は、PSBGEN文の構文です。
PSBGEN PSBNAME=name [,LANG={COBOL|PL/I|ASSEM|PASCAL|blank}] [,MAXQ={0|nr}] [,CMPAT={NO|YES}] [,IOASIZE=value] [,SSASIZE=value] [,IOEROPN={n|(n,WTOR)}] [,OLIC={NO|YES}] [,GSROLBOK={NO|YES}] [,LOCKMAX={0|n}]
項目 | 説明 |
---|---|
PSBNAME |
現在定義しているPSBブロック名を指定します。 |
LANG |
メッセージ・プログラムまたはバッチ・プログラムが作成されたコンパイラー言語を指定します。 以下のような略字を使用できます。
|
MAXQ |
Qxコマンド・コードを含むデータベース呼び出しの最大数を指定します。 |
CMPAT |
BMPプログラムまたはメッセージ・プログラムでの互換性を示します。CMPAT=YESが指定された場合、該当のPSBの先頭に入出力PCBが含まれていると見なされます。 |
IOASIZE |
アプリケーションで使用される入出力域の最大サイズを指定します。 |
SSASIZE |
アプリケーションで使用されるSSAの最大長を指定します。 |
LOCKMAX |
アプリケーションが同時に取得できるロックの最大数を指定します。 |
OpenFrame HiDBでは、PSBGEN文のIOEROPN、OLIC、GSROLBOKパラメータはサポートされません。 |
3.4. 使用例
以下は、PSBGENプロシージャーを使用してPSBブロックを作成するJCL例です。
//PSBGEN JOB MSGLEVEL=1 // EXEC PSBGEN,MBR=APPLPGM1 //C.SYSIN DD * PCB TYPE=TP,NAME=OUTPUT1,PCBNAME=OUTPCB1 PCB TYPE=TP,NAME=OUTPUT2,PCBNAME=OUTPCB2 PCB TYPE=DB,DBDNAME=PARTMSTR,PROCOPT=A,KEYLEN=100 SENSEG NAME=PARTMAST,PARENT=0,PROCOPT=A SENSEG NAME=CPWS,PARNET=PARTMAST,PROCOPT=A SENSEG NAME=POLN,PARENT=PARTMAST,PROCOPT=A SENSEG NAME=OPERTON,PARENT=PARTMAST,PROCOPT=A SENSEG NAME=INVSTAT,PARENT=OPERTON,PROCOPT=A SENSEG NAME=OPERSGMT,PARENT=OPERTON PSBGEN LANG=COBOL,PSBNAME=APPLPGM1 END /*
3.5. 戻りコード
以下は、PSBGENユーティリティの戻りコードです。
-
正常に実行された場合
戻りコード0を返します。
-
エラーが発生した場合
SYSPRINT DDにエラーメッセージを出力し、該当するエラーコードを返します。
コード 説明 12
回復不能エラーです。次のようなエラーがあります。
-
SYSLIN DDまたはSYSLMOD DDが指定されていない場合
-
SYSLIN DDまたはSYSLMOD DDのタイプが正しくない場合
-
SYSIN DDスクリプト文に文法エラーが発生した場合
16
システム・エラーです。次のようなエラーがあります。
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
SYSLIN DDまたはSYSLMOD DDのオープン・エラー
-
SYSIN DDまたはSYSLIN DDの読み込みエラー
-