3.4.5 一時ISAMファイル
一時ISAMファイルとは,索引順編成ファイル管理 ISAMによる索引順編成の一時ファイルである。キーを持つデータを処理する場合に,データの中間結果を一時的に格納するために利用する。
一時ISAMファイルはジョブ内で作成され,削除される暫定的なファイルである。ほかのジョブとの間で共用されることはない。このため,システム内で唯一になるように,システムによってユニークな名称が付けられる。
ジョブコントローラで作成する一時ISAMファイルは,主キーによるアクセスだけができる。
DD要素のTYPE属性にTEMPを指定した場合に作成される一時ファイルと同様に,ジョブ内のジョブステップ間で同一の一時ISAMファイル名を使用する場合,DISP属性にPASSパラメータを指定することによって,後続ジョブステップへその一時ISAMファイルを受け渡すことができる。
一時ISAMファイルを使用する場合,設定ファイルのISAMLIB_MODEパラメータに使用するISAMライブラリを指定する。
- 〈この項の構成〉
(1) 一時ISAMファイルの指定方法
一時ISAMファイルを使用する場合,DD要素のTYPE属性でTEMPISAMを指定する。DSN属性の指定は任意である。
一時ISAMファイルの作成時には一時ISAMファイルの属性を定義するために,次に示す属性を指定する必要がある。
-
ISKEY
キー長,キー位置,およびキー属性
-
ISRECFM
レコード種別(順編成固定長または可変長)
-
ISRECL
レコード長(レコード種別が可変長の場合は,最大レコード長および最小レコード長)
なお,ISKEY,ISRECFM,およびISRECL属性の指定はDISP属性の値にNEWパラメータを指定した場合に有効である。DISP属性の値がSHRまたはOLDパラメータの場合に指定したときは,ISKEY,ISRECFM,およびISRECL属性の指定は無効となる。ただし,属性値のチェックは行われる。
DISP属性の値にMODパラメータを指定した場合は,先行ジョブステップでDD要素のDISP属性の第2パラメータにPASSを指定した一時ISAMファイルがあれば,ISKEY,ISRECFM,およびISRECL属性の指定が有効となる。一時ISAMファイルがなければ,ISKEY,ISRECFM,およびISRECL属性の指定は無効となる。ただし,属性値のチェックは行われる。
-
DD名がSYSUT2のファイルを,一時ISAMファイルとして使用する例
<DD NAME="SYSUT2" TYPE="TEMPISAM" DSN="WKDS" DISP="NEW,DELETE" ISRECFM="F" ISKEY="4,0,C" ISRECL="80" />
(2) 一時ISAMファイルを作成するディレクトリ
一時ISAMファイルを作成するディレクトリは,設定ファイルのTEMP_FILE_DIR_XML_USEパラメータの指定によって,次のとおりとなる。
(a) TEMP_FILE_DIR_XML_USEパラメータにYESを指定した場合
ジョブ定義XMLファイルのDD要素のDSN属性値に,絶対パス形式でディレクトリ名を指定していた場合,指定値の最後の"/"までを一時ISAMファイル作成ディレクトリとする。またDSN属性値の最後の"/"より後ろを一時ISAMファイル識別名とする。
-
ジョブ定義XMLファイルのDD要素の指定例
<DD NAME="DD1" TYPE="TEMPISAM" DSN="/home/user/tmp/workisam" DISP="NEW" ISRECFM="F" ISKEY="4,0,C" ISRECL="80" />
-
作成する一時ISAMファイル作成ディレクトリと一時ISAMファイル名
/home/user/tmp/ISAM_ジョブ識別子_ジョブ名_workisam_ユニークな名称
なお,DSN属性に相対パスを指定した場合およびDSN属性の指定がない場合は,設定ファイルのTEMP_FILE_DIRパラメータで指定したディレクトリに作成する。
(b) TEMP_FILE_DIR_XML_USEパラメータを省略またはNOを指定した場合
ジョブ定義XMLファイルのDD要素のDSN属性で指定したディレクトリ名は無視され,設定ファイルのTEMP_FILE_DIRパラメータで指定したディレクトリに作成する。
(3) 一時ISAMファイルを構成するファイル
ジョブコントローラで作成する一時ISAMファイルは,次に示すファイルから構成される。
-
キー定義ファイル(拡張子".DEF")
-
主キーファイル(拡張子".K01")
-
データファイル(拡張子".DAT")
(4) 一時ISAMファイルのファイル名
一時ISAMファイルのファイル名称は,システム内で唯一になるようにユニークな名称が付けられる。DD要素でのDSN属性の指定の有無によって,次に示すファイル名称が生成される。
-
DSN属性で一時ISAMファイル識別子の指定があった場合
ISAM_ジョブ識別子_ジョブ名_一時ISAMファイル識別子_ユニークな名称
-
DSN属性の指定がなかった場合
ISAM_ジョブ識別子_ジョブ名_ユニークな名称
一時ISAMファイルを構成するファイル名は,上記の生成したファイル名称に拡張子が付加される。一時ISAMファイルを構成するファイル名を次の表に示す。
構成ファイルの種類 |
構成ファイル名 |
---|---|
キー定義ファイル |
生成したファイル名称.DEF |
主キーファイル |
生成したファイル名称.K01 |
データファイル |
生成したファイル名称.DAT |
なお,ジョブコントローラが設定する環境変数「"CBL_"+DD要素名」,「"DDN_"+DD要素名」に格納されるパス名には,キー定義ファイル,主キーファイル,およびデータファイルの名称は設定されないで,拡張子を除いたファイル名が1つだけ設定される。
また,DSN属性を指定する場合は次に示す注意が必要である。
-
設定ファイルのTEMP_FILE_DIR_XML_USEパラメータでYESを指定した場合,DSN属性値はディレクトリ名として扱うため,ディレクトリ名として指定できない文字や,存在しないディレクトリ名を指定しないこと。指定したときは,ジョブステップ実行開始時のファイル割り当て処理でエラーとなる。
-
DSN属性値には,"/"以外のファイル名として指定できない文字は含めないこと。"/"は記述できるが,最後の"/"より後ろの文字列を一時ISAMファイル識別子と見なす。最後の"/"より後ろの文字列にファイル名として使用できない文字が含まれている場合,ジョブステップ実行開始時のファイル割り当て処理でエラーとなる。
-
生成されるファイル名の長さが,プラットフォームで決められた最大長を超えないこと。超えた場合,ジョブ定義XMLファイルの解析時にはエラーとならないで,ジョブステップ実行開始時のファイル割り当て処理でエラーとなる。生成されるファイル名の長さは,DSN属性値の長さと,JOB要素のNAME属性値の長さによって変わる。なお,生成されるファイル名の長さには拡張子の文字列(".DEF",".K01",".DAT")の長さ4文字分も考慮すること。
(5) 作成する一時ISAMファイルの定義内容
ジョブコントローラで作成する一時ISAMファイルでは,ISKEY,ISRECFM,およびISRECL属性で定義する情報以外は,次に示す表の内容で定義される。
一時ISAMファイルの定義情報 |
内容 |
---|---|
障害発生時のデータファイル内容保証 |
保証しない。 |
主キーのキー順序 |
昇順となる。 |
主キーの重複キー許可 |
許可しない。 |
主キーの重複キー順序保証 |
保証する。 |
主キーの圧縮レベル |
圧縮なし。 |
主キーのスペース文字許可 |
許可しない。 |
(6) 一時ISAMファイルを利用する場合の注意事項
-
DD要素のDISP属性値を指定しない場合,一時ISAMファイルを定義したジョブステップで新たにファイルを作成し,削除する(DISP属性の第1パラメータはNEW,第2,第3パラメータはDELETE)と見なされる。複数のジョブステップで使用する場合は,DISP属性の第2パラメータにPASSを指定する。
-
DD要素のDISP属性の第2パラメータでKEEPを指定した場合,PASSが仮定される。
-
DD要素のDISP属性の第1パラメータでRNWを指定した場合,NEWが仮定される。
-
DD要素のDISP属性の第1パラメータでNEWまたはRNWを指定した場合,同一ファイル名を指定したときは,ユニークな名称を付けて別ファイルを作成する。
-
DD要素のDISP属性の第1パラメータでOLDまたはSHRを指定して割り当てできる一時ISAMファイルは,先行ジョブステップでDD要素のDISP属性の第2パラメータにPASSを指定した一時ISAMファイルだけである。
-
DD要素のDISP属性の第1パラメータでMODを指定した場合,先行ジョブステップでDD要素のDISP属性の第2パラメータにPASSを指定した一時ISAMファイルがあればその一時ISAMファイルを割り当てるが,一時ISAMファイルがない場合は設定ファイルのDISPMOD_NOFILEパラメータの指定に従う。
-
一時ISAMファイルに対してファイルの連結指定(NAME属性が同一であるDD要素を連続して記述)をしないこと。
-
一時ISAMファイルに対するCOBOLプログラムの「OPEN OUTPUT」文の動作は,DD要素のDISP属性の指定内容に関係なく,追加書きとなる。レコードが格納されている一時ISAMファイルを再使用(レコードがない状態)したい場合は,次に示すどれかの対処をする必要がある。
-
COBOLプログラムで全レコードを削除する処理を追加する。
-
COBOLプログラムの実行時に次に示す環境変数のどちらかを指定する。
(i)環境変数CBLD_ファイル名にISAMDLを設定する。環境変数「CBLD_ファイル名」の「ファイル名」は,COBOLプログラムのSELECT句に指定したファイル名である。
(ii)環境変数CBLISAMDLにYESを指定する。
なお,上記のどちらかの環境変数を指定した場合,「OPEN OUTPUT」文の動作時に一時ISAMファイルが再作成(一時ISAMファイルを削除してから作成)される。
-
-
バッチジョブ実行システムでは,ノーマルファイル形式のISAMファイルを扱い,ラージファイル形式のISAMファイルは作成できない。COBOL2002のユーザアプリケーションに対して渡せる一時ISAMファイルもノーマルファイル形式となる。