データセットユーティリティ
本章では、データセットユーティリティを使用して様々なデータセット処理を行う方法について説明します。
1. 概要
以下は、データセットユーティリティの一覧です。各ユーティリティの説明は、各節の内容を参照してください。
ユーティリティ | 説明 |
---|---|
日本語ファイルを編集するユーティリティプログラムです。 |
|
比較条件により2つの順次データセット(SDS)または区分データセット(PDS)を比較した後、その結果を出力するユーティリティプログラムです。 |
|
テスト・データセットを作成するユーティリティプログラムです。 |
|
順次データセットまたはPDSのメンバーをコピーするユーティリティプログラムです。 |
|
順次データセットやPDSの全体または一部を、実際に出力する形式でデータを生成するユーティリティプログラムです。 |
|
1つ以上のPDSに対して、メンバーを全体または一部のみコピーまたはマージするユーティリティプログラムです。 |
|
PDSのデータセット情報とメンバーリスト、またはボリューム情報とボリュームに含まれるデータセットリストを提供するユーティリティプログラムです。 |
|
非VSAMデータセットをコマンドで指定したボリュームに移動またはコピーするユーティリティプログラムです。 |
|
非VSAMデータセットを管理するユーティリティプログラムです。 |
|
BACKUPおよびRESTOREコマンドを通じて、データセットやボリュームのバックアップおよびリストア機能を提供するユーティリティプログラムです。 |
|
VSAMおよび非VSAMデータセットとカタログ情報を作成・管理するユーティリティプログラムです。 |
2. JRQJAFE
日本語ファイルを編集するためのユーティリティです。
以下は、JRQJAFEの機能です。
-
日本語データを使いやすい形式でキー順データセット(KSDS)を作成します。
-
日本語データセットの内容を変更します。
-
日本語データを印刷します。
2.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSPRINT DD |
JRQJAFEメッセージが保存されるデータセットを指定します。 |
SYSIN DD |
JRQJAFEの制御文を入力するデータセットを定義します。 |
SYSLIST DD |
JRQJAFEの印刷データセットを定義します。 |
任意のDD |
JRQJAFEの日本語ファイルを定義します。 |
2.2. コマンドの設定
本節では、SYSIN DDで設定するJRQJAFEのコマンドについて説明します。
-
MODE
後続の制御文の日本語ファイルを事前に指定しておきます。MODE制御文の有効範囲は、MODE制御文とENDMODE制御文で囲まれた部分です。この範囲に存在する制御文のオペランドにはMODE制御文で指定した日本語ファイルの定義パラメータを重複して記述してはなりません。
以下は、MODEコマンドの構文です。
[label] MODE {IN(ddname) | OUT(ddname) | INOUT(ddname) | IN(ddname),OUT(ddname)}
項目 説明 IN
入力日本語データセットを定義します。
OUT
出力日本語データセットを定義します。
INOUT
入出力日本語データセットを定義します。
IN、OUT
入力日本語データセットと出力日本語データセットを定義します。
-
ENDMODE
MODE制御文の機能の有効範囲の終了を指示します。
以下は、ENDMODEコマンドの構文です。
ENDMODE
-
DEFINE
日本語ファイルを作成、更新する入力データ内で使用しているKISコード外字を定義します。
以下は、DEFINEコマンドの構文です。
[label] DEFINE KIS
項目 説明 DEFINE
現在は解析のみサポートします。
-
DEND
DEFINE制御文の機能の有効範囲の終了を指示します。
以下は、DENDコマンドの構文です。
[label] DEND
構文 説明 DEND
現在は解析のみサポートします。
-
CHGIN
入力データセットを制御データ入力データセット(SYSIN DD文で定義されたデータセット)から他のデータセットに変更します。
以下は、CHGINコマンドの構文です。
[label] CHGIN IN(ddname)
項目 説明 IN
新しく指定するデータセットを定義します。
-
ADD
日本語ファイルの作成を指示します。日本語ファイルを作成するためのデータは、この制御文の後に記述します。
以下は、ADDコマンドの構文です。
[label] ADD [OUT(ddname)], FIELD((number[,A][,L]) (number[,{A|B|K}][,{L|R}])] ...) [,{KLIST[({1|2})]|LIST|NOLIST}] [,{MSG | NOMSG}]
項目 説明 OUT
作成された日本語ファイルのデータセットを定義します。
MODE制御文にOUTオペランドが指定されている場合は、このオペランドを記述してはなりません。
FIELD
作成された日本語ファイルの1つのレコード内のフィールド構成を定義します。内側の括弧で囲まれた内容が、レコード内の1つのフィールドに対応しています。最初のフィールドはキーとして扱います。
-
number
対応するフィールドの文字数を指定します。このフィールドがK(日本語)フィールドの場合は1文字に対して2バイトを、A(英数字・カナ)フィールドであれば1文字に対して1バイトを占めます。
-
{A|B|K}
フィールドに入力できるデータの種類を指定します。
-
A:EBCDICコード(英数字・カナ))を入力することを示します。
-
B:バイナリ・データ(数値)を入力することを示します。
-
K:JEFコード(日本語)を入力することを示します。
パラメータが省略された場合は、Kが指定されたものと見なします。ただし、最初のフィールドはキーとして扱うため、Aフィールドである必要があります。(このパラメータが省略されてもAが指定されたものと見なします)。これらの属性を持つフィールドを、Aフィールド、Bフィールド、Kフィールドと呼びます。
-
-
{L|R}
フィールドにデータを入力するときの位置を指定します。
-
L:左寄せで入力することを示します。
-
R:右寄せで入力することを示します。
左寄せ(右寄せ)は、フィールドに入力できるデータを入力ファイルの左(右)から順に取り出して、出力ファイル・フィールドの左(右)に順に入力することを意味します。これらの属性を持つフィールドを左寄せフィールドといいます。このパラメータが省略された場合は、Lが指定されたものと見なします。
-
KLIST | LIST | NOLIST
作成された日本語ファイルの内容を印刷データセットに出力するかどうかを指定します。このオペランドが省略された場合は、NOLISTが指定されたものと見なします。
-
KLIST[({1|2})]:現在は解析のみサポートします。
-
LIST:通常のラインプリンターに出力することを指示します。(SYSLIST DDを参照します)
-
NOLIST:出力しないことを指示します。
MSG | NOMSG
メッセージ・データセットに出力する情報のレベルを指定します。このオペランドが省略された場合は、MSGが指定されたものと見なします。
各項目は、以下の情報のみ出力します。
-
MSG:入力されたADD制御文、通知メッセージ、入力データのリスト、この制御文で作成した日本語ファイルのレコード数を出力します。
-
NOMSG:入力されたADD制御文、通知メッセージを出力します。
-
-
FORMAT
JRQJAFEユーティリティでのデータの入力形式を定義します。
以下は、FORMATコマンドの構文です。
[label] FORMAT [RDLM('Delimiter')][, FDLM('Delimiter')] FIELDS((number[,A]), (number[,{A | KIS | JEF | N }])[, (number[,{A | KIS | JEF | N }])]...) SAME
項目 説明 RDLM
入力データをレコード単位で区切る際に使用する文字を指定します。
省略された場合は、レコード区切り文字としてセミコロン(;)が指定されたものと見なします。
FDLM
入力データをフィールド単位で区切る際に使用する文字を指定します。
省略された場合は、レコード区切り文字としてカンマ(,)が指定されたものと見なします。
FIELDS
定型入力形式でデータを入力することを指定します。内側の括弧で囲まれた内容が各フィールドの入力データの形式を示します。
文字数は、各フィールドに対する入力データの文字数を指定します。入力データの形式がA、N、KISの場合は1文字が1バイトであり、入力データの形式がJEFであれば1文字は2バイトです。
-
A:英数字コードでデータを入力することを指示します。
-
KIS:現在は解析のみサポートします。
-
JEF:JEFコード(直接漢字を指定)でデータを入力することを指示します。
-
N:日本語コードでデータを入力することを指示します。
A、KIS、JEF、Nの選択パラメータが省略された場合は、KISが指定されたものと見なします。最初のフィールドのデータはキーとして扱うため、このパラメータが省略された場合でも、Aが指定されたものと見なします。
SAME
入力形式と出力形式が同じである場合に指定します。作成または更新中の日本語ファイルのレコード形式と同じである必要があります。
-
-
UPDATE
日本語ファイルの更新を指示します。
以下は、UPDATEコマンドの構文です。
[label] UPDATE [{INOUT(ddname1)|IN(ddname2),OUT(ddname)}}] [,{KLIST[({1|2})] | LIST | NOLIST] [,{MSG | NOMSG | KMSG[({1|2})]}]
項目 説明 INOUT
更新対象の日本語ファイルを直接更新する場合、そのデータセットを定義します。更新対象の日本語ファイルがVSAMデータセットの場合のみ指定できます。
MODE制御文にINOUTオペランドが指定されている場合は、このオペランドを指定してはなりません。
IN,OUT
更新対象の日本語ファイルが入力用と出力用で分けられている場合、それぞれの日本語ファイルのデータセットを定義します。
-
ddname2:入力用の日本語ファイルを定義します。
-
ddname:出力用の日本語ファイルを定義します。
更新対象の日本語ファイルには順次データセットまたはVSAMデータセットも指定できますが、入力用と出力用のデータセット形式は同じである必要があります。ただし、更新対象の日本語ファイルが順次データセットの場合には、このオペランドのみ指定できます。また、MODE制御文にIN、OUTオペランドが指定されている場合は、このオペランドを指定してはなりません。
KLIST | LIST | NOLIST
更新された日本語ファイルの内容を印刷データセットに出力するかどうかを設定します。
省略された場合は、NOLISTが指定されたものと見なします。
-
KLIST[({1|2})]:解析のみサポートします。
-
LIST:通常のラインプリンターに出力することを指示します。
-
NOLIST:出力しないことを指示します。
MSG | NOMSG | KMSG
メッセージ・データセットに出力する情報のレベルを指定します。省略された場合は、MSGが指定されたものと見なします。KMSGは解析のみサポートします。
各項目は、以下の情報を出力します。
-
MSG:入力されたUPDATE制御文とその補助制御文のリスト、通知メッセージ、入力された更新データのリスト、挿入・追加されたレコードの情報、更新されたレコードの更新前と更新後の情報を出力します。
-
NOMSG:入力されたUPDATE制御文とその補助制御文のリスト、通知メッセージを出力します。
-
KMSG [({1|2})]:解析のみサポートします。
-
-
CHANGE|CHG
日本語ファイルのレコード内の特定フィールドを変更します。
以下は、CHANGEコマンドの構文です。
[label] {CHANGE|CHG} 'key' ,field-num ,location[*length] ,/charatorline/
項目 説明 key
変更するレコードのキーの値を文字列で指定します。
field-num
変更するフィールドのレコード内の相対位置を番号で指定します。
-
key:フィールドとして認識しません。
-
field-num:レコード内の一番左側にあるフィールドを1にして、右側に行くにつれ1ずつ増えていきます。
location[*length]
-
location:変更する文字列のフィールド内の位置を指定します。変更する文字列が2文字以上の場合は、左端に文字の位置を指定します。文字の位置は、フィールド内の左から右に数えて、フィールド内で一番左側にある文字の位置を1とします。文字の位置に0を指定した場合は、フィールド全体の変更を指示したことになります。
-
length:変更する文字列の長さを文字数で指定します。文字の長さを省略した場合は、移動させるデータ(文字列)の文字数になります。また、文字の長さに0を指定した場合は、指定された文字の直前に挿入されます。
/charactor line/
変更によって移動されたデータを文字列または空白で指定します。
-
-
PRINT
日本語ファイルの内容を印刷データセットに出力します。
以下は、PRINTコマンドの構文です。
[label] PRINT {'key1'|TOP}[:{'key2'|BOT}] [,IN(ddname)] [,SELFLD(fieldnum[,fieldnum]...)] [,LINE] [,{KCHAR[({1|2})] | CHAR}]
項目 説明 'key1'|TOP:'key2' | BOT
出力するレコードのキーの値を文字列で指定します。
key文字列1、key文字列2が指定された場合は、key文字列1からkey文字列2の間に存在するすべてのキー値を持つレコードが出力処理の対象となります。ただし、key文字列1≤key文字列2である必要があります。
TOPおよびBOTは、特別なレコードを示す場合に使用します。
-
TOP:日本語ファイル内の先頭レコードを意味します。
-
BOT:日本語ファイル内の最後レコードを意味します。
IN
内容を出力する日本語ファイルのデータセットを定義します。
MODE制御文にINオペランドが指定されている場合は、このオペランドを記述してはなりません。
SELFLD
現在は解析のみ処理します。
LINE
現在は解析のみ処理します。
KCHAR | CHAR
現在は解析のみ処理します。
-
2.3. 使用例
FORMATのFIELDS形式で入力されたJRQ.INPUTをADDのFIELDS形式でJRQ.OUTPUTデータセットに追加する例です。
//JRQADD JOB CLASS=A,MSGLEVEL=(1,1) //STEP01 EXEC PGM=JRQJAFE //INJRQ DD DISP=OLD,DSN=JRQ.INPUT //OUTJRQ DD DSN=JRQ.OUTPUT,DISP=(OLD,KEEP) //SYSOUT DD SYSOUT=* //SYSIN DD * ADD OUT(OUTJRQ),FIELDS((8),(12,K,R),(8,A),(6,A), - (1,A),(6,A),(6,A),(21,A)) FORMAT FIELDS((8),(24,A),(8),(6),(1),(6),(6),(21)) CHGIN IN(INJRQ) END /*
以下は、INPUT DDなしでADD文の後にINSTREAM DATA(入力ファイル)を追加する例です。
//JRQADD JOB CLASS=A,MSGLEVEL=(1,1) //STEP01 EXEC PGM=JRQJAFE //OUTJRQ DD DSN=JRQ.OUTPUT,DISP=(OLD,KEEP) //SYSOUT DD SYSOUT=* //SYSIN DD * ADD OUT(OUTJRQ),FIELDS((8),(12,K,R),(8,A),(6,A), - (6,A)) 'AAAAAAAA',K'注文集計表 ',' ','000000','000000'; 'AAAA0020',K'注文集計表 ','STEP00 ','000000','000000'; 'AAAA0030',K'注文集計表 ','STEP00 ','000000','000000'; 'AAAA0100',K'注文集計表 ','STEP00 ','000000','000000'; 'AAAA0101',K'注文集計表 ','STEP00 ','000000','000000'; '00000000',K'注文集計表 ',' ','000000','000000'; END /*
以下は、JRQ.OUTPUTデータセットのAAAA0020のキーを有するレコードを更新する例です。
//JRQUP JOB CLASS=A,MSGLEVEL=(1,1) //STEP01 EXEC PGM=JRQJAFE //OUTJRQ DD DSN=JRQ.OUTPUT,DISP=(OLD,KEEP) //JIMLIB DD DSN=JRQ.INPUT,DISP=SHR //SYSOUT DD SYSOUT=* //SYSIN DD * UPDATE INOUT(OUTJRQ) CHG 'AAAA0020',2,2,/FFF QWEQRW/ FORMAT FIELDS((8),(24,A),(8),(6)) END /*
以下は、データセットJRQ.INPUTでAAAAAAAAをキーとして有するレコードから、ABBB0100をキーとして有するレコードまでJRQ.PRIデータセットに出力する例です。
//JRQPRI JOB CLASS=A,MSGLEVEL=(1,1) //STEP01 EXEC PGM=JRQJAFE //INJRQ DD DSN=JRQ.INPUT,DISP=(OLD,KEEP) //SYSLIST DD DSN=JRQ.PRI,DISP=(NEW,CATLG),DCB=(RECFM=VB,LRECL=84) //SYSOUT DD SYSOUT=* //SYSIN DD * PRINT 'AAAAAAAA':'ABBB0100',IN=INJRQ END /*
2.4. 注意事項
以下は、JRQJAFEユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
バッチ・アプリケーションから受信したコードを返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力し、該当するエラーコードを返します。
JRQJAFEユーティリティで発生する可能性のあるエラーコードは以下のとおりです。
コード 説明 8
警告(Warning)エラーであり、以下の場合に該当します。
-
データセットが見つからない場合
12
回復不能(Unrecoverable)エラーであり、以下の場合に該当します。
-
データセット関連(pgmdd、open/close、read/write)エラー
-
SYSIN DDコマンドの文法エラー
-
その他のJRQJAFEユーティリティのエラー
16
システム関連のエラーであり、以下の場合に該当します。
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
3. JSDCOMPR
比較条件を使用して2つの順次データセット(SDS)または2つの区分データセット(PDS)を比較した後、その結果を出力するユーティリティです。
以下は、JSDCOMPRユーティリティの機能です。
-
2つのSDSを比較します。
-
2つのPDSを比較します。
-
PDSの特定のメンバーのみ選択して比較します。
-
比較の結果が一致しない場合、その結果を印刷します。
3.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSPRINT DD |
JSDCOMPRメッセージが保存されるデータセットを記述します。 |
SYSUT1 DD |
比較する順次データセットまたはPDSの入力データセットを記述します。 |
SYSUT2 DD |
比較する順次データセットまたはPDSの入力データセットを記述します。 |
SYSIN DD |
JSDCOMPRコマンドを記述します。 |
3.2. コマンドの設定
本節では、SYSIN DDで設定するJSDCOMPRのコマンドについて説明します。
-
COMPARE
比較するデータセットの編成、比較処理の中断に関する指示、比較するレコードやフィールドなどを指定する制御文です。
以下は、COMPAREコマンドの構文です。
[label] COMPARE [FIELD=(length[,starting-location])] [,LIMIT=n] [,MAXNAME=n] [,STRTAFT=n] [,STOPAFT=n] [,TYPORG={PS|PO}]
項目 説明 FIELD
レコード内のフィールドを比較する場合に設定します。設定を省略した場合は、レコード全体が比較されます。複数を指定した場合は、同時に複数のフィールドを比較します。
-
length : 比較するフィールドの長さを設定します。
-
starting-location : レコード内のフィールドが開始される位置を設定します。
LIMIT
レコードの比較中に、同じでない連続したレコード数が指定した値と一致した場合は、レコードの比較を中止します。複数メンバーを指定した場合は、次のメンバーの比較を開始します。
SDSまたは1つのメンバーを比較する場合は処理を終了します。
設定値は1~32760の10進数で設定します。この設定を省略した場合または0を入力した場合は、LIMIT=10が指定されたものと見なします。
MAXNAME
MEMBER制御文で指定するメンバー名の数以上の値を設定します。
設定値は1~32760の10進数で設定します。MEMBER制御文が存在しない場合は、指定しても無視します。
STRTAFT
順次データセットを比較する前に、スキップする論理レコードの数を設定します。
データセットのn+1桁目の論理レコードから比較されます。レコードの範囲は、32760を超過せず、超過した場合はエラーメッセージを出力します。
省略した場合は、最初のレコードから比較します。
STOPAFT
比較する順次データセットの論理レコード数を設定します。
順次データセットまたは区分データセットの各メンバーを比較するレコード数を設定します。
レコードの範囲は32760を超過せず、超過した場合はエラーメッセージを出力します。
省略した場合は、最後のレコードまで比較します。
TYPORG
入力データセットが順次データセット(PS)なのか、区分データセット(PO)なのかを記述します。
(デフォルト値: PS)
-
-
MEMBER
入力データセットがPDSの場合、比較するメンバーのメンバー名を指定する制御文です。
-
すべてのメンバーを比較する場合は省略できます。
-
すべてのメンバーを比較する際は、名前が同じである場合のみ比較します。
この制御文で指定したメンバー名の数以上を、COMPARE制御文のMAXNAMEパラメータで指定します。
[label] MEMBER NAME={member-name | (SYSUT1-member-name,SYSUT2-member-name)}[,...]
項目 説明 NAME
比較するメンバーのメンバー名を設定します。
-
member-name : SYSUT1とSYSUT2のメンバー名が同じである場合に設定します。
-
SYSUT1-member-name、SYSUT2-member-name : SYSUT1とSYSUT2のメンバー名が異なる場合に設定します。
-
-
LABELS
ユーザー・ラベルの処理時に記述します。解析のみサポートします。
-
EXITS
出口ルーチンを使用する場合に記述します。解析のみサポートします。
3.3. 使用例
以下は、フィールドを指定してデータを比較する例です。JSDCOMPR.TEST.INPUT01とJSDCOMPR.TEST.INPUT02の最初のフィールドから11桁目のフィールドと、15桁目のフィールドから長さが5のフィールドを比較します。
一致しない場合、その結果を出力します。
//TEST JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //JOBSTEP EXEC PGM=JSDCOMPR //SYSUT1 DD DSNAME=JSDCOMPR.TEST.INPUT01,DISP=(SHR) //SYSUT2 DD DSNAME=JSDCOMPR.TEST.INPUT02,DISP=(SHR) //SYSPRINT DD SYSOUT=A //SYSIN DD * COMPARE FIELD=11,FIELD(5,15),TYPORG=PS /*
以下は、レコードを指定してデータを比較する例です。JSDCOMPR.TEST.INPUT01とJSDCOMPR.TEST.INPUT02の2桁目のレコードまでの比較をスキップし、3桁目のレコードから7つのレコードを比較します。一致しない連続したレコードの数が3と一致した場合は比較を中止します。一致しない場合、その結果を出力します。
//TEST JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //JOBSTEP EXEC PGM=JSDCOMPR //SYSUT1 DD DSNAME=JSDCOMPR.TEST.INPUT01,DISP=(SHR) //SYSUT2 DD DSNAME=JSDCOMPR.TEST.INPUT02,DISP=(SHR) //SYSPRINT DD SYSOUT=A //SYSIN DD * COMPARE LIMIT=3,STRTAFT=2,STOPAFT=7,TYPORG=PS /*
以下は、メンバー名が同じメンバーを指定してデータを比較する例です。JSDCOMPR.TEST.INPUT01とJSDCOMPR.TEST.INPUT02のメンバーA、B、Cを比較します。一致しない場合、その結果を出力します。
//TEST JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //JOBSTEP EXEC PGM=JSDCOMPR //SYSUT1 DD DSNAME=JSDCOMPR.TEST.INPUT01,DISP=(SHR) //SYSUT2 DD DSNAME=JSDCOMPR.TEST.INPUT02,DISP=(SHR) //SYSPRINT DD SYSOUT=A //SYSIN DD * COMPARE MAXNAME=3,TYPORG=PO MEMBER NAME=A,B,C /*
以下は、メンバー名が異なるメンバーを指定してデータを比較する例です。JSDCOMPR.TEST.INPUT01のメンバーA、B、Dと、JSDCOMPR.TEST.INPUT02のメンバーA、C、Dを比較します。一致しない場合、その結果を出力します。
//TEST JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //JOBSTEP EXEC PGM=JSDCOMPR //SYSUT1 DD DSNAME=JSDCOMPR.TEST.INPUT01,DISP=(SHR) //SYSUT2 DD DSNAME=JSDCOMPR.TEST.INPUT02,DISP=(SHR) //SYSPRINT DD SYSOUT=A //SYSIN DD * COMPARE MAXNAME=4,TYPORG=PO MEMBER NAME=A,(B,C),D /*
3.4. 注意事項
以下は、JSDCOMPRユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
バッチ・アプリケーションから受信したコードを返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力して、該当するエラーコードを返します。
JSDCOMPRユーティリティで発生する可能性のあるエラーコードは以下のとおりです。
コード 説明 8
異なるレコードが1つ以上存在する場合のリターンコードは8です。
異なるレコードがLIMITパラメータで指定した値以上の場合に該当します。
-
PDSの場合は次のメンバーを処理します。リターンコードは8です。
12
異なるレコードがLIMITパラメータで指定した値以上の場合に該当します。
-
SDSの場合のみ該当します。
回復不能エラーであり、以下の場合に該当します。
-
データセット関連(pgmdd、open/close、read/write)エラー
-
SYSIN DDコマンドの文法エラー
-
その他のJSDCOMPRユーティリティのエラー
16
システム関連のエラーであり、以下の場合に該当します。
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
4. JSDDG
テスト・データセットを作成するユーティリティです。SYSIN DDにデータのパターンを指定してテスト・データセットを作成します。
4.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSPRINT DD |
JSDDGメッセージを保存するデータセットを定義します。 |
user_defined_name1 DD |
JCLが保存されている入力データセットやデータセットのメンバーを記述します。 |
user_defined_name2 DD |
新規作成されたJCLを保存するデータセットやデータセットのメンバーを記述します。 |
SYSIN DD |
JSDDGのコマンドを記述します。 |
4.2. コマンドの設定
本節では、SYSIN DDで設定するJSDDGのコマンドについて説明します。
-
DSD
JSDDGを利用して実行するコマンドの開始を示します。テスト・データの作成に利用する入力データセットとテスト・データセットが出力される出力データセットを指定します。最低1つ以上のDSDが必要であり、DSDで開始したコマンドはEND文で終了します。
以下は、DSDコマンドの構文です。
[label] DSD OUTPUT=(ddname) [,INPUT=(ddname1[,ddname2][,...])]
項目 説明 OUTPUT
出力データセットのDDを指定します。
INPUT
入力データセットのDDを指定します。
-
FD
テスト・データが出力される出力データセットのフィールド形式を指定します。
以下は、FDコマンドの構文です。
[label] FD NAME=name ,LENGTH=length [,STARTLOC=starting-location] [,FROMLOC=from-location] [,FILL={'character'|X'nn'}] [,{FORMAT=pattern[,CHARACTER=character] |PICTURE=length,{'character-string'|P'n'|B}}] [,SIGN=sign] [,ACTION={FX|RO|RP|SL|SR|TL|TR|WV} [,INDEX=n[,CYCLE=n][,RANGE=n]]
項目 説明 NAME
フィールドの名前を指定します。CREATEコマンドのNAME文を利用してフィールド名を指定するときに利用されます。
LENGTH
フィールドの長さを指定します。
STARTLOC
出力されるレコード内のフィールドの開始位置を指定します。
FROMLOC
入力されるレコード内のフィールドの開始位置を指定します。入力として使用するデータセットが存在する場合にのみ有効です。
FILL
フィールドの値を指定します。
引用符(' ')内に文字とHEX値を入力する2つの方法があります。
-
character : 1バイト文字を入力します。
-
X’nn : 2桁のHEX値を入力します。(例: FILL=X'40' または FILL=X’FF')
FORMAT
フィールド値のパターンを指定します。
pattern項目には次の値を指定できます。
-
AL : アルファベットを使用します。(Alphabetic)
-
AN : アルファベットと数字を使用します。(Alphanumeric)
-
BI : バイナリを使用します。(Binary number)
-
CO : 照合順番(Collating sequence)を使用します。(現在は未サポート)
-
PD : パック10進数を使用します。(10桁まで表現でき、10桁以降は「0x00」に初期化する)
-
RA : 任意のバイナリを使用します。(Random number)
-
ZD : ゾーン10進数を使用します。(18桁まで表現でき、18桁以降は「0x30」に初期化する)
CHARACTER
パターンの開始文字を指定します。FORMAT項目を「AL」または「AN」に指定した場合には、それぞれアルファベット、またはアルファベットと数字のみ使用できます。
PICTURE
ユーザーがパターンを直接定義して使用します。LENGTHに指定したフィールドの長さに合わせて指定します。LENGTHの長さより大きい値を指定すると、それ以降のパターンは無視されます。上述したFORMAT文と一緒に使用してはいけません。
SIGN
パック10進数やバイナリ・フィールドの符号を指定します。
ACTION
フィールドの内容を変更する方法を指定します。
-
FX : 固定した内容が出力レコードに含まれます。
-
RO : PICTUREで指定したパターンが左に1桁ずつ移動し、最後の文字に到達したら、また右に1桁ずつ移動します。元の位置に戻ったら、また左に移動します。
-
RP : バイナリをパターンとして使用します。文字が1桁ずつ左に移動します。フィールドの最後のバイトに到達したら、既存の最初のバイト文字、または上記のFORMATで指定されたパターンに従って移動します。
-
SL : パターンを左に移動します。1文字だけ残ったら、初期のフィールド状態に戻った後、移動を続けます。
-
SR : パターンを右に移動します。1文字だけ残ったら、初期のフィールド状態に戻った後、移動を続けます。
-
TL : フィールドの左の文字から削除しながら長さを減らします。1文字だけ残ったら、初期のフィールド状態に戻った後、削除を続けます。
-
TR : フィールドの右の文字から削除しながら長さを減らします。1文字だけ残ったら、初期のフィールド状態に戻った後、削除を続けます。
-
WV : PICTUREで指定したパターンが左に1桁ずつ移動します。最後まで(空白ではなく、文字がフィールドの最初のバイトに位置する)到達したら、移動を続けます。
INDEX
レコードが追加されるたびに増加させるフィールド値を10進数で指定します。
FORMATがZD、PD、BIであるか、PICTUREを指定した場合に利用できます。ただし、PICTUREの’character-string’の後ろの部分は数値型で構成する必要があります。
-
CYCLE : INDEXが適用されるレコードの単位を指定します。CYCLE=3に指定した場合は、レコードが3つ追加されるたびにフィールドの値が増加します。省略する場合は、1と見なします。
-
RANGE : フィールド値の最高値を指定します。INDEXによって増加されたフィールド値がこの値を超える場合、フィールドの値は既存の値を持ちます。省略する場合は、無限に増加します。
-
-
REPEAT
CREATEコマンド・グループを何回繰り返し実行するかを指定します。
以下は、REPEATコマンドの構文です。
[label] REPEAT QUANTITY=number[,CREATE=number]
項目 説明 QUANTITY
CREATEコマンド・グループを繰り返す回数を指定します。
CREATE
CREATEコマンド・グループを構成するCREATEコマンドの数を指定します。
(デフォルト値: 1)
-
CREATE
出力データセットのレコード構成を定義します。
以下は、CREATEコマンドの構文です。
[label] CREATE [QUANTITY=n] [,FILL={'character'|X'nn'}] [,INPUT={ddname|SYSIN[({cccc|$$$E})]}] [,PICTURE=length,startloc,{'character-string'| P'n'|B'n'}] [,NAME={(namelist)| (namelist-or-(copygroup))} [,EXIT=routinename]
項目 説明 QUANTITY
CREATEコマンドによって作成されるレコードの数を指定します。(デフォルト値: 1)
FILL
フィールドの値を指定します。
引用符(' ')内に文字とHEX値を入力する2つの方法があります。
-
character : 1バイトの文字を入力します。
-
X’nn : 2桁のHEXを入力します。(例: FILL=X'40' または FILL=X’FF')
INPUT
入力として使用するデータセットのDDを指定します。
DDの代わりにSYSINを使用して入力データを直接JCL内に記述することができます。データの最後は「$$$E」で表示します。SYSINの「cccc」機能はサポートしません。
-
例)
CREATE文でSYSINを使用して入力データ「1234567890」を指定する場合
CREATE QUANTITY=2,INPUT=SYSIN 1234567890 $$$E
PICTURE
ユーザーがパターンを直接定義します。
NAME
入力として使用するnamelistを記述します。
namelistだけを記述したり、namelistとcopygroupを一緒に記述します。
-
namelistはNAME項目で構成されます。NAME項目は、FDコマンドのNAME文で指定したフィールドです。
-
copygroupは、(COPY=n,name1[,name2] [,...])形式で構成され、COPY文に定義した値は、COPY文の次に記述されるNAMEを繰り返す回数です。たとえば、NAME=(COPY=3, フィールドNAME1)文は、NAME=(フィールドNAME1,フィールドNAME1,フィールドNAME1)と同じです。
使用方法は以下のとおりです。
-
フィールドNAME1
-
フィールドNAME1, フィールドNAME2,...
-
フィールドNAME1, (COPY=2, フィールドNAME2), フィールドNAME3
-
フィールドNAME1, (COPY=2, フィールドNAME2), フィールドNAME3, (COPY=4, フィールドNAME4)
EXIT
現在はサポートしていません。
-
-
END
DSDコマンドと一緒に使用され、コマンドの最後を示します。
以下は、ENDコマンドの構文です。
[label] END
4.3. 使用例
以下は、2つのCREATEコマンドを使用してそれぞれのフィールドに合わせてOUTPUT DDに保存する例です。
最初のCREATEコマンドは、合計3つのフィールド名(REC01NAME,REC01FD01,REC01FD02)を持ち、1行を出力します。2番目のCREATEコマンドは、合計4つのフィールド名(EC02NAME,REC02FD01,REC02FD02,REC02FD03)を持ち、2行を出力します。
//GENDAT0 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSDDG //OUTPUT DD DSN=JSDDG.DATASET.OUT01,DISP=(NEW,CATLG,DELETE), // DCB=(RECFM=VB,LRECL=32760) //SYSIN DD DATA DSD OUTPUT=(OUTPUT) FD NAME=REC01NAME,LENGTH=12,PICTURE=12,'RECORD01 ' FD NAME=REC01FD01,LENGTH=7,PICTURE=7,'A000001',INDEX=1 FD NAME=REC01FD02,LENGTH=4993,FORMAT=AL,ACTION=TL FD NAME=REC02NAME,LENGTH=12,PICTURE=12,'RECORD02 ' FD NAME=REC02FD01,LENGTH=7,PICTURE=7,'A000001',INDEX=1,CYCLE=2 FD NAME=REC02FD02,LENGTH=8,PICTURE=8,'AM000001',INDEX=1 FD NAME=REC02FD03,LENGTH=4985,FORMAT=AL REPEAT QUANTITY=131072,CREATE=2 CREATE QUANTITY=1,NAME=(REC01NAME,REC01FD01,REC01FD02) CREATE QUANTITY=2,NAME=(REC02NAME,REC02FD01,REC02FD02,REC02FD03) END /* //SYSPRINT DD SYSOUT=*
以下は、上記例の結果として作成された出力データセットのレコードです。レコード件数の合計は393,216件、各レコードの長さは5012バイトです。
RECORD01 A000001ABCDEFGHIJKLMNOPQRSTUVWXYZ... RECORD02 A000001AM000001ABCDEFGHIJKLMNOPQR... RECORD02 A000001AM000002ABCDEFGHIJKLMNOPQR... RECORD01 A000002 BCDEFGHIJKLMNOPQRSTUVWXYZ... RECORD02 A000002AM000003ABCDEFGHIJKLMNOPQR... RECORD02 A000002AM000004ABCDEFGHIJKLMNOPQR... RECORD01 A000003 CDEFGHIJKLMNOPQRSTUVWXYZ... RECORD02 A000003AM000005ABCDEFGHIJKLMNOPQR... RECORD02 A000003AM000006ABCDEFGHIJKLMNOPQR... RECORD01 A000004 DEFGHIJKLMNOPQRSTUVWXYZ... RECORD02 A000004AM000007ABCDEFGHIJKLMNOPQR... RECORD02 A000004AM000008ABCDEFGHIJKLMNOPQR... RECORD01 A000005 EFGHIJKLMNOPQRSTUVWXYZ... RECORD02 A000005AM000009ABCDEFGHIJKLMNOPQR... RECORD02 A000005AM000010ABCDEFGHIJKLMNOPQR... RECORD01 A000006 FGHIJKLMNOPQRSTUVWXYZ... RECORD02 A000006AM000011ABCDEFGHIJKLMNOPQR... RECORD02 A000006AM000012ABCDEFGHIJKLMNOPQR... RECORD01 A000007 GHIJKLMNOPQRSTUVWXYZ... RECORD02 A000007AM000013ABCDEFGHIJKLMNOPQR... RECORD02 A000007AM000013ABCDEFGHIJKLMNOPQR... ... RECORD01 A131071 ... RECORD02 A131071AM262141ABCDEFGHIJKLMNOPQR... RECORD02 A131071AM262142ABCDEFGHIJKLMNOPQR... RECORD01 A131072 ... RECORD02 A131072AM262143ABCDEFGHIJKLMNOPQR... RECORD02 A131072AM262144ABCDEFGHIJKLMNOPQR...
4.4. 注意事項
以下は、JSDDGユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
バッチ・アプリケーションから受信したコードを返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力して、該当するエラーコードを返します。
JSDDGユーティリティで発生する可能性のあるエラーコードは以下のとおりです。
コード 説明 08
制御文の処理中にエラーが発生した場合です。
実行中のデータの作成を即時中止し、次のDSD文を処理します
12
入出力データセットの処理中にエラーが発生した場合です。
ユーティリティを即時停止します
16
回復不能エラーであり、以下の場合に該当します。ユーティリティを即時停止します
-
SYSIN DDコマンドの文法エラー
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
その他のJSDDGユーティリティのエラー
-
5. JSDGENER
順次データセットまたは区分データセットのメンバーをコピーする際に使用するユーティリティです。
以下は、JSDGENERユーティリティの機能です。
-
順次データセットまたは区分データセットのメンバーをコピーします。
-
順次データセットから区分データセットを作成します。
-
既存の区分データセットにメンバーを追加します。
-
入力レコードを編集します。
5.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSPRINT DD |
JSDGENERのメッセージが保存されるデータセットを定義します。 |
SYSUT1 DD |
入力データセットを定義します。順次データセットまたは区分データセットのメンバーになることができます。 |
SYSUT2 DD |
出力データセットを定義します。順次データセットまたは区分データセットのメンバー、あるいは区分データセットになることができます。 |
SYSIN DD |
JSDGENERのコマンドを定義します。 |
5.2. コマンドの設定
JSDGENERユーティリティが提供する機能を実行するためのコマンドをSYSIN DDに記述します。SYSIN DDにコマンドが記述されていない場合は、SYSUT1のデータセットをSYSUT2のデータセットにコピーする機能を提供します。
本節では、SYSIN DDで設定するJSDGENERのコマンドについて説明します。
-
GENERATE
MEMBERとRECORDのパラメータを設定します。GENERATEコマンドの構文は以下のとおりです。
[label] GENERATE [,MAXNAME=n] [,MAXFLDS=n] [,MAXGPS=n] [,MAXLITS=n]
項目 説明 MAXNAME
最大メンバー数を指定します。1~3276まで指定できます。
MAXFLDS
レコードの最大フィールド数を指定します。1~4095まで指定できます。
MAXGPS
レコードの最大IDENT数を指定します。1~2520まで指定できます。
MAXLITS
レコードのフィールドで使用されるリテラルの最大文字数を指定します。1~2730まで指定できます。
-
MEMBER
区分データセットの複数のメンバーにより出力レコードが作成される場合、作成するメンバーの数の分だけのMEMBER文が必要となります。
以下は、MEMBERコマンドの構文です。
[label] MEMBER NAME=(name[,alias1][,alias2][,...])
項目 説明 NAME
作成するメンバーの名前を記述します。
現在は、JSDGENERユーティリティのMEMBER文のエイリアスは実際には機能しませんが、エラーが発生しないようにサポートしています。
-
RECORD
入力レコードの処理条件を記述します。
以下は、RECORDコマンドの構文です。
[label] RECORD [IDENT=(length,'name',input-location)] [,FIELD=([length], [{input-location|'literal'}], [conversion], [output-location])] [,FIELD=...]
項目 説明 IDENT
MEMBER文がRECORD文の前に記述された場合、そのメンバーにコピーされる入力レコードの条件を示し、同じレコードのFIELDに適用される入力レコードと区別します。レコードのinput-locationからlengthの値とnameの値を比較して、値が同じである場合は、メンバーの最後のレコードになるか、FIELDが適用される最後のレコードになります。
-
length: nameを識別するための長さを指定します。最大8バイトまで指定できます
-
'name': 最後のレコードを識別するための値であり、必ず単一引用符(‘ ‘)で囲みます
-
input-location: 入力レコードでnameの値と比較するフィールドの最初の開始位置を指定します。
FIELD
レコード編集のための情報を記述します。
入力レコードでinput-locationの位置からlength分のデータを出力レコードのoutput-locationの位置に書き込むか、length分のリテラルを出力レコードのoutput-locationの位置に書き込みます。
-
length: 処理される入力フィールドの長さまたはリテラルの長さを記述します。
-
input-location: 処理されるフィールドの開始位置を指定します。
-
'literal': output-locationに位置させるリテラルを指定します。
-
conversion : パラメータとしてCG、CV、GC、GV、HE、PZ、VC、VG、ZPをでき、現在はZP、PZのみ機能します。
-
ZP : ゾーン10進数の値をパック10進数に変換します。
-
PZ : パック10進数の値をゾーン10進数に変換します。
-
-
output-location: 出力レコードに書き込む開始位置を指定します。
-
5.3. 使用例
以下は、順次データセットをコピーする例です。
SYSIN DDにコマンドが記述されていないため、順次データセットのTEST.INPUTをTEST.COPYにコピーします。JSDGENERのメッセージはジョブで使用されるメッセージ・クラスに保存します。
//COPY JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //COPYSDS EXEC PGM=JSDGENER //SYSUT1 DD DSNAME=TEST.INPUT,DISP=(SHR,KEEP) //SYSUT2 DD DSNAME=TEST.COPY,DISP=(NEW,CATLG), // DCB=(RECFM=FB,LRECL=120 ,BLKSIZE=120) //SYSPRINT DD SYSOUT=* //SYSIN DD DUMMY
以下は、順次データセットを区分データセットとして構成する例です。
順次データセットであるTEST.INPUTをMEMBER1、MEMBER2、MEMBER3に分けて、新しく作成した区分データセットのTEST.PDS01に保存します。
//CREATE JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //NEWPDS EXEC PGM=JSDGENER //SYSUT1 DD DSNAME=TEST.INPUT,DISP=(SHR,KEEP) //SYSUT2 DD DSNAME=TEST.PDS01,DISP=(NEW,CATLG), // DCB=(DSORG=PO,RECFM=FB,LRECL=120,BLKSIZE=120) //SYSPRINT DD SYSOUT=* //SYSIN DD * GENERATE MAXNAME=3,MAXGPS=2 MEMBER NAME=MEMBER1 GROUP1 RECORD IDENT=(8,'firstxxx',30) MEMBER NAME=MEMBER2 GROUP2 RECORD IDENT=(8,'secondxx',30) MEMBER NAME=MEMBER3 /*
TEST.INPUTで入力レコードの30桁目の位置から37桁目までの値を順次検索し、’firstxxx’のレコードが現れたら、’firstxxx’レコードを含めて現在まで検索されたレコードをMEMBER1にコピーします。そして、’firstxxx’レコードの次のレコードから’secondxx’レコードの検索を開始します。
’secondxx’レコードが検索されたら、’firstxxx’レコード以降から’secondxx’レコードを含めて検索したすべてのレコードをMEMBER2にコピーし、’secondxx’レコード以降のすべてのレコードはMEMBER3にコピーされます。
以下は、既存の区分データセットにメンバーを追加する例です。
//MERGE JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //MERGEPDS EXEC PGM=JSDGENER //SYSUT1 DD DSNAME=TEST.INPUT2,DISP=(SHR,KEEP) //SYSUT2 DD DSNAME=JSDGENER.TEST.PDS01,DISP=(OLD,KEEP) //SYSPRINT DD SYSOUT=* //SYSIN DD * GENERATE MAXNAME=2,MAXGPS=1 MEMBER NAME=MEMX GROUP1 RECORD IDENT=(11,'endofrecord',15) MEMBER NAME=MEMY /*
順次データセットであるTEST.INPUT2のレコードで15バイト目から25バイト目までのレコード値を’endofrecord’と比較します。値が一致した場合、検索されたすべてのレコードをMEMXにコピーし、’endofrecord’レコード以降のすべてのレコードはMEMYにコピーします。また、既存の区分データセットTEST.PDS01にメンバーとしてMEMXとMEMYを追加します。
以下は、入力レコードを変更する例です。TEST.INPUT3レコードを変更してTEST.EDIT0にコピーします。
//EDIT JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //EDIT EXEC PGM=JSDGENER //SYSUT1 DD DSNAME=TEST.INPUT3,DISP=(SHR,KEEP) //SYSUT2 DD DSNAME=JSDGENER.TEST.EDIT01,DISP=(NEW,CATLG), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=80) //SYSPRINT DD SYSOUT=* //SYSIN DD * GENERATE MAXGPS=1,MAXFLDS=4,MAXLITS=10 RECORD IDENT=(8,'firstmem',1),FIELD=(50,76,,31), FIELD=(30,20,,1) RECORD FIELD=(70,41,,11),FIELD=(10,'**********',,1) /*
上記例の2つのRECORD文のうち、最初のRECORDのIDENT条件によって、順次に入力レコードの1バイト目から8バイトの値で’firstmem’が出るまですべてのレコードに対してFIELD条件を適用します。つまり、以下の図のように、入力レコードの76バイト目の位置から50バイト長分の値を出力レコードの31バイト目の位置にコピーし、入力レコードの20バイト目の位置から30バイトの長さの値を出力レコードの1バイト目の位置にコピーします。

IDENT条件に合うレコードが処理されてからは、2番目のRECORD文が以下のように適用されます。入力レコードの41バイト目の位置から70バイト長分の値を出力レコードの11バイト目の位置にコピーし、出力レコードの最初の10バイトはリテラル‘**********'にコピーします。

5.4. 注意事項
以下は、JSDGENERユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
バッチ・アプリケーションから受信したコードを返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力し、該当するエラーコードを返します。
JSDGENERユーティリティで発生する可能性のあるエラーコードは以下のとおりです。
コード 説明 12
回復不能エラーであり、以下の場合に該当します
-
データセット関連(pgmdd、open/close、read/write)エラー
-
SYSIN DDコマンドの文法エラー
-
その他のJSDGENERユーティリティのエラー
16
システム関連のエラーであり、以下の場合に該当します
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
6. JSDPTPCH
順次データセットまたは区分データセットの全体または一部の出力データを作成するためのユーティリティです。
以下は、JSDPTPCHユーティリティの機能です。
-
順次データセットまたは区分データセットの全体を印刷します。
-
区分データセットの特定のメンバーを印刷します。
-
順次データセットまたは区分データセットのレコード・フィールドを編集して印刷します。
6.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSPRINT DD |
JSDPTPCHメッセージが保存されるデータセットを記述します。 |
SYSUT1 DD |
順次データセットまたは区分データセットのいずれかのタイプとして、入力データセットを記述します。 |
SYSUT2 DD |
順次データセットのタイプで出力データセットを記述します。 |
SYSIN DD |
JSDPTPCHコマンドを記述します。 |
6.2. コマンドの設定
本節では、SYSIN DDで設定するJSDPTPCHのコマンドについて説明します。
-
PRINT
データを印刷します。PRINT文は、最初に記述するコマンドであり、複数回繰り返して指定することはできません。
以下は、PRINTコマンドの構文です。
[label] PRINT [PREFORM=A] [,TYPORG={PS|PO}] [,CNTRL={n|1}] [,STRTAFT=n] [,STOPAFT=n] [,SKIP=n] [,MAXNAME=n] [,MAXFLDS=n] [,MAXGPS=n] [,MAXLITS=n] [,MAXLINE=n] [,OUTODR= TTR | ODIR]
項目 説明 PREFORM
各レコードの最初のバイトが制御文字を意味しているのかを記述します。
データがすでに印刷できる形式になっており、その形式で印刷されることを意味します。PREFORMが指定されると、TYPORGを除く追加的なPRINT文のすべてのパラメータ設定は無視されます。ただし、構文チェックは行われます。
上記のコマンドで使われたAは、ASA制御文字を意味します。
TYPORG
入力データセットが順次データセット(PS)なのか、区分データセット(PO)なのかを記述します。
(デフォルト値: PS)
CNTRL
空白行の値を設定します。
空白行として3を設定する場合、最初の行にはデータを書き込み、2番目と3番目の行には空白行を印刷します。このような順で、次のデータも印刷されます。
現在は、空白行の値は3まで設定できます。3を超える設定値はすべて1として処理されます。(デフォルト値: 1)
STRTAFT
順次データセットを印刷する前に、スキップする論理レコードの数を指定します。
データセットのn+1桁目の論理レコードから印刷されます。レコードの範囲は、32767を超過せず、超過する場合は、レコードが存在する分だけ処理されます。
STOPAFT
印刷される順次データセットの論理レコード数を指定します。
最大32767の論理レコードを設定することができます。
STOPAFT文とRECORD文のIDENTが一緒に記述された場合、STOPAFTに設定された値を満たすか、あるいはIDENTによって区分されるレコード・グループの最後であるかの、いずれかに該当されるものが現れたとき、現在の入力データセットのデータを処理するためのコマンドの実行が終了されます。
SKIP
n桁目のレコードごとに印刷されることを意味します。(デフォルト値: 1)
MAXNAME
MEMBER文の最大メンバー数を指定します。MEMBER文を使用する場合は必ず指定します。設定値は、32767を超えることはできません。
MAXFLDS
RECORD文の最大FIELDパラメータ数を指定します。
設定値は、32767を超えることはできません。(デフォルト値: 20)
MAXGPS
最大IDENTパラメータ数を指定します。
設定値は、32767を超えることはできません。(デフォルト値: 20)
MAXLITS
RECORD文のIDENTパラメータに含まれる最大リテラル数を指定します。
設定値は、32767を超えることはできません。(デフォルト値: 20)
MAXLINE
出力されるページの最大行数を指定します。(デフォルト値: 60)
OUTODR
現在は解析のみサポートします。
-
TITLE
出力されるタイトルやサブタイトルを記述します。
JSDPTPCHでは、TITLE文に2つのITEMを記述することができます。最初のITEM文はタイトルを、2番目のITEM文はサブタイトルを定義します。記述されたタイトルとサブタイトルは、毎ページごとに出力されます。
以下は、TITLEコマンドの構文です。
[label] TITLE ITEM=('title'[,output-location]) [,ITEM=...]
項目 説明 ITEM
titleとoutput-locationは以下のように設定します。
-
title : タイトルまたはサブタイトルについてのリテラルを記述します。最大40バイトまで指定できます。
-
output-location : 出力レコード上でITEMのリテラルが記述される位置を指定します。
-
-
MEMBER
入力データセットが区分データセットの場合、特定メンバーのデータのみ処理する際に使用します。MEMBER文を使用するためには、PRINT文のMAXNAMEを設定する必要があります。
以下は、MEMBERコマンドの構文です。
[label] MEMBER NAME=membername
項目 説明 NAME
区分データセットの印刷されるメンバー名を記述します。
-
RECORD
印刷されるレコードのグループを定義します。
以下は、RECORDコマンドの構文です。
[label] RECORD [IDENT=(length,'name',input-location)] [,FIELD=(length,[input-location],[conversion] [output-location])] [,FIELD=…]
項目 説明 IDENT
レコード・グループの最後レコードを識別します。レコードのinput-locationでlength分だけの値とnameの値を比較して、値が同じであればメンバーの最後のレコードになるか、FIELDが適用される最後のレコードとなります。
IDENTを使用するためには、PRINT文のMAXGPSとMAXLITSが記述されている必要があります。
-
length : 最後のレコードを識別するための長さを指定します。最大8バイトまで指定できます。
-
'name' : 最後のレコードを識別するための値として、必ず単一引用符(‘ ‘)で囲んで記述します。
-
input-location : 入力レコードでnameの値と処理するデータの最後のレコードを識別するフィールドの最初の開始位置を指定します。
FIELD
レコードを編集するための情報を記述します。
入力レコード上で、input-location位置からlength分だけのデータを出力レコードのoutput-location位置に記述するか、リテラルをlength分だけ出力レコードのoutput-location位置に記述します。
FIELDを使用するためには、PRINT文のMAXFLDSが記述されている必要があります。
-
length : 編集され処理される入力レコードの長さ、またはリテラルの長さを記述します。
-
input-location : 処理されるフィールドの開始位置を記述します。
-
output-location : 出力レコードに記録される開始位置を指定します。
CONVERSION
レコードを変換するための情報を記述します。CV、PZ、VC、XEの4つのパラメータ値を使用できます。
-
CV : SOSI変換なしに出力します。
-
PZ : パック10進数データをゾーン10進数データに変更して出力します。
-
VC : フィールドの先頭に0E、末尾に0Fを追加して出力します。
-
XE : 16進数データに変換して出力します。
-
6.3. 使用例
以下は、特定のメンバーのみ選択して、指定した印刷形式でデータを出力する例です。TEST.INPUT01のメンバーのうち、MEMBER2のレコードが順次にSYSUT2に定義されたSYSOUTに出力されます。
MEMBER2のレコードの21バイト目から8バイト目の値が’ENDRECORD’なら、このレコードまで出力します。このSYSOUTは、ジョブが終了した後、OUTPUT PROCESSINGによりプリンターに印刷されます。このデータは、1ページに30行ずつ印刷されます。
//TEST JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //NEWPDS EXEC PGM=JSDPTPCH //SYSUT1 DD DSNAME=TEST.INPUT01,DISP=(SHR,CATLG) //SYSUT2 DD SYSOUT=A //SYSPRINT DD SYSOUT=* //SYSIN DD * PRINT TYPORG=PO,CNTRL=1,MAXLINE=30,MAXNAME=1,MAXLITS=10,MAXGPS=3 MEMBER NAME=MEMBER2 RECORD IDENT=(8,'ENDRECORD',21) /*
6.4. 注意事項
以下は、JSDPTPCHユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
バッチ・アプリケーションから受信したコードを返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力し、該当するエラーコードを返します。
以下は、JSDPTPCHユーティリティで発生する可能性のあるエラーコードです。
コード 説明 12
回復不能であり、以下の場合に該当します。
-
データセット関連(pgmdd、open/close、read/write)エラー
-
SYSIN DDコマンドの文法エラー
-
その他のJSDPTPCHユーティリティのエラー
16
システム関連のエラーであり、以下の場合に該当します。
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
7. JSECOPY
1つ以上の区分データセットに対してメンバーの全体または一部をコピーするか、マージするために使用するユーティリティです。
以下は、JSECOPYユーティリティの機能です。
-
区分データセットのコピーまたはマージを行います。
-
区分データセットの特定のメンバーのみを選択してコピーし、選択されたメンバー名を再定義します。
-
区分データセットの特定のメンバーを除いてコピーします。
-
区分データセットのメンバーを置き換えます。
7.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSPRINT DD |
JSECOPYメッセージを保存するデータセットを定義します。 |
SYSUT1 DDまたは user_defined_name1 DD |
区分データセット・タイプの入力データセットを定義します。 |
SYSUT2 DDまたは user_defined_name2 DD |
区分データセット・タイプの出力データセットを定義します。 |
SYSIN DD |
JSECOPYコマンドを定義します。 |
7.2. コマンドの設定
JSECOPYでは、2つの方法でコマンドを設定することができます。JCLのEXEC文のPARMパラメータを使用してコマンドを記述するか、あるいはJCLのSYSIN文にコマンドを記述することができます。
[参考]
以下のようなコマンドの省略形を使用できます。
コマンド | 省略形 |
---|---|
COPY |
C |
EXCLUDE |
E |
SELECT |
S |
OUTDD |
O |
INDD |
I |
LIST |
L |
MEMBER |
M |
-
EXEC PARMパラメータの設定
以下は、EXEC文のPARMパラメータ・コマンドの構文です。
//[stepname] EXEC PGM=JSECOPY[,PARM=<parms>]
PARMパラメータのparms値として、次の3つのコマンドのいずれかを設定します。
コマンド 説明 COPY
SYSUT1データセットをSYSUT2データセットにコピーします。
REPLACE
出力データセットに存在するメンバーと同じ名前でコピーする場合、このコマンドがあればオーバーライドし、ない場合はコピーしません。
LIST
コピーされたメンバー名をSYSPRINTに記録します。(デフォルト値: YES)
EXEC文のPARMパラメータにCOPYまたはREPLACEを設定すると、SYSIN DDに設定したコマンドは無視されます。
-
COPY
区分データセットのメンバーをコピーします。SYSIN DDのCOPYコマンドの構文は以下のとおりです。
[label] COPY OUTDD=DDNAME, INDD=[(]{DDNAME|(DDNAME,R)}[,...][)] [,LIST={YES|NO}]
項目 説明 OUTDD
出力データセットのためのDD名を記述します。
INDD
入力データセットのためのDD名を記述します。
出力データセットにコピーしようとするメンバーが既に存在する場合、R(REPLACE)パラメータがあればオーバーライドし、ない場合はコピーしません。
LIST
SYSPRINTにコピーしたメンバー名を記録します。デフォルト値はYESです。LISTが記述されていない場合は、EXEC PARMの内容が適用されます。
-
INDD
COPY文の次に設定し、設定した順に入力データセットを出力データセットに、新しいコピーを行います。COPY文のサブコマンドとして使われるINDDについては、複数の入力データセットにそれぞれEXCLUDE文やSELECT文を適用することは難しいですが、INDD文を使用すると、複数の入力データセットにそれぞれEXCLUDE文やSELECT文を使用することができます。
-
EXCLUDE
EXCLUDE文はCOPY文の次に設定し、COPY文の実行時に入力データセットから特定のメンバーを除外します。この構文は、以下のSELECT文と一緒に使用できません。EXCLUDE文とSELECT文を両方とも指定しないと、データセット全体に対するコピーを行います。
以下は、EXCLUDEコマンドの構文です。
[label] EXCLUDE MEMBER=[(] name1[,name2][,...][)]
項目 説明 MEMBER
コピーしないメンバー名を記述します。記述されたメンバーは、COPY文の実行時にコピー対象から除外されます。
-
SELECT
SELECT文はCOPY文の次に設定し、入力データセットの特定のメンバーを新しい名前でコピーします。
以下は、SELECTコマンドの構文です。
[label] SELECT MEMBER=({name1|(name1,newname1[,R])|(name1,,R)} [,{name2|(name2,newname2[,R])|(name2,,R)}][,...])
項目 説明 MEMBER
nameフィールドに記述した入力データセットのメンバーをnewnameフィールドで指定した新しい名前でコピーします。
newnameフィールドを指定していない場合、nameフィールドに記述したメンバー名と同じ名前を使用します。
R(REPLACE)パラメータを選択すると、入力データセットのメンバー名と出力データセットのメンバー名が同じである場合、入力データセットのメンバーを出力データセットのメンバーにオーバーライドします。
7.3. 使用例
以下は、区分データセットのDATASET1を区分データセットのDATASET2に、全体データセットをコピーする例です。
//COPYALL JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //JOBSTEP EXEC PGM=JSECOPY //SYSPRINT DD SYSOUT=A //SYSUT1 DD DSNAME=DATASET1,DISP=(SHR,KEEP) //SYSUT2 DD DSNAME=DATASET2,UNIT=disk,VOL=SER=200000, // DISP=(NEW,CATLG) //SYSIN DD DUMMY
以下のように、DATASET1のすべてのメンバーA、B、Fが、区分データセットのDATASET2にコピーされます。

以下は、4つのデータセットをマージする例です。既存のデータセットDATASET5にDATASET1、DATASET3、DATASET4のメンバーがコピーされマージされます。SYSIN DDのコマンドINDDの順に従って、DATASET1が先にコピーされ、DATASET4、DATASET3の順でコピーされます。
//MERGE JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //JOBSTEP EXEC PGM=JSECOPY //SYSPRINT DD SYSOUT=A //IN01 DD DSNAME=DATASET1,DISP=(SHR,KEEP) //IN02 DD DSNAME=DATASET3,DISP=(SHR,KEEP) //OUT01 DD DSNAME=DATASET5,DISP=(SHR,KEEP) //IN03 DD DSNAME=DATASET4,DISP=(SHR,KEEP) //SYSIN DD * COPYOPER COPY OUTDD=OUT01 INDD=IN01 INDD=IN03 INDD=IN02 /*
JSECOPYが開始される前、DATASET5にはメンバーAが既に存在しています。DATASET1が最初にコピーされますが、メンバーAは既にOUTPUTに存在しており、REPLACE条件がないため、AはコピーされずにBとFだけがコピーされます。次に、DATASET4がコピーされますが、メンバーBも既にOUTPUTに存在しているためコピーされず、メンバーDとXのみがコピーされます。最後にDATASET3がコピーされます。メンバーFとXは既にOUTPUTに存在するためコピーされず、メンバーCとYだけがコピーされます。
以下の図では、上記例を実行して出力データセットにメンバーがコピーされるプロセスと最終的にコピーされたメンバーを示しています。

以下は、入力データセットから特定のメンバーを選択するか、あるいは除外してコピーする例です。
MERGE EXEC PGM=JSECOPY //IN01 DD DSNAME=DATASET4,DISP=(SHR,KEEP) //IN02 DD DSNAME=DATASET3,DISP=(SHR,KEEP) //OUT01 DD DSNAME=DATASET6,DISP=(OLD,KEEP) //SYSPRINT DD SYSOUT=* //SYSIN DD * COPYOPER COPY OUTDD=OUT01 INDD=IN01 EXCLUDE MEMBER=X INDD=IN02 SELECT MEMBER=((F,Z),(C,A,R),(Y,,R)) /*
JSECOPYが実行される前に、DATASET6にはメンバーA、K、Yが既に存在しています。INDD=IN01によって先にDATASET4がコピーされますが、EXCLUDE文によりメンバーXは除外され、メンバーBとDがコピーされます。INDD=IN02によってDATASET3がコピーされます。また、SELECT文によりメンバーFが新しい名前のZでコピーされ、メンバーCが新しい名前のAでコピーされます。この際、DATASET6に既にメンバーAが存在するため、オーバーライドします。REPLACEを未指定の場合は、コピーは行われずに次の処理に移ります。最後にメンバーYが既存のメンバーYをオーバーライドします。
以下の図では、上記例を実行して出力データセットにメンバーがコピーされるプロセスと最終的にコピーされたメンバーを示しています。

以下は、INDD文を使用して複数のINPUTを別々に処理する例です。
//INDD01 EXEC PGM=JSECOPY //IN01 DD DSNAME=DATASET11,DISP=(SHR,KEEP) //IN02 DD DSNAME=DATASET12,DISP=(SHR,KEEP) //IN03 DD DSNAME=DATASET13,DISP=(SHR,KEEP) //OUT01 DD DSNAME=DATASET14,DISP=(OLD,KEEP) //SYSPRINT DD SYSOUT=* //SYSIN DD * COPYOPER COPY OUTDD=OUT01 INDD=IN01 EXCLUDE MEMBER=B INDD=IN02 SELECT MEMBER=((B,,R),(Y,N)) INDD=IN03 /*
IN01 DDに定義されたデータセットDATASET11からメンバーBを除いた別のメンバーAとCをコピーします。IN02 DDに定義されたデータセットDATASET12からメンバーBを置き換え、メンバーYの名前を変更してNでコピーします。IN03 DDに定義されたデータセットDATASET13からすべてのメンバーをコピーします。ただし、同じ名前のメンバーが既に存在する場合は置き換えません。

以下は、COPY文のサブコマンドとしてINDDを使用する例です。
//INDD02 EXEC PGM=JSECOPY //IN01 DD DSNAME=DATASET11,DISP=(SHR,KEEP) //IN02 DD DSNAME=DATASET12,DISP=(SHR,KEEP) //IN03 DD DSNAME=DATASET13,DISP=(SHR,KEEP) //OUT01 DD DSNAME=DATASET14,DISP=(OLD,KEEP) //SYSPRINT DD SYSOUT=* //SYSIN DD * COPYOPER COPY OUTDD=OUT01,INDD=(INO1,(IN02,R),IN03) /*
IN01 DDに定義されたデータセットDATASET11からすべてのメンバーをコピーします。ただし、同じ名前のメンバーが既に存在する場合は置き換えません。IN02 DDに定義されたデータセットDATASET12からすべてのメンバーをコピーします。メンバーBは置き換えられます。IN03 DDに定義されたデータセットDATASET13からすべてのメンバーをコピーします。ただし、同じ名前のメンバーが既に存在する場合は置き換えません。

7.4. 注意事項
以下は、JSECOPYユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
バッチ・アプリケーションから受信したコードを返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力し、該当するエラーコードを返します。
以下は、JSECOPYユーティリティで発生する可能性のあるエラーコードです。
コード 説明 12
回復不能であり、以下の場合に該当します。
-
データセット関連(pgmdd、open/close、read/write)エラー
-
SYSIN DDコマンドの文法エラー
-
その他のJSECOPYユーティリティのエラー
16
システム関連のエラーであり、以下の場合に該当します。
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
8. JSGLIST
区分データセットの情報とメンバー・リスト、またはボリューム情報とボリュームに含まれたデータセット・リストを提供するユーティリティです。
以下は、JSGLISTユーティリティの機能です。
-
区分データセットの情報と区分データセットのメンバー・リストを確認します。
-
ボリュームのディスク情報とデータセット・リストを確認します。
8.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSPRINT DD |
JSGLISTメッセージが保存されるデータセットを定義します。 |
SYSIN DD |
JSGLISTのコマンドを定義します。 |
8.2. コマンドの設定
本節では、SYSIN DDで設定するJSGLISTのコマンドについて説明します。
-
LISTPDS
区分データセットの情報とメンバー・リストを示します。LISTPDSコマンドの構文は以下のとおりです。
[label] LISTPDS DDNAME=(ddname[,ddname[,...]]) | DSNAME=(name[,name[,...]]) [,VOL=anyname=serial] [, DUMP | FORMAT ]
項目 説明 DDNAME
リスト化する区分データセットを定義したDD名を指定します。
最大55のDD名を指定できます。DD名が1つの場合は、括弧を省略することができます。
VOLパラメータと一緒に使用できません。
DSNAME
区分データセットの名前を指定します。最大10のデータセット名を指定することができます。
VOL
DSNAMEに記述したデータセットに含まれたボリューム・シリアル(ボリューム名)を記述します。
anynameにボリュームのデバイス名を指定するか、あるいは任意の名前で指定します。設定したanynameは文法に合わせるためのものであり、実際には無視されます。
DUMP | FORMAT
出力形式を指定します。設定情報に基づく出力情報は下の例を参照してください。
-
DUMP : メンバー名、データ・サイズ、最終変更日、作成日、レコード形式、ブロック・サイズ、レコード長を表形式で出力します。
-
FORMAT : メンバー名、データ・サイズ、最終変更日、作成日、レコード形式、ブロック・サイズ、レコード長を項目ごとに出力します。
以下は、各出力形式の出力情報の例です。
-
DUMP
***** DIRECTORY INFORMATION ON VOL 100000 ***** DSNAME ----- SYS1.JCLLIB MEMBER DATASIZE LAST-UPDATE LAST-UPDATE CREATE DATASET RECORD BLOCK RECORD DATE TIME DATE ORGANIZATION FORMAT SIZE LENGTH (*ALIAS) 182739 357 20190904 152901 20191015 PO FB 4096 80 191727 68 20190904 152901 20191015 PO FB 4096 80 ...
-
FORMAT
------------------------------------------------------------------------------ MEMBER NAME : 182739 DATASIZE : 357 LAST UPDATE DATE(TIME) : 20190904(152901) CREATE DATE : 20191015 RECORD FORMAT : FB BLOCK SIZE : 4096 RECORD LENGTH : 80 ...
-
-
LISTVTOC
与えられたボリュームに該当するディスク情報とデータセット・リストを示します。
以下は、LISTVTOCコマンドの構文です。
[label] LISTVTOC [,VOL=anyname=serial] [,DSNAME=(name[,name[,...]])] [,SORT]
項目 説明 VOL
照会するボリューム・シリアルを記述します。
anynameにボリュームのデバイス名を指定するか、任意の名前で指定します。設定したanynameは、文法に合わせるためのものであり、実際には無視されます。
DSNAME
データセット・リストに含まれるデータセット名を記述します。
最大10のデータセット名を指定することができます。
DSNAMEパラメータがない場合は、照会対象のボリュームに存在するすべてのデータセット・リストが照会されます。
SORT
データセット名のEBCDIC順に従ってリストが出力されます。
DSNAMEパラメータと一緒に指定できません。
8.3. 使用例
以下は、DDNAMEを使用して区分データセットの情報とメンバー・リストを確認する例です。
TEST DDで指定した区分データセットの情報とメンバー・リストをFORMAT形式でSYSPRINTに記録します。
//LISTPDS JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP01 EXEC PGM=JSGLIST //SYSPRINT DD SYSOUT=* //TEST DD DSNAME=TESTDATA,DISP=OLD //SYSIN DD * LISTPDS DDNAME=TEST,FORMAT /*
以下は、区分データセットの情報とメンバー・リストを確認する例です。
区分データセットのDATASET1およびDATASET2の情報とメンバー・リストをSYSPRINTに記録します。
//LISTPDS JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1), //STEP01 EXEC PGM=JSGLIST //SYSPRINT DD SYSOUT=* //SYSIN DD * LISTPDS DSNAME=(DATASET1,DATASET2),VOL=disk=100000 /*
以下は、ボリュームのディスク情報とデータセット・リストを確認する例です。
ボリューム・シリアルが100000であるボリュームのディスク情報とデータセット・リストをSYSPRINTに記録します。
//LISTVOL JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP01 EXEC PGM=JSGLIST //SYSPRINT DD SYSOUT=* //SYSIN DD * LISTVTOC VOL=disk=100000 /*
8.4. 注意事項
以下は、JSGLISTユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
バッチ・アプリケーションから受信したコードを返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力し、該当するエラーコードを返します。
以下は、JSGLISTユーティリティで発生する可能性のあるエラーコードです。
コード 説明 12
回復不能であり、以下の場合に該当します。
-
データセット関連(pgmdd、open/close、read/write)エラー
-
SYSIN DDコマンドの文法エラー
-
その他のJSGLISTユーティリティのエラー
16
システム関連のエラーであり、以下の場合に該当します。
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
9. JSGMOVE
非VSAMデータセットをコマンドで指定したボリュームへ移動またはコピーするために使用するユーティリティです。
以下は、JSGMOVEユーティリティの機能です。
-
順次データセット(SDS)、区分データセット(PDS)を同じボリュームまたは別のボリュームへ移動またはコピーします。
-
ボリューム内に存在するすべてのデータセットを、別のボリュームへ移動またはコピーします。
-
データセットの一部の名前を指定して、その条件に該当するデータセットを処理します。
-
区分データセットの特定のメンバーを処理対象に追加または除外するか、メンバー名を変更して処理します。
カタログに登録されたデータセットを同じボリュームから移動またはコピーする場合には、必ずデータセット名を変更します。 |
JSGMOVEは、2タイプのコマンドで分類されます。
-
機能コマンド
実際にユーザーが実行しようとする特定の作業を示すコマンドです。
コマンド 説明 データセットを移動(コピー)します。
データセット・グループを移動(コピー)します。
区分データセットを移動(コピー)します。
ボリューム内に存在するすべてのデータセットを移動(コピー)します。
-
補助コマンド
機能コマンドのうち、MOVE(COPY) PDSコマンドは、以下の補助コマンドを一緒に使用することができます。
コマンド 説明 処理対象の区分データセット・メンバーを追加します。
処理対象の区分データセット・メンバーから除外します。
区分データセット・メンバーの置き換えを指定します。
処理対象の区分データセット・メンバーを選択して指定します。
9.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSPRINT DD |
JSGMOVEのメッセージが保存されるデータセットを指定します。 |
SYSIN DD |
JSGMOVEで使用するコマンドを記述します。 |
9.2. 機能コマンド
本節では、JSGMOVEの機能コマンドについて説明します。
-
MOVE(COPY) DSNAME
データセットの移動またはコピーを指定するコマンドです。
以下は、MOVE(COPY) DSNAMEコマンドの構文です。
[label] {MOVE|COPY} DSN[AME]=name ,TO=device=volser [,FROM=device=volser] [,UNCATLG] [,CATLG] [,RENAME=name] [,FROMDD=dd-name] [,TODD=dd-name] [,UNLOAD] [,COPYAUTH]
項目 説明 DSNAME=name
移動またはコピーするデータセット名を指定します。
TO=device=volser
移動またはコピーするデータセットの出力デバイス名とボリュームを指定します。
deviceは、ボリュームのデバイス名を指定しますが、文法に合わせるためのものであり、実際には無視されます。
FROM=device=volser
移動またはコピーするソース・データセットが存在するボリュームを指定します。
deviceは、ボリュームのデバイス名を指定しますが、文法に合わせるためのものであり、実際には無視されます。
MOVEコマンドでFROMを指定すると、ソース・データセットのカタログ情報を削除せず、出力データセットもカタログしません。したがって、入力データセットがカタログされている場合、FROMは指定しないことをお勧めします。
UNCATLG
移動またはコピー処理の後、データセット・カタログ情報の削除を指定します。ソース・データセットがカタログされていない場合は、指定しないようにします。
基本的に入力データセットのカタログ情報は削除されますが、コピーしたデータセットのカタログを削除する方法は、コマンド別に以下のような違いがあります。
-
MOVEの場合、コピーしたデータセットはカタログしません。
-
COPYの場合は、コピーしたデータセットのカタログはCATLGコマンドの指定に従います。
-
FROMコマンドが指定されると、UNCATLGは無視されます。
CATLG
COPYコマンドを記述した場合のみ有効です。コピーしたデータセットをカタログに登録します。
RENAMEとFROMの指定を省略した場合、コピーしたデータセットをカタログするために、ソース・データセットはカタログから削除します。
RENAME=name
出力データセットの新しい名前を指定します。
同じボリューム内で移動またはコピーする場合は、RENAMEを必ず指定します。
FROMDD=dd-name
DCB情報とLABEL情報を提供するDD文のDD名を指定します。(未サポート機能)
TODD=dd-name
DCB情報をLABEL情報を提供するDD文のDD名を指定します。(未サポート機能)
UNLOAD
入力データセットをアンロード形式に変換して移動またはコピーすることを指定します。(未サポート機能)
COPYAUTH
出力データセットの権限情報を入力データセットの権限情報と同じく作成するときに指定します。(未サポート機能)
-
-
MOVE(COPY) DSGROUP
データセット名の先頭から特定の位置までの名前の一部を記述し、その条件に一致するすべてのデータセットの移動またはコピーを指定するコマンドです。
以下は、MOVE(COPY) DSGROUPNAMEコマンドの構文です。
[label] {MOVE|COPY} DSGROUP=name ,TO=device=volser [,PASSWORD] [,UNCATLG] [,CATLG] [,TODD=dd-name] [,UNLOAD]
項目 説明 DSGROUP=name
移動またはコピーするデータセットのいくつかの名前を指定します。
たとえば、DSGROUPをTESTと指定した場合、TEST.PDS、TEST.SDS.A01のように、ピリオド(.)で区切られた名前がTESTで始まるすべてのデータセットを選択して処理します。データセットのフル名前を記述した場合は、そのデータセットのみ処理します。
TO=device=volser
移動またはコピーするデータセットの出力デバイス名とボリュームを指定します。
deviceは、ボリュームのデバイス名を指定しますが、文法に合わせるためのものであり、実際には無視されます。
PASSWORD
処理対象のデータセットがパスワードで管理されている場合、そのデータセットの移動またはコピーを指定します。
OpenFrameでは未サポート機能であるため、指定しても無視されます。
UNCATLG
移動またはコピー処理の後、データセット・カタログ情報の削除を指定します。ソース・データセットがカタログされていない場合は、指定しないようにします。
基本的に入力データセットのカタログ情報は削除されますが、コピーしたデータセットのカタログを削除する方法は、コマンド別に以下のような違いがあります。
-
MOVEの場合、コピーしたデータセットはカタログしません。
-
COPYの場合は、コピーしたデータセットのカタログはCATLGコマンドの指定に従います。
-
FROMコマンドが指定されると、UNCATLGは無視されます。
CATLG
COPYコマンドを記述した場合のみ有効です。コピーしたデータセットをカタログに登録します。コピーしたデータセットをカタログするために、ソース・データセットはカタログから削除します。
TODD=dd-name
DCB情報とLABEL情報を提供するDD文のDD名を指定します。(未サポート機能)
UNLOAD
出力データセットの権限情報を入力データセットの権限情報と同じく作成するときに指定します。(未サポート機能)
-
-
MOVE(COPY) PDS
区分データセットの移動またはコピーを指定するコマンドです。
以下は、MOVE(COPY) PDSコマンドの構文です。
[label] {MOVE|COPY} PDS=name ,TO=device=volser [,FROM=device=volser] [,EXPAND=n] [,UNCATLG] [,CATLG] [,RENAME=name] [,FROMDD=dd-name] [,TODD=dd-name] [,UNLOAD] [,COPYAUTH]
項目 説明 PDS=name
移動またはコピーする区分データセットの名前を指定します。
TO=device=volser
移動またはコピーする区分データセットの出力デバイス名とボリュームを指定します。
deviceは、ボリュームのデバイス名を指定しますが、文法に合わせるためのものであり、実際には無視されます。
FROM=device=volser
移動またはコピーするソース・データセットが存在するボリュームを指定します。
deviceは、ボリュームのデバイス名を指定しますが、文法に合わせるためのものであり、実際には無視されます。
MOVEコマンドでFROMを指定すると、ソース・データセットのカタログ情報を削除せず、出力データセットもカタログしません。したがって、入力データセットがカタログされている場合、FROMは指定しないことをお勧めします。
EXPAND=n
移動またはコピーする区分データセットのブロック割り当ての増加値を指定します。(未サポート機能)
UNCATLG
移動またはコピー処理の後、データセット・カタログ情報の削除を指定します。ソース・データセットがカタログされていない場合は、指定しないようにします。
基本的に入力データセットのカタログ情報は削除されますが、コピーしたデータセットのカタログを削除する方法は、コマンド別に以下のような違いがあります。
-
MOVEの場合、コピーしたデータセットはカタログしません。
-
COPYの場合は、コピーしたデータセットのカタログはCATLGコマンドの指定に従います
-
FROMコマンドが指定されると、UNCATLGは無視されます。
CATLG
COPYコマンドを記述した場合のみ有効です。コピーしたデータセットをカタログに登録します。
RENAMEとFROMの指定を省略した場合、コピーしたデータセットをカタログするために、ソース・データセットはカタログから削除します。
RENAME=name
出力データセットの新しい名前を指定します。
同じボリューム内で移動またはコピーする場合は、RENAMEを必ず指定します。
FROMDD=dd-name
DCB情報とLABEL情報を提供するDD文のDD名を指定します。(未サポート機能)
TODD=dd-name
DCB情報をLABEL情報を提供するDD文のDD名を指定します。(未サポート機能)
UNLOAD
入力データセットをアンロード形式に変換して移動またはコピーすることを指定します。(未サポート機能)
COPYAUTH
出力データセットの権限情報を入力データセットの権限情報と同じく作成するときに指定します。(未サポート機能)
-
-
MOVE(COPY) VOLUME
指定したボリューム内に存在するすべてのデータセットの移動またはコピーを指定するコマンドです。
以下は、MOVE(COPY) VOLUMEコマンドの構文です。
[label] {MOVE|COPY} VOL[UME]=device=volser ,TO=device=volser [,PASSWORD] [,CATLG] [,TODD=dd-name] [,UNLOAD]
項目 説明 VOLUME=device=volser
移動またはコピーするボリュームのデバイス名を指定します。
deviceは、ボリュームのデバイス名を指定しますが、文法に合わせるためのものであり、実際には無視されます。
TO=device=volser
移動またはコピーするボリュームの出力デバイス名とボリュームを指定します。
deviceは、ボリュームのデバイス名を指定しますが、文法に合わせるためのものであり、実際には無視されます。
PASSWORD
処理対象のデータセットがパスワードで管理されている場合、そのデータセットの移動またはコピーを指定します。(未サポート機能)
CATLG
COPYコマンドを記述した場合のみ有効です。コピーしたデータセットをカタログに登録します。
コピーしたデータセットをカタログするために、ソース・データセットはカタログから削除します。
TODD=dd-name
DCB情報とLABEL情報を提供するDD文のDD名を指定します。(未サポート機能)
UNLOAD
入力データセットの権限情報を入力データセットの権限情報と同じく作成するときに指定します。(未サポート機能)
9.3. 補助コマンド
本節では、JSGMOVEの補助コマンドについて説明します。
-
INCLUDE
MOVE(COPY) PDSコマンドと一緒に使用します。移動またはコピーの対象となるデータセットとメンバーを追加するコマンドです。INCLUDEコマンドの構文は以下のとおりです。
[label] INCLUDE DSN[AME]=name ,MEMBER=name [,FROM=device=volser] ])}
項目 説明 DSNAME=name
追加する区分データセットの名前を指定します。
MEMBER=name
指定した区分データセットの追加するメンバー名を指定します。
FROM=device=volser
移動またはコピーするソース区分データセットが存在するボリュームを指定します。
deviceは、ボリュームのデバイス名を指定しますが、文法に合わせるためのものであり、実際には無視されます。
-
EXCLUDE
MOVE(COPY) PDSコマンドと一緒に使用します。指定された区分データセットのメンバーのうち、特定のメンバーを処理対象から除外するコマンドです。
以下は、EXCLUDEコマンドの構文です。
[label] EXCLUDE MEMBER=name
項目 説明 MEMBER=name
移動またはコピーの対象となる区分データセットのメンバーから除外するメンバー名を指定します。
-
SELECT
MOVE(COPY) PDSコマンドと一緒に使用します。指定された区分データセットのメンバーのうち、特定のメンバーのみを移動またはコピーするコマンドです。
以下は、SELECTコマンドの構文です。
[label] SELECT MEMBER={(name[,name][,...]) | ((name,newname),[,(name,newname)][,...])}
項目 説明 MEMBER=name
移動またはコピーの対象として指定した区分データセットのメンバーのうち、処理するメンバー名を指定します。
(name,newname)
移動またはコピーの対象として指定した区分データセットのメンバーのうち、処理するメンバー名と処理後の変更メンバー名を指定します。
-
REPLACE
MOVE(COPY) PDSコマンドと一緒に使用します。指定された区分データセットのメンバーのうち特定のメンバーを除いて、別のデータセットの同じ名前を持つメンバーで置き換えるコマンドです。
以下は、REPLACEコマンドの構文です。
[label] REPLACE DSN[AME]=name ,MEMBER=name [,FROM=device=volser]
項目 説明 DSNAME=name
置き換えるメンバーが属している区分データセットの名前を指定します。
MEMBER=name
移動またはコピーの対象として指定した区分データセットのメンバーのうち、処理するメンバー名と処理後の変更メンバー名を指定します。
FROM=device=volser
指定したデータセットが存在するボリュームを指定します。移動またはコピーするソース区分データセットが存在するボリュームを指定します。
deviceは、ボリュームのデバイス名を指定しますが、文法に合わせるためのものであり、実際には無視されます。
9.4. 使用例
DEFVOLボリュームに存在しており、かつカタログに登録されているTEST.DS01データセットとTEST.DS02データセットをボリューム100000に移動する例です。TEST.DS01はカタログに再登録されますが、TEST.DS02はカタログに登録されません。
//MOVE10 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGMOVE //SYSPRINT DD SYSOUT=* //SYSIN DD * MOVE DSNAME=TEST.DS01,TO=3390=100000 MOVE DSNAME=TEST.DS02,TO=3390=100000,UNCATLG /*
DEFVOLボリュームに存在しているが、カタログに登録されていないTEST.DS01データセットとTEST.DS02データセットをボリューム100000にコピーする例です。コピー後にもTEST.DS01はカタログに登録されません。なた、TEST.DS02もCATLGを指定しましたが、ソース・データセットがカタログに登録されていないため、カタログに登録されません。
//COPY20 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGMOVE //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY DSNAME=TEST.DS01,FROM=3380=DEFVOL,TO=3390=100000 COPY DSNAME=TEST.DS02,FROM=3380=DEFVOL,TO=3390=100000,CATLG /*
カタログに登録されているTEST.DS01データセットの名前をTEST.DS02に変更して、DEFVOLボリュームから100000ボリュームにコピーする例です。
//COPY30 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGMOVE //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY DSNAME=TEST.DS01,FROM=3380=DEFVOL,TO=3390=100000, RENAME=TEST.DS02 /*
区分データセットのTEST.PDS01のメンバーであるAを除いて、DEFVOLボリュームから200000ボリュームに移動する例です。このとき、100000ボリュームのTEST.PDS02のメンバーであるDを追加して処理します。
//MOVE40 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGMOVE //SYSPRINT DD SYSOUT=* //SYSIN DD * MOVE PDS=TEST.PDS01,FROM=3380=DEFVOL, TO=3390=200000 EXCLUDE MEMBER=A INCLUDE DSNAME=TEST.PDS02,MEMBER=D, FROM=3390=100000 /*
カタログに登録されていない区分データセットのTEST.PDS01をDEFVOLボリュームから100000ボリュームにコピーする例です。TEST.PDS02のメンバーAに置き換えてコピーし、メンバーCを追加してコピーします。
//COPY50 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGMOVE //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY PDS=TEST.PDS01,FROM=3380=DEFVOL, TO=3390=200000 REPLACE DSNAME=TEST.PDS02,MEMBER=A INCLUDE DSNAME=TEST.PDS02,MEMBER=C /*
区分データセットのTEST.PDS01の名前をTEST.PDS02に変更してDEFVOLボリュームから100000ボリュームにコピーする例です。コピーの対象となるメンバーはA、B、Cであり、Bメンバーは名前をXに変更してコピーします。
//COPY60 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGMOVE //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY PDS=TEST.PDS01,RENAME=TEST.PDS02, TO=3390=100000, FROM=3380=DEFVOL SELECT MEMBER=(A,(B,X),C) /*
カタログに登録されているデータセットのうち、MOVE.TEST01、MOVE.PDS、MOVE.SDS91のようにMOVEで始まるすべてのデータセットを100000ボリュームに移動する例です。
//MOVE70 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGMOVE //SYSPRINT DD SYSOUT=* //SYSIN DD * MOVE DSGROUP=MOVE,TO=3390=100000 /*
DEFVOLボリュームに存在するすべてのデータセットを100000ボリュームに移動する例です。
//MOVE80 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGMOVE //SYSPRINT DD SYSOUT=* //SYSIN DD * MOVE VOLUME=3380=DEFVOL, TO=3390=100000 /*
9.5. 注意事項
以下は、JSGMOVEユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
コード0を返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力し、該当するエラーコードを返します。
以下は、JSGMOVEユーティリティで発生する可能性のあるエラーコードです。
コード 説明 4
コマンドを正常に実行できない場合です。
8
回復可能なエラーコードです。
12
回復不能なエラーコードです。
同エラーが発生すると、ユーティリティを終了します。
16
SYSINまたはSYSPRINTがオープンできない場合です。
同エラーが発生すると、ユーティリティを終了します。
10. JSGPROGM
非VSAMデータセットを管理するために使用するユーティリティです。
以下は、JSGPROGMユーティリティの機能です。
-
データセットまたは区分データセットのメンバーをボリュームから物理的に削除します。
-
データセットをカタログまたはアンカタログします。
10.1. DDの設定
以下は、DDの設定項目です。
項目 | 説明 |
---|---|
SYSPRINT DD |
JSGPROGMメッセージが保存されるデータセットを指定します。 |
SYSIN DD |
JSGPROGMのコマンドを指定します。 |
10.2. コマンドの設定
本節では、SYSIN DDで設定するJSGPROGMのコマンドについて説明します。
-
SCRATCH
ディスク・ボリュームに保存されている物理的ファイル(データセットまたは区分データセットのメンバー)を削除します。SCRATCHの対象データセットがカダログに登録されている場合は、カタログ情報も一緒に削除します。
以下は、SCRATCHコマンドの構文です。
[label] SCRATCH {VTOC|[DSNAME|DSN]=name}, VOL=anyname=serial [,MEMBER=name][,SYS]
項目 説明 VTOC
指定したボリュームに存在するすべてのデータセットを削除する場合に使用します。
DSNAME|DSN
削除するデータセットの名前を指定します。
VOL
削除するデータセットのボリュームを指定します。
anynameにボリュームのデバイス名を指定するか、任意の名前を指定します。設定したanynameは文法に合わせるためのものであり、実際には無視されます。
MEMBER
区分データセットのメンバーのみを削除したい場合に使います。削除するメンバーの名前を指定します。
SYS
一時データセットのみを削除したい場合に使用するパラメータです。
たとえば、データセット名が「&」で始まる場合は削除の対象となります。この項目はVTOCを指定した場合にのみ有効です。
-
CATLG
カタログに非VSAMデータセットの基本情報を登録します。
以下は、CATLGコマンドの構文です。
[label] CATLG [DSNAME|DSN]=name, VOL=anyname=serial
項目 説明 DSNAME | DSN
カタログに登録するデータセットの名前を指定します。
VOL
データセットのボリュームを指定します。
anynameにボリュームのデバイス名を指定するか、任意の名前で指定します。設定したanynameは文法に合わせるためのものであり、実際には無視されます。
-
UNCATLG
カダログに登録されている非VSAMデータセットをアンカダログします。
UNCATLG文を使用してカタログに登録された特定のデータセットを削除することができます。ただし、ボリュームに保存されている物理的なファイルは削除できません。ボリュームに保存されているファイルを削除したい場合は、SCRATCH文を使用して物理的なファイルを削除した後、UNCATLG文を使用してカタログに登録されたデータセット情報を削除します。
以下は、UNCATLGコマンドの構文です。
[label] UNCATLG DSNAME=name
項目 説明 DSNAME
カタログから削除するデータセット名を指定します
10.3. 使用例
以下は、ボリューム・シリアル番号が100000であるVTOCに存在する一時データセットを削除する例です。
//CATALOG JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGPROGM //SYSPRINT DD SYSOUT=* //VOLDD DD VOL=SER=100000,DISP=OLD //SYSIN DD * SCRATCH VTOC,VOL=SER=100000,SYS /*
以下は、シリアル番号が100000であるボリュームに存在するTEST01データセットをカタログに登録する例です。
//CATALOG JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGPROGM //SYSPRINT DD SYSOUT=* //SYSIN DD * CATLG DSNAME=JSGPROGM.TEST01,VOL=SER=100000 /*
以下は、シリアル番号が100000であるボリュームからTEST01データセットを削除した後、カタログに登録されているTEST01データセットを削除する例です。
//CATALOG JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP1 EXEC PGM=JSGPROGM //SYSPRINT DD SYSOUT=* //SYSIN DD * SCRATCH DSNAME=JSGPROGM.TEST01,VOL=SER=100000 UNCATLG DSNAME=JSGPROGM.TEST01 /*
10.4. 注意事項
以下は、JSGPROGMユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
バッチ・アプリケーションから受信したコードを返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力し、該当するエラーコードを返します。
以下は、JSGPROGMユーティリティで発生する可能性のあるエラーコードです。
コード 説明 8
警告エラーであり、以下の場合に該当します。
-
データセットが見つからない場合
12
回復不能エラーであり、以下の場合に該当します。
-
データセット関連(pgmdd、open/close、read/write)エラー
-
SYSIN DDコマンドの文法エラー
-
その他のJSGPROGMユーティリティのエラー
16
システム関連のエラーであり、以下の場合に該当します。
-
OpenFrameシステム・ライブラリの初期化に失敗した場合
-
類似したユーティリティには、KQCAMSがあります。 |
11. KBKARCS
KBKARCSユーティリティは、BACKUPとRESTOREコマンドを使用して、主に天災によるシステムの損傷に備えたり、重要なデータを保護したりする目的で、データセットやボリュームのバックアップおよび復元機能をサポートします。
BACKUPコマンドは、JCL文で記述したデータセットやボリュームを1つのデータセットにまとめて、指定されたボリューム・ディレクトリに格納します。RESTOREコマンドは、BACKUP処理したデータセットを元の状態に戻して、指定したボリューム・データセットに復元します。この際、内部的にはUNIXが提供するtarプログラムを使用します。
OpenFrameではBACKUPコマンドを処理する際、BACKUPの対象となるデータセットのカタログ情報を別途のメタ情報ファイルで構成してBACKUP対象のデータセットと一緒にまとめておきます。RESTOREコマンドを処理する際は、このメタ情報ファイルを先に読み込んで、BACKUP処理時のカタログ情報に復元させます。
11.1. DDの設定
以下は、BACKUPとRESTOREのDD設定項目です。
-
BACKUP
項目 説明 SYSIN DD
BACKUPコマンドと、それに関連するオプションを記述します。
FROM DDのためのDD
SYSIN DDに記述した制御文のうち、FROM DD文で指定したDD名と同じであり、バックアップ対象のデータセット・ボリューム情報が記述されたDDです。
TO DDのためのDD
SYSIN DDに記述した制御文のうち、TO DD文で指定したDD名と同じであり、新規作成するバックアップ・データセットの情報が記述されたDDです。
-
RESTORE
項目 説明 SYSIN DD
RESTOREコマンドと、それに関連するオプションを記述します。
FROM DDのためのDD
SYSIN DDに記述した制御文のうち、FROM DD文で指定したDD名と同じであり、復元対象のバックアップ・データセットが記述されたDDです。
TO DDのためのDD
SYSIN DDに記述した制御文のうち、TO DD文で指定したDD名と同じであり、復元されたデータセットを格納するボリュームを指定します。
11.2. コマンドの設定
BACKUPとRESTOREのコマンドは以下のように設定します。
-
BACKUP
1つ以上の非VSAMデータセットまたはボリュームを1つのデータセットとしてバックアップ処理するコマンドです。
以下は、BACKUPコマンドの構文です。
BACKUP VOLUME | DATASET(dsname[,dsname,...]) [FROM(DD(ddname))] TO(DD(ddname)) [LIST] [DELETE]
項目 説明 VOLUME
ボリューム・バックアップを行います。DATASET文と一緒に記述できません。
DATASET
ファイル・バックアップを行います。
データセット名を1つ以上記述することが可能であり、ワイルドカード文字を使用してバックアップ対象のデータセットをフィルタリングすることもできます。ワイルドカード文字の詳細については、参考のワイルドカード文字のフィルタリングの例を参照してください。
FROM DD
バックアップ対象ボリュームのDD名を記述します。
TO DD
バックアップ処理における出力ボリュームのDD名を記述します。
LIST
バックアップ処理が完了したデータセットの情報をSYSPRINT DD文で指定したファイルに出力します。
DELETE
バックアップ処理が完了したデータセットを削除します。
-
RESTORE
1つのファイルとしてバックアップ処理されたデータセットを、元の非VSAM形式のデータセットに復元します。
以下は、RESTOREコマンドの構文です。
RESTORE DATASET(dsname[,dsname,...]) FROM(DD(ddname)) [TO(DD(ddname))] [RENAME((old_name,new_name),...)] LIST
項目 説明 DATASET
バックアップ処理されたデータセットから復元するデータセット名を1つ以上記述します。
ワイルドカード文字を使用して復元対象のデータセットをフィルタリングすることができます。ワイルドカード文字の詳細については、参考のワイルドカード文字のフィルタリングの例を参照してください。
FROM DD
復元処理するボリュームのDD名を記述します。
TO DD
復元処理時に格納されるボリュームのDD名を記述します。
RENAME
データセットの名前を変更して復元する場合、復元対象のデータセットの名前と変更するデータセットの名前を指定します。
LIST
特定のデータセット名を変更して復元する場合、復元対象のデータセット名と変更後のデータセット名を明示します。ワイルドカードを指定することもできますが、OpenFrameの制約により、使用できるのは「%」のみです。
11.3. 使用例
以下は、BACKUP機能を使用して複数の非VSAMデータセットを1つのデータセットとしてバックアップ処理する例です。
KBKARCS.TEST01、KBKARCS.TEST02、KBKARCS.TEST03データセットをOUTDDで記述したデータセットKBKARCS.BACKUPED.DSにまとめてバックアップ処理し、バックアップされたデータセットを削除します。
/********************************************************************** //*** KBKARCS LOGICAL BACKUP *** //********************************************************************* //KBK01 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //JS010 EXEC PGM=KBKARCS //INDD DD VOL=SER=100000,UNIT=SYSDA,DISP=SHR //OUTDD DD DSN=KBKARCS.BACKUPED.DS,UNIT=3380,DISP=(NEW,CATLG,DELETE) //SYSIN DD * BACKUP DATASET(KBKARCS.TEST01,KBKARCS.TEST02,KBKARCS.TEST03), FROM(DD(INDD)),TO(DD(OUTDD)),DELETE /* //SYSPRINT DD SYSOUT=* *
以下は、バックアップされたデータセットを非VSAMデータセットに復元する例です。
KBKARCS.TEST01、KBKARCS.TEST02、KBKARCS.TEST03データセットをKBKARCS.BACKUPED.DSデータセットに復元し、復元されたデータセット・リストを出力します。
//********************************************************************* //*** KBKARCS LOGICAL RESOTRE *** //********************************************************************* //KBK02 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //JS010 EXEC PGM=KBKARCS //INDD DD DSN=KBKARCS.BACKUPED.DS,DISP=OLD //DASD1 DD VOL=SER=100000,UNIT=3380,DISP=OLD //SYSIN DD * RESTORE DATASET(KBKARCS.TEST01,KBKARCS.TEST02,KBKARCS.TEST03), FROM(DD(INDD)),TO(DD(OUTDD)),LIST /* //SYSPRINT DD SYSOUT=*
11.4. 注意事項
OpenFrameでのKBKARCSユーティリティは、非VSAM形式のデータセットのみ処理可能であり、VSAM形式のデータセットの処理はサポートしません。
[参考]
DATASET文でバックアップまたは復元対象のデータセット名に対して、ワイルドカード文字を使用したフィルタリングが可能です。
フィルターキー | 説明 |
---|---|
* (single asterisk) |
基本的に1つの修飾子とマッチします。また、1つの修飾子内の0個以上の文字とマッチすることができます。 |
** (double asterisk) |
0個以上の修飾子とマッチします。 |
? |
修飾子内の1つの文字とマッチします。 |
% (percent) |
0個以上の修飾子とマッチします。%の後に文字を指定することはできません。 |
修飾子(Qualifier)とは、ピリオド(.)を間に入れて記述された修飾語であり、データセット名を構成する要素です。たとえば、データセット名がSYS.LIBの場合、SYS1とLIBという2つの修飾子を有するといいます。
以下は、ワイルドカード文字を使用したフィルタリングの例です。
フィルタリング・データセット | フィルタリング対象のデータセット | フィルタリング非対象のデータセット |
---|---|---|
SYS1.*.LIST |
SYS1.TEST.LIST, SYS1.LIB.LIST |
SYS.TEST.LIST.TEMP, SYS1.LIST |
SYS1.LIB.*.* |
SYS1.LIB.LIST.TEMP, SYS1.LIB.A.B |
SYS1.LIB.LIST, SYS1.LIB.A.B.C |
SYS.*IB.LIST |
SYS.LIB.LIST, SYS1.IB.LIST |
SYS.LIBA.LIST, SYS.LIB.LIST.TEMP |
**.LIST |
SYS1.LIST, SYS1.LIB.LIST, SYS1.A.B.C.LIST |
SYS1.LIST.TEMP, SYS1.LIB.LISTA |
USER.LIB.** |
USER.LIB.LIST.TEMP, USER.LIB |
USER.LIBTEST.LIST, USER.LIBLIST |
SYS1.**.LIST |
SYS1.A.B.C.LIST, SYS1.LIST |
SYS1.LIST.ERR, SYS1.TEST.LIST.ERR |
**.*LIST |
SYS1.TEST.LIST, SYS1.TEST.A.B.OKLIST |
SYS1.LIST.ERR, SYS1.TEST.OKLIST.TEMP |
*.*.L*B |
SYS1.TEST.LIB, USER.LIB.LISTB, A.B.LB |
SYS1.TEST.LIBTEMP, SYS1.USER.LIB.TEMP |
%.LIST |
A.LIST, B.LIST |
AA.LIST, BB.LIST, LIST |
USER%.* |
USER1.LIST, USERA.LIST |
USEROK.LIST, USER1.OK.LIST, USER.LIST |
*%%* |
AA, BB, TEST, USER |
A, B, TEST.USER |
以下は、KBKARCSユーティリティによるバッチ・アプリケーションの実行結果についての説明です。
-
正常に実行した場合
アプリケーションから受信したコードを返します。
-
エラーが発生した場合
エラーメッセージをSYSPRINT DDに出力し、該当するエラーコードを返します。
以下は、KBKARCSユーティリティで発生する可能性のあるエラーコードです。
コード 説明 8
プログラムの実行中に特定のデータセットでエラーが発生したが、別のデータセットの処理は正常に実行した場合です。
12
回復不能なエラーが発生し、正常に実行できない場合です。
12. KQCAMS
KQCAMSはOpenFrameのVSAMと非VSAMデータセットおよびカタログ情報を管理するためのユーティリティです。
SYSIN DDに入力された各コマンドは、それぞれのコマンドが意味する作業を実行するためのコマンドと、各コマンドに関連する各種オプションまたはパラメータで構成されます。KQCAMSは、実行するコマンドをSYSIN DDから読み込んで動作します。
OpenFrameのKQCAMSプログラムは、従来のメインフレームのKQCAMSコマンドをそのまま使用し、OpenFrameのVSAMデータセットと非VSAMデータセット、そしてカタログを対象にして動作します。ユーザーはメインフレームのKQCAMSと同じ作業を行うことができます。
KQCAMSコマンドは、次のように分類されます。
-
機能コマンド
実際にユーザーが実行しようとする特定の作業を示すコマンドです。
コマンド 説明 すでに定義されているデータセットまたはカタログの属性を変更します。
以下のようなデータセット・オブジェクト(またはカタログ・エントリ)を定義するために使用されます。
VSAMと非VSAMデータセットおよびカタログを削除します。
カタログとVSAMデータセットを移植可能なデータセットにエクスポートするか、バックアップ・データセットを作成します。
EXPORTコマンドにより作成された移植可能なカタログとVSAMデータセットをインポートするか、バックアップされた状態のデータセットを元の状態に復元します。
カタログに登録されたVSAMと非VSAMデータセットに関する情報を表示します。
VSAMと非VSAMデータセットに保存されているレコードを出力して表示します。
VSAMと非VSAMデートセットの内容をコピーします。
VSAMデータセットの異常終了(close)により、間違ったデータセット情報でカタログされていないかを確認し、正しく修正します。
VSAMデータセットが終了する際、当該データセットの最後の位置とレコード数などの統計情報がカタログに保存されます。正常に終了していない場合は、カタログ情報と実際のデータセットの状態情報が一致しないことがあります。VERIFYコマンドを使うと、こうした不一致を正しく変更することができます。
-
補助コマンド
一連のKQCAMSコマンドの実行を制御するための補助コマンドです。
コマンド 説明 実行されたコマンドの条件コード値(LASTCCまたはMAXCC)に従って、次に実行するコマンドを分岐させるために使用します。
いかなる動作も起こさない、文法のためのコマンドです。
IF-THEN-ELSEコマンドのTHENまたはELSEの後に、いかなる作業も実行しないことを明示的に示すために使用します。
MAXCCやLASTCCの値を特定の値に強制的に設定するために使用します。
プログラムの実行中に、CANCELコマンドに遭遇するとKQCAMSの実行が中止され、CANCELコマンド以降のコマンドは処理されません。
PARM
KQCAMSの実行中に適用されるオプションおよびパラメータ値を指定します。(未サポート機能)
-
非機能コマンド
エラーが発生しないようにだけ処理し、実際には機能しないコマンドです。
コマンド 説明 特定データセットの代替索引を作成します。
特定のクラスタに対して、インデックスおよびデータコンポーネントの整合性を検査します。
12.1. コーディングルール
KQCAMSを使用してコーディングする際、共通して適用されるルールは以下のとおりです。
-
ハイフン(-)
1つのコマンドを複数の行にわたって作成する場合、各行の末尾にハイフン(-)を入力し、次の行に続けてコマンドの残りの部分をコーディングします。ハイフン(-)は、キーワードやパラメータ値の間にはコーディングできません。一般的にキーワードやパラメータ値の境界になる部分に、行が続くことを示すために使用します。
以下は、ハイフン(-)を使用してコーディングする例です。
LISTCAT ENT( - TEST.CLUS1 - TEST.KSDS1 - TEST.RRDS1 - TEST.SDS1)
複数行にわたって作成されたコマンドの最終の行にはハイフン(-)をコーディングしないように注意してください。
-
コメント
コメントはKQCAMSコマンドの間に入力できます。ただし、キーワードやパラメータ値の間にコメントを記述することはできません。
コメントに特別な機能はありませんが、1つのコマンドとして見なされるため、コマンドの途中にコメントを追加する場合は、該当する行の末尾にハイフン(-)を入力する必要があります。コメントは、空白やコンマ(,)と同様、KQCAMS文法でフィールドを区切る役割もするため、「/*」と「*/」の間に入力します。
以下は、コメントを正しく記述した例です。
/* This is KQCAMS Comment */ /* This is multi line Comment comment continued from above line */ LISTCAT ENT( /* Comment 1 */ - TEST.KSDS1 /* Comment 3 */ - TEST.SDS1 /* Comment 4 */ ) /* Comment 5 */
IF-THEN-ELSE文の途中にコメントを使用する場合は、コメントによってIF-THEN-ELSEの構造が意図しない位置で終わらないように注意します。
12.2. DDの設定
OpenFrameのKQCAMSは、JCLを使用してバッチで実行する方式と、UNIXシステムのコマンド・ラインで直接実行するインタラクティブ方式の両方をサポートします。
-
JCLを使用したジョブの実行(using JCL as JOB)
JCLを使用してジョブの1つのステップとしてKQCAMSを実行する場合、KQCAMSは以下のようなDD文を使用します。
項目 説明 SYSIN DD
KQCAMSが実行するコマンドを記述します。
データセットのレコード長は72列を超えることはできません。コマンドが長くなる場合はハイフン(-)を使用します。
SYSPRINT DDまたはSYSOUT DD
KQCAMSの実行結果と実行中に発生した、注意が必要な情報メッセージ、警告メッセージ、そしてエラーメッセージなどを保存するデータセットを記述します。
SYSPRINT DDを記述していないか、指定したデータセットの割り当ておよびオープンに失敗した場合、KQCAMSはコマンドを実行せずに終了し、条件コード16を返します。
追加のDD
KQCAMSコマンドの一部はJCLに記述されたDDを使ってコマンドの対象となるddnameやentrynameを間接的に指定することができます。この場合、KQCAMSはデータセットを動的に割り当てずに、ジョブの実行を制御するtjclrunがジョブ・レベルで予め割り当てたデータセットを継承して使用します。
一般的にコマンドの対象となるデータセットを指定するパラメータは、JCLに記述されたddnameを利用してFILE(ddname)形式のパラメータ名を持ちます。
KQCAMSで動的割り当てを使用してデータセットを指定するパラメータは、DATASET(entryname)形式のパラメータ名を持ちます。
以下は、前述した追加のDDに関する例です。REPRO BLDINDEX PRINTのパラメータを使用して、JCLで割り当てられたデータセットを継承して動作します。
INFILE(ddname), OUTFILE(ddname)
以下は、REPRO BLDINDEX PRINTのパラメータです。KQCAMSで動的にデータセットを割り当てて動作します。
INDATASET(entryname), OUTDATASET(entryname)
JCLを使用してジョブの1つのステップとしてKQCAMSを実行するには、KQCAMSを呼び出すジョブ・ステップに、前述のDDを記述し、EXEC PGMにKQCAMSを指定した後、当該のJCLをサブミットします。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //REPRO EXEC PGM=KQCAMS //INDD DD DSN=VSAM.KSDS1,DISP=(OLD,KEEP) //OUTDD DD DSN=VSAM.KSDS2,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSIN DD * REPRO INFILE(INDD) - OUTFILE(OUTDD) - SKIP(50000) COUNT(10000) /* //
-
コマンド・ラインでの実行(using from Command line)
UNIXシステムのコマンドラインでKQCAMSを直接実行します。この場合、SYSIN DDおよびSYSPRINT DDの代わりに標準入出力ストリーム(stdin/stdout/stderr)を使用して動作します。つまり、stdinからKQCAMSコマンドを読み込んでコマンド単位で実行し、stdout/stderrには作業の結果およびエラーメッセージを出力するインタラクティブなインタプリタ方式です。
UNIXシステムのコマンド・ラインで以下のコマンドを実行すると、KQCAMSはDEFINE.TEST.CLUS1.CMDというVSAMデータセットを削除し、再定義を行います。
$ KQCAMS < DEFINE.TEST.CLUS1.CMD
DEFINE.TEST.CLUS1.CMDは一般的なUNIXテキスト・ファイルであり、以下の内容が含まれています。
DELETE TEST.CLUS1 CLUSTER DEFINE CLUSTER - (NAME(TEST.CLUS1) - VOLUMES(100000) - INDEXED - KEYS(07 0) - CYL(70 10) - RECORDSIZE(200 200) - SHR(2 3)) - DATA (NAME(TEST.CLUS1.DATA) - CONTROLINTERVALSIZE(4096) ) - INDEX(NAME(TEST.CLUS1.INDEX) - CONTROLINTERVALSIZE(4096) )
DEFINE.TEST.CLUS1.CMDファイルは、KQCAMS UNIXコマンド・ラインでのstdinリダイレクションを表示します。
-
制約事項(Limitation)
DD(ddname)を使って割り当てられたデータセットを継承して使用するには、OpenFrame Batch環境、特にtjclrunが必要となります。したがって、UNIXシステムのコマンド・ラインでは、JCLを使用してジョブ・ステップとしてKQCAMSを実行するときに可能であったddnameを使用したデータセットの指定が不可能になります。
UNIXコマンドを実行する場合、KQCAMSコマンドの対象となるデータセットを指定するには、常にDATASET(entryname)形式で指定して使用します。
12.3. 機能コマンド
KQCAMSの機能コマンドの使用方法について説明します。
-
ALTER
DEFINE文でカタログに既に登録されているデータセットとカタログ・エントリの情報を一部変更することができます。ALTERコマンドの構文は以下のとおりです。
ALTER entryname [EMPTY|NOEMPTY] [FILE(ddname)] [LIMIT(limit)] [NULLIFY( [OWNER] [RETENTION])] [OWNER(ownerid)] [ROLLIN] [SCRATCH|NOSCRATCH] [SHAREOPTIONS(crossregion[ crosssystem])] [STORAGECLASS(class)] [STRNO(number)] [TO(date)|FOR(days)] [CATALOG(catname)]
項目 説明 entryname
属性を変更したい既存のデータセットやカタログ・エントリのエントリ名を指定します。
ROLLIN
GDGベースとの関連付け(association)がまだ行われていない状態(deferred rolled-in state)なのか、あるいは切断された状態(rolled off state)にあるGDSをGDGベースと関連付け状態(rolled-in state)に変更するときに指定します。
CATALOG
entrynameに指定されたカタログ・エントリを検索する際に使用するカタログを明示的に指定します。指定していない場合は、カタログの検索順によって決定されます。
カタログ・エントリのタイプと、カタログ・エントリに該当するユーザー・データセットにデータがロードされているかどうかにより、変更できる属性と変更できない属性があります。
以下は、OpenFrame KQCAMSのALTERコマンドがサポートする各カタログ・エントリのタイプに応じて変更可能な属性をまとめた表です。「O」は変更が可能な属性です。
エントリ・タイプ
変更可能な属性
AIX
AIX DATA
AIX INDEX
CLUSTER
CLUSTER DATA
CLUSTER INDEX
PATH
UCAT DATA
UCAT INDEX
NON-VSAM
GDG
NEWNAME
-
-
-
-
-
-
O
-
-
O
-
EMPTY
-
-
-
-
-
-
-
-
-
-
O
NOEMPTY
-
-
-
-
-
-
-
-
-
-
O
LIMIT
-
-
-
-
-
-
-
-
-
-
O
NULLIFY
-
-
-
-
-
-
O
-
-
O
O
OWNER
-
-
-
-
-
-
O
-
-
O
O
ROLLIN
-
-
-
-
-
-
-
-
-
O
-
RETENTION
-
-
-
-
-
-
O
-
-
O
O
SCRATCH
-
-
-
-
-
-
-
-
-
-
O
NOSCRATCH
-
-
-
-
-
-
-
-
-
-
O
TO
-
-
-
-
-
-
O
-
-
O
O
FOR
-
-
-
-
-
-
O
-
-
O
O
変更したいカタログ・エントリに新しい属性値を指定するためには、各パラメータ以外にも変更対象となるカタログ・エントリを指定するためのパラメータが必要です。
以下は、カタログTESTCATに登録されたTEST.GDG1という名前のGDGの最大世代数を255に、有効期限を2006年の300日目の日付に属性を変更する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //ALTGDG EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * ALTER TEST.GDG1 - LIMIT(255) - TO(2006300) - CATALOG(TESTCAT) /* //
-
DEFINE
DEFINEコマンドで共通で使用可能なパラメータは以下のとおりです。
DEFINE Commands NAME(entryname) {CYLINDERS(primary[secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])} VOLUMES(volser[volser...]) [CONTROLINTERVALSIZE(size)] [DATACLASS(class)] [MANAGEMENTCLASS(class)] [OWNER(ownerid)] [RECATALOG|NORECATALOG] [RECORDSIZE(average maximum)] [STORAGECLASS(class)] [TO(date)|FOR(days)]) [DATA (...)] [INDEX (...)] [CATALOG(catname)]
項目 説明 NAME
DEFINEコマンドで作成または定義するカタログ・オブジェクトの名前を指定します。
VOLUMES
データセットを作成する場合、データセットを保存するボリュームのシリアル番号を指定します。
DATACLASS
データ・クラス値(1~8文字)を指定します。
データ・クラスはSMS(Storage Management Subsystem)で定義し、新しいデータセットの作成時に使用する多様な属性を持ちます。
データ・クラスを指定した場合、データ・クラスに定義されたDEFINEの属性は指定する必要はありません。指定したデータ・クラスに定義された属性とDEFINEコマンドに明示的に指定された属性が異なる場合は、DEFINEコマンドに指定された属性が優先されます。
MANAGEMENTCLASS
管理クラス値(1~8文字)を指定します。
管理クラスはSMSで定義し、作成されるデータセットの管理作業に影響を与えるTOやFORなどの多様な属性を持ちます。
DEFINEコマンドにTOやFORが明示的に指定され、管理クラスでも同じ属性がある場合は、データクラスとは異なり、管理クラスに定義された値が優先されます。
OWNER
データセットの所有者を指定します。
RECATALOG|
NORECATALOG
既存のVVDSに保存されている情報に基づいて、クラスター、代替索引のデータおよび索引コンポーネント、非VSAMデータセットに該当するカタログ・エントリを再作成します。クラスターや代替索引の場合、VVDSに存在するVVR(VSAM VOLUME RECORD)の内容がカタログ・エントリの再作成に使用されます。
この際、VVRに含まれていない一部の情報は、DEFINEコマンドを使用して直接記述する必要があります。このようなパラメータには、INDEXED、NONINDEXED、NUMBEREDなどのVSAMレコードの構成を指定するパラメータと、該当するデータセットが本来作成されていたVOLUMESパラメータ、VRDSの場合のRECORDSIZEパラメータ、ALTERNATEINDEXの場合のNAME、RELATE、VOLUMEパラメータなどがあります。
作成するカタログ・エントリが非VSAMデータセットの場合は、DEFINEコマンドを使って、VOLUMESおよびDEVICETYPESパラメータを直接指定する必要があります。PATHの場合は、VVDSに保存される情報がないため、DEFINEコマンドにNAMEとPATHENTRYパラメータのみを指定するとRECATALOGが可能です。
RECORDSIZE
CLUSTER、ALTERNATEINDEX、USERCATALOGを作成する際、該当データセットに保存されるレコード長をaverageとmaximumに設定します。
両方の値を同一指定すると、固定長レコード(Fixed Length Record)を意味します。
-
USERCATALOGに設定されたこのパラメータは無視されます。USERCATALOGはVSAMが処理するデータセットであるため、VSAMはUSERCATALOGのRECORDSIZEパラメータに常に(4096 32600)を使用します。
-
CLUSTERに対しては、このパラメータが省略された場合、SPANNEDパラメータが指定されていれば(4096 32600)がデフォルト値として使用されます。そうでない場合は(4089 4089)がデフォルト値として使用されます。
-
ALTERNATEINDEXに対してこのパラメータが省略された場合は常に(4089 32600)がデフォルト値として使われます。ALTERNATEINDEXは、一般的に多くの非一意キーが存在する点を考慮して、VSAM内部でSPANNEDが指定されたKSDSのように処理されます。つまり、ALTERNATEINDEXでは、SPANNEDパラメータは無視されます。
STORAGECLASS
ストレージ・クラス値(1-8文字)を指定します。
ストレージ・クラスはSMSで定義し、作成されるデータセットに割り当てられるストレージの容量と関連した属性を持ちます。ストレージ・クラスを指定する場合、必須パラメータであるCYLINDERSのようなストレージの割当サイズを指定するパラメータを指定する必要がありません。
DEFINEコマンドにストレージの割当量が直接指定され、ストレージ・クラスに定義された値と異なる場合は、ストレージ・クラスに定義された値が優先されます。
TO|FOR
データセットおよびカタログ・エントリを作成する際、当該オブジェクトの有効期限を指定します。
-
TO: 有効期限を指定します。
-
FOR: 有効日数を指定します。作成日に有効日数を足した日付が有効期限になります。
DATA, INDEX
CLUSTER、ALTERNATEINDEX、USERCATALOGのようにデータ・コンポーネントと索引コンポーネントが持つことができるVSAMクラスターを作成する場合、データ・コンポーネントと索引コンポーネントのそれぞれに対して上記で説明したパラメータ(一部該当するパラメータ)を別途指定することができます。
たとえば、ストレージの割当サイズを示すCYLINDERSパラメータは、DEFINE CLUSTERの際にクラスタのサブ・パラメータとして指定でき、またDATAやINDEXコンポーネントのサブ・パラメータとしても指定できます。このように別途指定した場合、コンポーネント別に適用することが可能であれば、コンポーネント別に異なる値が適用されます。
CATALOG
DEFINEコマンドで定義するカタログ・エントリが登録されるカタログの名前を指定します。
この設定を省略すると、該当するジョブのSTEPCATやJOBCATに指定されたカタログあるいはカタログ・エントリの名前の一部をエイリアスとして使用するユーザー・カタログがある場合はそのユーザー・カタログに登録されます。
最後まで登録するカタログが決まらない場合は、マスター・カタログに登録します。詳細は、OpenFrame Base『データセットガイド』の「統合カタログ」のカタログの検索順序を参照してください。
DEFINEコマンド別に指定可能なパラメータの種類については、DEFINEコマンド節でそれぞれ説明します。本節では、共通で使用するパラメータについて説明します。
-
-
DEFINE ALIAS
非VSAMデータセットやユーザー・カタログのエイリアスをカタログに作成します。エイリアスに該当するカタログ・エントリも、元のデータセット名とエイリアスだけを含んでいます。別途のユーザー・データを保存するためのデータセットは存在しません。
ユーザー・カタログを除くVSAMデータセットのエイリアスを作成することはできません。
DEFINE ALIASコマンドの構文は以下のとおりです。
DEFINE ALIAS (NAME(aliasname) RELATE(entryname) SYMBOLICRELATE(entryname)) [CATALOG(catname)]
項目 説明 NAME
作成するエイリアスの名前を指定します。
RELATE
エイリアスが指す実エントリのentrynameを指定します。
CATALOG
作成するエイリアスを登録するカタログを指定します。
以下は、TEST.NVSAM1のエイリアスとしてTEST.ALIAS1を作成し、TESTCATカタログに登録する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //DEFALI EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE ALIAS(NAME(TEST.ALIAS1) - RELATE(TEST.NVSAM1)) - CATALOG(TESTCAT) /* //
-
DEFINE ALTERNATEINDEX
DEFINE ALTERNATEINDEX(以下、AIX)コマンドを使用して、特定のデータセット(BASE CLUSTER)に対する別の索引方法を提供するAIXデータセットを定義します。
VSAMはベース・クラスターにレコードが追加、削除、または変更された場合、関連したAIXについて自動で変更を実行し、AIXが持続的に正しくベース・クラスターに対して別途の索引を実行できるようにします。内部構造上、AIXデータセットも1つのKSDSクラスター構造を持つデータセットであるため、DEFINE AIXに使用される殆どのパラメータはDEFINE CLUSTERのパラメータと同じです。
DEFINE AIXコマンドの構文は以下のとおりです。
DEFINE AIX (NAME(entryname) RELATE(entryname) {CYLINDERS(primary[secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])} VOLUMES(volser[ volser...]) [CONTROLINTERVALSIZE(size)] [DATACLASS(class)] [FILE(ddname)] [KEYS(length offset|64 0)] [OWNER(ownerid)] [RECATALOG|NORECATALOG] [RECORDSIZE(average maximum| 4086 32600)] [TO(date)|FOR(days)] [UNIQUEKEY|NONUNIQUEKEY] [UPGRADE|NOUPGRADE]) [DATA ({CYLINDERS(primary[secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])| [VOLUMES(volser[ volser...])] [CONTROLINTERVALSIZE(size)] [FILE(ddname)] [KEYS(length offset)] [NAME(entryname)] [OWNER(ownerid)] [RECORDSIZE(average maximum)] [UNIQUEKEY|NONUNIQUEKEY])] [INDEX ({CYLINDERS(primary[ secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])| [VOLUMES(volser[ volser...])] [CONTROLINTERVALSIZE(size)] [FILE(ddname)] [NAME(entryname)] [OWNER(ownerid)])] [CATALOG(catname)]
項目 説明 RELATE
現在定義するAIXと関連するベース・クラスター・データセットの名前を指定します。
ベース・クラスターとして使用するデータセットはVSAMデータセットの中でKSDSとESDS構造のデータセットのみが可能です。
AIXを定義するためには予めベース・クラスターとして使用するデータセットをDEFINE CLUSTERコマンドを使って作成する必要があります。
RECORDSIZE
AIXデータセット・クラスターのレコード・サイズを指定します。SPANNEDパラメータを指定する場合、最大32760まで指定できます。
UNIQUEKEY|
NONUNIQUEKEY
定義するAIXのキー値がデータセット全体で一意であるかどうかを指定します。
ベース・クラスターであるKSDSデータセットは常にUNIQUEKEYのみを指定することができますが、AIXを作成する場合はNONUNIQUEKEYも指定できます。
NONUNIQUEKEYが指定された場合、1つの補助キーと複数の主キーで構成されたレコードがAIXデータセット・クラスターのレコードとして保存されます。
UPGRADE
定義するAIXクラスタのベース・クラスターが変更された場合、AIXクラスターの内容を同時に変更して、AIXクラスターの内容が常にベース・クラスターに対して正しい代替索引を維持します。
以下は、VSAM.KSDS1に対して代替索引のVSAM.AIX1を作成する例です。
代替索引のVSAM.AIX1レコードのオフセット44から始まる7バイト部分を補助キーにします。補助キーは一意のものではなく、ベース・クラスターが変更されるときに自動的にアップグレードされます。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //DEFAIX EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE AIX (NAME(VSAM.AIX1) - RELATE(VSAM.KSDS1) - UPGRADE - NONUNIQUEKEY - RECORDSIZE(80 80) KEYS(7 44) - VOL(VOL100) - SHR(2 3)) /* //
-
DEFINE CLUSTER
DEFINE CLUSTERコマンドを使ってVSAMデータセットを定義します。必須属性と追加属性を一緒に指定することができます。
DEFINE CLUSTERコマンドの構文は以下のとおりです。
DEFINE CLUSTER (NAME(entryname) {CYLINDERS(primary[secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])| VOLUMES(vvolser[volser...]) [CONTROLINTERVALSIZE(size)] [DATACLASS(class)] [FILE(ddname)] [INDEXED|LINEAR|NONINDEXED|NUMBERED] [KEYS(length offset| 64 0] [MANAGEMENTCLASS(class)] [OWNER(ownerid)] [RECATALOG|NORECATALOG] [RECORDSIZE(average maximum)] [SPANNED|NONSPANNED] [STORAGECLASS(class)] [TO(date)|FOR(days)]) [DATA({CYLINDERS(primary[secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])} [VOLUMES(vvolser[ volser...])] [CONTROLINTERVALSIZE(size)] [FILE(ddname)] [KEYS(length offset)] [NAME(entryname)] [OWNER(ownerid)] [RECORDSIZE(average maximum)] [SPANNED|NONSPANNED])] [INDEX({CYLINDERS(primary[secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])} [VOLUMES(vvolser[volser...])] [CONTROLINTERVALSIZE(size)] [FILE(ddname)] [NAME(entryname)] [OWNER(ownerid)])] [CATALOG(catname)]
項目 説明 VOLUMES
データセットが位置するボリュームを指定します。
INDEXED | NONINDEXED | NUMBERED
KSDS、ESDS、RRDSなどデータセットの構造を指定します。
VRDSの場合は、NUMBEREDを指定し、RECORDSIZEを可変長に指定します。
KEYS
INDEXED構造でデータセットの1つのレコード上でキーになる部分の位置とキー長を指定します。
RECORDSIZE
データ当たりのレコードの平均長と最大長を指定します。
平均長と最大長に異なる値を指定すると、可変長のレコードであることを示します。
CONTROLIN TERVAL SIZE
VSAMデータセットのレコードの管理に使用するブロックのサイズを指定します。未指定の場合は、他のパラメータ値を基にVSAMが内部的に値を決めます。
SPANNEDパラメータを指定していない場合、CONTROLINTERVALSIZEは最大長のレコードを含めることができるサイズを指定する必要があります。
SPANNED
このパラメータが定義されているデータセットはCONTROLINTERVALSIZEより長いレコードを保存することができます。
NUMBERED構造のデータセットであるRRDSとVRDSに対してはこのパラメータを使用できません。
以下は、VSAM.KSDS1というINDEXED構造のデータセットを作成する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //DEFCLUS EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE CLUSTER (NAME(VSAM.KSDS1) - INDEXED - KEYS(10 0) - VOL(VOL100) - SPEED - ORDERED - SHR(2 3)) - INDEX (NAME (VSAM.KSDS1.I)) - DATA (NAME(VSAM.KSDS1.D) - CISZ(4096) - RECSZ(350 350)) /* //
VSAM.KSDS1に保存されるレコードは350バイトの固定長を持ち、キーフィールドはレコード上で最初の10バイトに位置し、VSAM.KSDS1データセットを構成する索引とデータ・コンポーネントの名前をそれぞれ明示的に指定しています。
-
DEFINE GDG (Generation Data Group)
GDGに該当するカタログ・エントリをカタログに作成します。GDGの1世代(Generation)に該当する非VSAMデータセットGDSとは異なり、GDGに該当する実データセットは存在しません。GDGカタログ・エントリは、それ以降に該当のGDGグループに属することになる複数のGDSを管理するための情報だけを持つカタログ・エントリです。
DEFINE GDGの実行結果としてデータセットは作成されず、単に当該GDGグループを管理するためのカタログ・エントリがカタログに追加されます。
DEFINE GDGコマンドの構文は以下のとおりです。
DEFINE GENERATIONDATAGROUP (NAME(entryname) LIMIT(limit) [EMPTY|NOEMPTY] [OWNER(ownerid)] [SCRATCH|NOSCRATCH] [TO(date)|FOR(days)]) [CATALOG(catname)]
項目 説明 NAME
作成するGDGベースの名前を指定します。
LIMIT
作成するGDGに含むことができるGDSメンバーの最大値を指定します。たとえば、100に指定した場合は100個を超えるGDSを作成することはできません。GDGメンバーは1個から255個まで作成することができます。
EMPTY|
NOEMPTY
GDGベースがGDSメンバーを含むことができる最大値に達した場合、全体GDSとGDGベース間の関連付け(association)を切断するには(rolled off status)EMPTYを指定します。
NOEMPTYを指定すると、最も古いGDSのみ関連が切れ、新規GDSをベースに含ませます。GDGベースとの関連が切れたGDSは単純な非VSAMデータセットとして見なされます。
OWNER
作成するGDGベースの所有者を明示的に指定します。
SCRATCH|
NOSCRATCH
GDGベースに含むことができるGDSメンバーの限界に達した場合、EMPTYとNOEMPTYの属性に応じて、全体または最も古いGDSデータセットとGDGベース間の関連が切れるとき(rolled off)、当該GDSが使用するデータを削除するか(SCRATCH)、あるいはそのままにしておくか(NOSCRATCH)を指定します。
TO|FOR
GDGグループの有効期限を設定します。
-
TO: 有効期限の最終日をユリウス日付形式で指定します。(2006年1月1日は2006001と指定)
-
FOR: 日数を指定します。(30を指定した場合、今日から30日間を意味します)
CATALOG
作成するGDGベースが登録されるカタログ名を指定します。
以下は、GDSメンバーを100個まで含むことができるTEST.GDG1という名前のGDGベースを作成し、2006年12月31日をGDGベースの有効期限として設定し、TESTCATというカタログに登録する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //DEFGDG EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE GDG (NAME(TEST.GDG1) - LIMIT(100) - TO(2006365)) - CATALOG(TESTCAT) /* //
-
-
DEFINE NONVSAM
一般的なPS(Physical Sequential)タイプの非VSAMデータセットを作成し、作成されたデータセットをカタログに登録します。
GDGに属する1つのGDSは非VSAMデータセットであるため、DEFINE NONVSAMコマンドを使ってGDSを作成することができます。
DEFINE NONVSAMコマンドの構文は以下のとおりです。
DEFINE NONVSAM (NAME(entryname) DEVICETYPES(devtype [devtype ...]) VOLUMES(volser [volser ...]) [OWNER(ownerid)] [RECATALOG|NORECATALOG] [TO(date)|FOR(days)]) [CATALOG(catname)]
項目 説明 NAME
作成される非VSAMデータセットの名前を指定します。命名規則については、OpenFrame Base『データセットガイド』を参照してください。
GDGに属するGDSを作成するためにはGDGname.GxxxxVyyの形式でエントリ名を指定する必要があります。たとえば、TEST.GDG1.G0001V00でGxxxxは世代番号であり、Vyyはバージョン番号です。
DEVICETYPES
非VSAMデータセットが保存されるボリュームのデバイスタイプを指定します。
この際、3380、3390、3480などのデバイスタイプを指定します。SYSDAのようなエソテリック・デバイス・グループ(esoteric device group)は使用できません。
VOLUMES
非VSAMデータセットが保存されるボリュームのシリアル番号を指定します。
CATALOG
非VSAMデータセットのカタログ・エントリ情報が登録されるカタログを指定します
OWNER
非VSAMデータセットの所有者を明示的に指定します。
RECATALOG|
NORECATALOG
非VSAMデータセットに該当するVVDSと既に存在するデータセットをカタログにのみ新規登録する場合にはRECATALOGを指定します。デフォルト値はNORECATALOGであり、データセットを新規作成します。
TO|FOR
非VSAMデータセットの有効期限を設定します。
-
TO: 有効期限の最終日をユリウス日付で指定します。(2006年1月1日は2006001と指定)
-
FOR: 日数を指定します。(30を指定した場合、今日から30日間を意味します)
以下は、非VSAMデータセットであるTEST.NVSAM1を作成してTESTCATカタログに登録する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //DEFNVS EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE NONVSAM (NAME(TEST.NVSAM1) - VOLUMES(100000)) - CATALOG(TESTCAT) /* //
-
-
DEFINE PATH
DEFINE PATHコマンドを使用してベース・クラスターに対するアクセス・パスを直接定義したり、または代替索引を経由してベース・クラスターにアクセスする間接的なアクセス・パスを定義したりします。
DEFINE PATHコマンドの構文は以下のとおりです。
DEFINE PATH (NAME(entryname) [PATHENTRY(entryname)] [OWNER(ownerid)] [RECATALOG|NORECATALOG] [TO(date)|FOR(days)]) [CATALOG(catname)]
項目 説明 NAME
DEFINE PATH文を使って現在定義するパス名を指定します。
PATHENTRY
パスがAIXとベース・クラスターで構成されている場合にはAIXデータセットの名前を指定します。
ベース・クラスターへのパスを定義する場合は、ベース・クラスター・データセットの名前を指定します。その名前は、ベース・クラスター・データセットの索引方法を指す単純なエイリアスと見ることができます。しかし、1つのベース・クラスターに複数のパスを定義することもできるため、実際にアクセスする際に適用される属性を別々に指定する用途で使用できます。
OWNER
アクセス・パスの所有者を明示的に指定します。
RECATALOG|
NORECATALOG
RECATALOGを指定すると、同一名のアクセス・パスが存在しても既存のパスを削除して再度アクセス・パスを作成します。
NORECATALOGを指定すると、新しいアクセス・パスの場合のみ作成されます。
TO|FOR
アクセス・パスの有効期限を設定します。
-
TO: 有効期限の最終日をユリウス日付で指定します。(2006年1月1日は2006001と指定)
-
FOR: 日数を指定します。(30を指定した場合、今日から30日間を意味します)
以下は、代替索引のVSAM.AIX1を経由し、VSAM.AIX1のベース・クラスターにアクセスするアクセス・パスのVSAM.PATH1を作成する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //DEFPATH EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE PATH (NAME(VSAM.PATH1) - PATHENTRY(VSAM.AIX1)) /* //
以下は、代替索引を経由せずに直接ベース・クラスターにアクセスするアクセス・パスのVSAM.PATH2を定義する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //DEFPATH EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE PATH (NAME(VSAM.PATH2) - PATHENTRY(VSAM.KSDS1)) /* //
DEFINE PATHに関する詳細は、OpenFrame Base『データセットガイド』を参照してください。
-
-
DEFINE USERCATALOG/MASTERCATALOG
システムが提供する1つのマスター・カタログ以外に複数のユーザー・カタログを別途使用することができます。全データセットに関するメタ情報をマスター・カタログにすべて登録する場合は、マスター・カタログのサイズが必要以上に大きくなってしまい、システムの性能低下を招く恐れがあります。
DEFINE USERCATALOGコマンドでシステムのマスター・カタログと同様の用途で使用できるユーザー・カタログを作成することができます。これはマスター・カタログのサブ・カタログに該当します。
作成されたユーザー・カタログの情報はマスター・カタログに保存されます。ユーザー・カタログのサブ・カタログとして、また別のユーザー・カタログを作成することはできません。つまり、ユーザー・カタログは1レベルのみ作成することができ、すべてのユーザー・カタログはマスター・カタログにのみ登録され、他のユーザー・カタログには登録できません。一般的にユーザー・カタログはユーザー別に作成するか、関連部署または業務別に作成します。
OpenFrameでは、マスター・カタログはインストールの際に自動で作成されます。ユーザー・カタログを追加して作成する場合は、KQCAMSのDEFINE USERCATALOGコマンドを使用します。
DEFINE USERCATALOGコマンドの構文と主要パラメータは以下のとおりです。
DEFINE USERCATALOG (NAME(entryname) {CYLINDERS(primary[secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])} VOLUME(volser) [CONTROLINTERVALSIZE(size)] [DATACLASS(class)] [FILE(ddname)] [MANAGEMENTCLASS(class)] [OWNER(ownerid)] [RECORDSIZE(average maximum|4086 32400)] [STORAGECLASS(class)] [TO(date)|FOR(days)]) [DATA ({CYLINDERS(primary[secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])} [CONTROLINTERVALSIZE(size)] [RECORDIZE(average maximum|4086 32400)])] [INDEX ({CYLINDERS(primary[secondary])| KILOBYTES(primary[secondary])| MEGABYTES(primary[secondary])| RECORDS(primary[secondary])| TRACKS(primary[secondary])} [CONTROLINTERVALSIZE(size)])] [CATALOG(mastercatname)]
項目 説明 NAME
作成するユーザー・カタログ名を指定します。
VOLUME
ユーザー・カタログが保存されるボリュームを指定します。
RECORDSIZE
ユーザーが指定したRECORDSIZEパラメータは無視され、基本カタログ構造を持つデータセットの基本的なレコードサイズ(4086 32400)が使用されます。
CATALOG
作成されたユーザー・カタログが登録されるマスター・カタログの名前を指定します。省略してもシステムのマスター・カタログに自動登録されます。
-
DELETE
VSAMデータセットと非VSAMデータセット、そしてカタログされたデータセット項目を削除するために使用します。
DELETEコマンドは既に存在する項目を削除する役割をするため、多くのパラメータを要求しません。つまり、削除する項目の名前と当該項目のカタログ・エントリのタイプのみを必要とします。
DELETEコマンドの構文は以下のとおりです。
DELETE (entryname [entryname ...]) [ALIAS| ALTERNATEINDEX| CLUSTER| GENERATIONDATAGROUP| NONVSAM| PATH| TRUENAME| USERCATALOG] [ERASE|NOERASE] [FILE(ddname)] [PURGE|OPURGE] [CATALOG(catname)]
項目 説明 entryname
削除するデータセットまたはカタログ・エントリの名前を指定します。
括弧の中に複数の名前を指定する場合、1つのコマンドで多数のエントリを削除できます。
entrynameと指定されたデータセットは排他的(DISP=OLD)に割り当てられます。
ALIAS|
ALTERNATEINDEX|
CLUSTER|
GENERATIONDATAGROUP|
NONVSAM|
PATH|
TRUENAME|
USERCATALOG
ALIASは、エイリアスのエントリ・タイプです。
削除するカタログ・エントリのエントリ・タイプを指定します。
エントリ・タイプの指定は必須ではありませんが、指定した場合は同一名の項目を間違って削除するミスを防止できます。
AIX、CLUSTER、PATH、TRUENAMEはVSAMデータセットのエントリ・タイプであり、残りは非VSAMデータセットのエントリ・タイプです。
ERASE|NOERASE
エントリ・タイプがCLUSTERまたはAIXであるデータセットを削除した場合、当該データセットの実データを0と設定するかどうかを指定します。
FILE
削除するデータセットを指定します。
FILE(ddname)でデータセットを指定した場合、DD名はKQCAMSを呼び出したJCLのDD文により割り当てられたDD名を指定する必要があります。
PURGE|NOPURGE
データセットを定義する際に指定した使用期間に関係なくデータセット・エントリを削除するか否かを指定します。
PURGEを指定した場合、使用期間に関係なくデータセット・エントリを削除します。
NOPURGEを指定した場合、維持期間が満了したエントリのみを削除し、満了していないエントリは削除しません。未指定の場合はNOPURGEが指定された場合と同様に処理されます。
データセットの使用期間(retention period)は、DEFINEコマンドのTOおよびFORパラメータで指定されます。
CATALOG
削除するカタログ・エントリ情報が登録されているカタログを指定します。
以下は、VSAMデータセット・エントリ・タイプのVSAM.KSDS1とVSAM.KSDS2を指定した使用期間に関係なく削除する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //DELCLUS EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE (VSAM.KSDS1 VSAM.KSDS2) - CLUSTER - ERASE - PURGE /* //
-
EXPORT
EXPORTコマンドを使用してVSAM CLUSTERやALTERNATE INDEXを外部に移植可能なデータセットにエクスポートすることができます。カタログ・データセットそのものをバックアップするために使われます。
EXPORTコマンドの構文は以下のとおりです。
EXPORT entryname {OUTFILE(ddname)|OUTDATASET(entryname)} [INFILE(ddname)]
項目 説明 entryname
エクスポートするカタログ・エントリのエントリ名を指定します。entrynameと指定されたエクスポート対象データセットは排他的(DISP=OLD)に割り当てられます。
OUTFILE|
OUTDATASET
エクスポート結果で作成されるデータセットを指定します。エクスポート結果で作成されたデータセットをカタログ上に新規作成するか、既にカタログされている場合はentrynameを使用し、実行環境でKQCAMSを呼び出す前に予め割り当てられているデータセットに作成する場合はddnameを使用します。
OUTDATASETパラメータを利用して指定したデータセットは排他的(DISP=OLD)に割り当てられます。
INFILE
エクスポートするデーターセットを指定します。
INFILE(ddname)にデータセットを指定する場合、ddnameはKQCAMSを呼び出したJCLのDD文によって割り当てられたddnameを指定する必要があります。
以下は、カタログのTESTCATをTESTCAT.BACKUPにエクスポートする例です。カタログの内容をエクスポートしてバックアップします。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //BACKCAT EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //BACK DD DSN=TESTCAT.BACKUP,DISP=OLD //SYSIN DD * EXPORT TESTCAT - OUTFILE(BACK) /* //
-
IMPORT
IMPORTコマンドを利用すると、EXPORTコマンドを使用して作成したバックアップ・データセットや移植可能な外部データセットからデータセットを再度復元したり新規作成したりすることができます。
IMPORTコマンドの構文は以下のとおりです。
IMPORT {INFILE(ddname)|INDATASET(entryname)} {OUTFILE(ddname)|OUTDATASET(entryname)} [INTOEMPTY] [OBJECTS((entryname [MANAGEMENTCLASS(class)] [NEWNAME(newname)] [STORAGECLASS(class)] [VOLUMES(volser[ volser...])]) [(entryname...)...])] [CATALOG(catname)]
項目 説明 INFILE|INDATASET
インポートするソース・データセットを指定します。
KQCAMSを呼び出す前に実行環境で予め割り当てられたデータセットを使用する場合はddnameを指定し、KQCAMS内部的に割り当てる場合はentrynameを使用します。
INDATASETパラメータを使用して指定されたソース・データセットは排他的(DISP=OLD)に割り当てられます。
OUTFILE|OUT DATASET
KQCAMSを呼び出す前に実行環境で予め割り当てられたデータセットを使用する場合はddnameを指定し、KQCAMSの内部に割り当てる場合はentrynameを使用します。
OUTDATASETパラメータを使用して指定されたデータセットは排他的(DISP=OLD)に割り当てられます。
INTOEMPTY
インポートの結果でデータを受信するデータセットがカタログに登録されているか、データセットには存在するが保存スペースが割り当てられていない状態である場合(empty dataset)、IMPORTコマンドは基本的に失敗します。これを無視してIMPORTコマンドの実行中に必要な保存スペースを確保し、コマンドを成功させようとする場合はINTOEMPTYを指定します。
OBJECTS
インポート作業を実行する際に付随的にインポート・ソース・データセットに記録された情報の一部を変更することができます。変更するentrynameと適用する新規属性を指定します。複数のentrynameに対して繰り返し指定することができます。
CATALOG
インポートの際にカタロギングが必要な場合、使用するカタログを指定します。
以下は、TESTCAT.BACKUPというバックアップ・データセットの内容をカタログTESTCATにインポートする例です。TESTCAT.BACKUPに保存された内容を使用してカタログTESTCATを復元します。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //IMPCAT EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //BACK DD DSN=TESTCAT.BACKUP,DISP=OLD //SYSIN DD * IMPORT INFILE(BACK) - OUTDATASET(TESTCAT) /* //
-
LISTCAT
LISTCATコマンドを使用してカタログに定義されたデータセットに関する多様な情報を出力することができます。
以下のようなグループにまとめて関連情報を表示します。
-
エントリ・オブジェクトの属性
-
作成・変更・有効期限の情報
-
保護(protection)関連情報
-
データセット・アクセスの統計情報
-
ストレージの割り当て情報
-
データセットの構造についての情報
LISTCATコマンドの構文は以下のとおりです。
LISTCAT [ALIAS] [ALTERNATEINDEX] [CLUSTER] [DATA] [GENERATIONDATAGROUP] [INDEX] [NONVSAM] [PATH] [USERCATALOG] [ENTRIES(entryname[ entryname...])|LEVEL(level)] [NAME|HISTORY|VOLUME|ALLOCATION|ALL] [CATALOG(catname)]
項目 説明 ALIAS
ALTERNATEINDEX,
CLUSTER, DATA,
GENERATIONDATAGROUP,
INDEX, NONVSAM, PATH,
USERCATALOG
指定された種類のカタログ・エントリに対してのみLISTCAT情報を出力します。
たとえば、LISTCAT CLUSTERと指定した場合、カタログ・エントリ・タイプがCLUSTERであるエントリ情報のみが出力されます。
2つ以上のエントリ・タイプを指定することも可能です。LISTCAT DATA INDEXと指定すると、カタログ・エントリ・タイプがDATAかINDEXのエントリ情報が出力されます。
パラメータを未指定の場合は、カタログ・エントリ・タイプについてフィルタリングをせずに、全タイプのエントリ情報がすべて出力されます。
また、ENTRIESパラメータを別途指定した場合、エントリ・タイプが一致しても、エントリ名がENTRIESパラメータに指定されている名前と一致しないエントリの情報は出力されません。
ENTRIES|LEVEL
LISTCATコマンドの対象になるカタログ・エントリ名を指定します。
-
ENTRIES: カタログに存在するエントリ名の中から指定のentrynameと名前が一致し、セグメント数も一致する名前のみがコマンドの対象として指定されます。
-
LEVEL: カタログに存在するエントリ名の中から指定のentrynameと名前の前の部分が一致する名前がコマンドの対象に指定されます。ユーザーが指定したentrynameのセグメント数より多くのセグメント数を持つ名前もコマンドの対象として指定されます。
ENTRIESとLEVELの使用例は以下のとおりです。
-
カタログが以下のエントリ名を含む場合
1. A.A.B 2. A.B.B 3. A.B.B.C 4. A.B.B.C.C 5. A.C.C 6. A.D 7. A.E 8. A
-
ENTRIES(A.*)を指定した場合、6、7がコマンドの対象に選択されます。
-
ENTRIES(A.*.B)を指定した場合、1、2がコマンドの対象に選択されます。
-
LEVEL(A.*.B)を指定した場合、1、2、3、4がコマンドの対象に選択されます。
-
LEVEL(A)を指定した場合、1、2、3、4、5、6、7がすべてコマンドの対象に選択されます。
-
アステリスク(*)は、該当するセグメントのすべての名前と一致します。
-
NAME|HISTORY|
VOLUME|
ALLOCATION|ALL
上記のエントリ・タイプのフィルターおよびENTRIESパラメータに指定されるエントリ名の条件を満たすカタログ・エントリの情報を出力するときの、出力情報のレベルを指定します。
NAMEを指定すると最も基本的な情報のみが出力され、ALLを指定すると当該エントリのすべての情報が出力されます。
CATALOG
LISTCATコマンドの対象カタログ名を指定します。上記のENTRIESまたはLEVELに指定するエントリ名は、ここで指定するカタログで検索されます。
以下は、VSAM.KSDS1のすべてのエントリの情報を出力する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //LISTC EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * LISTCAT ENTRIES(VSAM.KSDS1) ALL /* //
以下は、上記のLISTCATコマンドの実行結果として出力される内容(SYSPRINT)です。
CLUSTER ------------- VSAM.KSDS1 HISTORY CREATION ----------------- 20191021 DATASET-OWNER -------------- NOUSER EXPIRATION ---------------- (EMPTY) RELEASE ------------------- (EMPTY) VSAM QUIESCED ----- (NOT-SUPPORTED) ASSOCIATIONS DATA ---------------- VSAM.KSDS1.DATA INDEX --------------- VSAM.KSDS1.INDEX DATA ---------------- VSAM.KSDS1.DATA HISTORY CREATION ----------------- 20191021 DATASET-OWNER -------------- NOUSER EXPIRATION ---------------- (EMPTY) RELEASE ------------------- (EMPTY) ASSOCIATION CLUSTER ------------- VSAM.KSDS1 ATTRIBUTES AVGLRECL ---------------------- 350 MAXLRECL --------------------- 350 KEYLEN ------------------------- 10 RKP ----------------------------- 0 AXRKP --------------------------- 0 CISIZE -------------------- (EMPTY) INDEXED NON-SPANNED UNIQUEKEY STATISTICS REC-DELETED --------------- (EMPTY) REC-INSERTED -------------- (EMPTY) REC-RETRIEVED ------------- (EMPTY) REC-TOTAL ----------------- (EMPTY) REC-UPDATED --------------- (EMPTY) TIMESTAMP ------------------ (NULL) USER-DATA-SIZE ------------ (EMPTY) ALLOCATION HI-A-RBA ------------------------ 0 HI-U-RBA ------------------------ 0 VOLUMES DEVTYPE -------------------- (NULL) VOLSER --------------------- 100000 INDEX --------------- VSAM.KSDS1.INDEX HISTORY CREATION ----------------- 20191021 DATASET-OWNER -------------- NOUSER EXPIRATION ---------------- (EMPTY) RELEASE ------------------- (EMPTY) ASSOCIATION CLUSTER ------------- VSAM.KSDS1 ATTRIBUTES AVGLRECL ---------------------- 350 MAXLRECL --------------------- 350 KEYLEN ------------------------- 10 RKP ----------------------------- 0 CISIZE -------------------- (EMPTY) STATISTICS INDEX: ENTRIES/SECT ------------ (EMPTY) HI-LEVEL-RBA ------------ (EMPTY) LEVELS ------------------ (EMPTY) SEQ-SET-RBA ------------- (EMPTY) REC-DELETED --------------- (EMPTY) REC-INSERTED -------------- (EMPTY) REC-RETRIEVED ------------- (EMPTY) REC-TOTAL ----------------- (EMPTY) REC-UPDATED --------------- (EMPTY) TIMESTAMP ------------------ (NULL) ALLOCATION HI-A-RBA ------------------------ 0 HI-U-RBA ------------------------ 0 VOLUMES DEVTYPE -------------------- (NULL) VOLSER --------------------- 100000
-
-
PRINT
VSAMおよび非VSAMデータセットに保存されているレコードを出力して表示します。
PRINTコマンドの構文は以下のとおりです。
PRINT {INFILE(ddname)|INDATASET(entryname)} [CHARACTER|DUMP|HEX] [FROMKEY(key)|FROMADDRESS(address)|FROMNUMBER(number)|SKIP(number)] [OUTFILE(ddname)] [TOKEY(key)|TOADDRESS(address)|TONUMBER(number)|COUNT(number)]
項目 説明 INFILE|INDATASET
PRINTコマンドを使用して内容を出力するデータセットを指定します。
INFILEを使用して指定する場合、JCLを使って事前に割り当てられたDD名を指定する必要があります。
INDATASETを使用して指定する場合、KQCAMSで直接データセットを割り当てて、排他的(DISP=OLD)に割り当てを行います。
CHARACTER|
DUMP|
HEX
PRINT出力内容のフォーマットを指定します。
-
CHARACTER: ストリング形式でレコードの内容を出力します。
-
DUMP: 右側には16進数、左側にはストリング形式で出力します。
-
HEX: 16進数で出力します。
フォーマットを未指定の場合は、デフォルトでDUMPフォーマットで出力されます。
FROMKEY|
FROMADDRESS|
FROMNUMBER|SKIP
PRINT文はREPRO文と類似するパラメータを使用してユーザーが出力するレコードの範囲を指定できます。各パラメータの意味は、次に説明するREPROコマンドの当該パラメータと同じです。
OUTFILE
SYSPRINTではなく、他のDDにPRINT結果を出力する場合に使用します。
PRINTコマンドで出力されたデータセットの内容を保存するデータセットを別途指定し、JCLを使って事前に割り当てられたddnameを指定する必要があります。
このパラメータを省略すると、PRINTコマンドはデフォルト値のSYSPRINTで出力されます。
TOKEY|TOADDRESS
|TONUMBER|COUNT
PRINTは、REPROと類似するパラメータを使用して出力するレコードの範囲をユーザーが指定できます。各パラメータの意味はREPROコマンドの当該パラメータと同じです。
以下は、TEST.KSDS1に保存されたレコードをDUMPフォーマットで出力する例です。出力されるレコードの範囲は、キー値が0000000099である最初のレコードから10個です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //PRINT EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * PRINT INDATASET(TEST.KSDS1) DUMP - FROMKEY(0000000099) COUNT(10) /* //
以下は、上記のJCLの実行結果としてSYSPRINTに出力された内容です。
KEY OF RECORD = 30303030303030303939 0000: 3030 3030 3030 3030 3939 7265 636F 7264 *0000000099record* 0010: 3030 3030 3030 3030 3939 *0000000099 * KEY OF RECORD = 30303030303030313030 0000: 3030 3030 3030 3031 3030 7265 636F 7264 *0000000100record* 0010: 3030 3030 3030 3031 3030 *0000000100 * KEY OF RECORD = 30303030303030313031 0000: 3030 3030 3030 3031 3031 7265 636F 7264 *0000000101record* 0010: 3030 3030 3030 3031 3031 *0000000101 * KEY OF RECORD = 30303030303030313032 0000: 3030 3030 3030 3031 3032 7265 636F 7264 *0000000102record* 0010: 3030 3030 3030 3031 3032 *0000000102 * KEY OF RECORD = 30303030303030313033 0000: 3030 3030 3030 3031 3033 7265 636F 7264 *0000000103record* 0010: 3030 3030 3030 3031 3033 *0000000103 * KEY OF RECORD = 30303030303030313034 0000: 3030 3030 3030 3031 3034 7265 636F 7264 *0000000104record* 0010: 3030 3030 3030 3031 3034 *0000000104 * KEY OF RECORD = 30303030303030313035 0000: 3030 3030 3030 3031 3035 7265 636F 7264 *0000000105record* 0010: 3030 3030 3030 3031 3035 *0000000105 * KEY OF RECORD = 30303030303030313036 0000: 3030 3030 3030 3031 3036 7265 636F 7264 *0000000106record* 0010: 3030 3030 3030 3031 3036 *0000000106 * KEY OF RECORD = 30303030303030313037 0000: 3030 3030 3030 3031 3037 7265 636F 7264 *0000000107record* 0010: 3030 3030 3030 3031 3037 *0000000107 * KEY OF RECORD = 30303030303030313038 0000: 3030 3030 3030 3031 3038 7265 636F 7264 *0000000108record* 0010: 3030 3030 3030 3031 3038 *0000000108 * PRINT 10 record(s) KQCAMS: PRINT OK
-
-
REPRO
DEFINEコマンドを使ってデータセットが既に定義されている場合、REPROコマンドを利用してVSAMと非VSAMデータセットの内容を他のデータセットに保存することができます。このコマンドで使用されるVSAMデータセットはカタログに登録されている必要がありますが、非VSAMデータセットの場合はカタログに登録されている必要はありません。
メインフレームのカタログは、一般的に1つのKSDSクラスタに保存されているため、REPROコマンドはカタログ内容自体をコピーする用途で使用できます。
REPROコマンドを使用せずに一般的なアプリケーションを使用してデータセットにレコードを保存することもできますが、REPROコマンドはレコードの内容とは関係なく、管理を目的としてデータセットをコピーする用途で使われます。
REPROコマンドの構文は以下のとおりです。
REPRO {INFILE(ddname)|INDATASET(entryname)} {OUTFILE(ddname)|OUTDATASET(entryname)} [ENTRIES(entryname [entryname...])|LEVEL(level)] [FROMKEY(key)|FROMADDRESS(address)|FROMNUMBER(number)|SKIP(number)] [MERGECAT|NOMERGECAT] [REPLACE|NOREPLACE] [REUSE|NOREUSE] [TOKEY(key)|TOADDRESS(address)|TONUMBER(number)|COUNT(number)]
項目 説明 INFILE|INDATASET
コピーするソース・データセットを指定します。
INFILEの場合、JCLにより明示されたddnameを値に指定する必要がある一方、INDATASETパラメータを使用する場合は、データセットのカタログに登録されたエントリ名を指定する必要があります。
INDATASETパラメータを使用して指定したソース・データセットは排他的(DISP=OLD)に割り当てられます。
OUTFILE|OUTDATASET
ソース・データセットをコピーした後、保存対象のデータセットを指定します。
OUTFILEパラメータ値にはddnameを指定する必要があり、OUTDATASETパラメータ値にはカタログされたエントリ名を指定する必要があります。
OUTDATASETパラメータを使用して指定したソース・データセットは排他的(DISP=OLD)に割り当てられます。
ENTRIES|LEVEL
REPROコマンドを使用してカタログをコピーする場合、対象になるカタログ・エントリ名を指定します。この場合、2つのカタログ間でカタログ・エントリ名のみがコピーされます。実際にカタログ・エントリが指し示すデータセットのコピーを意味するものではありません。
-
ENTRIES: カタログに存在するエントリ名から指定のentrynameと名前が一致し、セグメント数も一致する名前だけがコマンドの対象として指定されます。
-
LEVEL: カタログに存在するエントリ名から指定のentrynameと名前の前の部分が一致する名前がコマンドの対象に指定されます。ユーザーが指定したentrynameのセグメント数より多くのセグメント数を持つ名前もコマンドの対象として指定されます。
ENTRIESとLEVELの使用例は以下のとおりです。
-
カタログが以下のエントリ名を含む場合
1. A.A.B 2. A.B.B 3. A.B.B.C 4. A.B.B.C.C 5. A.C.C 6. A.D 7. A.E 8. A
-
ENTRIES(A.*)を指定した場合、6、7がコマンドの対象に選択されます。
-
ENTRIES(A.*.B)を指定した場合、1、2がコマンドの対象に選択されます。
-
LEVEL(A.*.B)を指定した場合、1、2、3、4がコマンドの対象に選択されます。
-
LEVEL(A)を指定した場合、1、2、3、4、5、6、7がすべてコマンドの対象に選択されます。
-
アステリスク(*)は、該当するセグメントのすべての名前と一致します。
-
FROMKEY|
FROMADDRESS|
FROMNUMBER|SKIP
データセット全体をコピーするのではなく、当該データセットの一部のレコードのみをコピーするために、コピーする対象を限定します。
それぞれ特定のキーとアドレス、レコード番号以降のレコードを対象にしてコピーし、SKIPパラメータは最初のレコードから指定の数のレコードはコピーせず、指定の数の次のレコードからをコピーの対象とします。つまり、コピーの開始レコードを指定します。
MERGECAT|
NOMERGECAT
REPROコマンドで、一般のデータセット以外にもカタログを含んでいる特殊なデータセットをコピーすることができます。
-
MERGECAT: ソース・カタログのレコードをターゲット・カタログにコピーした後、ソース・カタログ上のレコードを削除します。
-
NOMERGECAT: コピーされるだけで、ソース・カタログからカタログ・レコードは削除されません。
このパラメータが省略された場合は、NOMERGECATがデフォルト値として使用されます。NOMERGECATを指定する場合、ターゲット・カタログは空である必要があります。
REPLACE|NOREPLACE
ソース・データセットをターゲット・データセットにコピーするプロセスで、ターゲット・データセットに同じレコードが既に存在するときの処理方法を指定します。
-
REPLACE: 既存のレコードを新規レコードに代替します。
-
NOREPLACE: 重複レコードが発見されたというエラーメッセージが表示されるだけで、ターゲット・データセットの重複レコードにはコピーしません。
省略した場合のデフォルト値はNOREPLACEです。
REUSE|NOREUSE
カタログではなく、VSAMデータセットがターゲット・データセットである場合に使用します。
-
REUSE: 該当のターゲット・データセットに既にレコードが存在する場合でも最初からレコードを追加します。(HURBAを0の状態で開いて書き込みを行います)
-
NOREUSE: ターゲット・データセットの最後のレコード以降からレコードを追加します。既存データセットのレコードを削除しないまま、ターゲット・データセットにレコードをコピーします。
既存のレコードを再利用するというより、データセットのレコードの保存に使用される領域を再利用します。
TOKEY|TOADDRESS
TONUMBER|COUNT
コピー作業の対象となるレコードを制限します。つまり、コピー作業の対象となる最後のレコードを指定します。
以下は、VSAM.KSDS1データセットの50001番のレコードから10000個のレコードをVSAM.KSDS2データセットにコピーする例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //REPRO EXEC PGM=KQCAMS //INDD DD DSN=VSAM.KSDS1,DISP=(OLD,KEEP) //OUTDD DD DSN=VSAM.KSDS2,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSIN DD * REPRO INFILE(INDD) - OUTFILE(OUTDD) - SKIP(50000) COUNT(10000) /* //
-
-
VERIFY
アプリケーションがVSAMデータセットを開放して使用する際に異常終了により終了処理が正しくされていない場合、当該VSAMデータセットがカタログに記録されるメタ情報を不正確に記録することがあります。
上記の理由でカタログに問題が発生した場合、VERIFYコマンドにより問題のVSAMデータセットのメタ情報が正しいかを確認します。指定されたデータセットのカタログ情報が正しくない場合は、正しい値で更新します。
VERIFYコマンドはVSAMデータセットに対してのみ動作します。
VERIFYコマンドの構文は以下のとおりです。
VERIFY FILE(ddname)|DATASET(entryname)
項目 説明 FILE|DATASET
VERIFYコマンドの対象となるデータセットを指定します。
FILEを使用する場合、JCLで割り当てられたデータセットのDD名を指定する必要があります。
DATASETを使用して指定する場合は、KQCAMSで指定されたデータセットを直接割り当てます。
以下は、TEST.CLUS1データセットのカタログ情報を確認する例です。
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //VSTEP EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //TESTDD DD DSN=TEST.CLUS1,DISP=OLD //SYSIN DD * VERIFY FILE(TESTDD) /* //
12.4. 補助コマンド
一度のKQCAMSの実行で複数のKQCAMSコマンドを実行することができます。
補助コマンド(Modal command)は複数のKQCAMSコマンドを実行するために必要な機能を提供するコマンドで、実際にカタログ・エントリやオブジェクトに対して処理する機能コマンドとは区別されます。
現在は、KQCAMSの補助コマンドのうちPARMはサポートしていません。 |
-
IF-THEN-ELSE
実行されたコマンドの結果コード値(LASTCCまたはMAXCC)によって次に実行するコマンドを分岐させるために使われます。IFとTHENの間には条件分岐の際に評価される条件を指定する必要があります。条件は条件コード(Condition Code)と特定の定数を比較して記述します。
たとえば、「LASTCC > 8」と指定すれば、条件コードの変数の1つであるLASTCC値が8より大きい場合を意味します。
IF-THEN-ELSEコマンドの構文は以下のとおりです。
IF {Condition Code} {operator} {number} THEN[command| DO command set END] [ELSE[command| DO command set END]]
条件コードに指定できる値と意味は以下のとおりです。
値 説明 LASTCC
最新のコマンド実行結果を保存するKQCAMSで使用する変数です。
成功した場合のLASTCCは0の値を持ち、無視できる警告が発生した場合の値は4です。問題の深刻さと数値は比例します。
MAXCC
現在実行中のコマンドより前に実行されたコマンドの実行結果値の中で最大値を保存するために使う変数です。
Operator
条件コードの値を評価する演算子です。
指定可能な値と説明については、「参考」の比較演算子表を参照してください。
THEN文にはIF文が真である場合に実行するKQCAMSコマンドを記述し、ELSE文にはIF文が偽である場合に実行するコマンドを記述します。IF文が偽である場合に実行するコマンドがない場合はELSE文を省略することができます。
IF-THEN-ELSE文は条件によって異なるコマンドを実行する1つのKQCAMSコマンドとして見なされます。したがって、IF-THEN-ELSEの構文を複数行にかけて記述する場合はハイフン(-)を適切に使用する必要があります。
以下は、LASTCCの値が8と同じである場合、MAXCCに0を設定するプログラムの一部を例として表示します。IF-THEN文が実際に動作することを表すためにLASTCCを8に設定しています。IF-THEN文が実行される際には、LASTCC値が8であるためTHENに続くSET MAXCC-0が実行されます。この状態でKQCAMSを終了すると、最終的なMAXCC値を報告してから終了するため、実行された結果を確認することができます。
SET LASTCC=8 IF LASTCC=8 THEN SET MAXCC=0
以下は、LASTCCの値が4より大きい場合はTEST.SDS1のエントリ情報を取得し、LASTCCが4より大きくない場合はTEST.SDS2のエントリ情報を取得する例です。一般的に、SET LASTCCの位置に他のKQCAMSコマンドを実行してその結果によってLASTCCが設定され、またその結果によって条件的にコマンドを実行します。この例では、IF-THEN-ELSE文の動作をテストするために強制的にIF文の前にLASTCCの値を0に設定しました。IF文の結果によってTEST.SDS2がLISTCATされます。
SET LASTCC=0 IF LASTCC > 4 - THEN - LISTCAT ENT(TEST.SDS1) ELSE - LISTCAT ENT(TEST.SDS2)
-
Null
Nullは何の動作も発生しない文法的な用途のコマンドであり、以下の2つの目的で使われます。
-
IF-THEN-ELSE文の文法に従い、THENやELSEにコマンドを指定しない場合に使用します。
-
NULLがIF-THEN-ELSE文以外で使用された場合は空の行として処理されます。
THENやELSEの後ろで行を変更する場合、行が続くことを意味するハイフン(-)を指定しません。ハイフン(-)を指定すると、KQCAMSはTHENやELSE文の次にコマンドがあることを仮定して処理を行うため、意図したとおりのコマンドの分岐が実行されません。
以下は、LASTCCが4より大きい場合は実行するコマンドがなく、LASTCCが4より小さい場合はTEST.SDS2のエントリ情報を取得する例です。
SET LASTCC=0 IF LASTCC > 4 - THEN ELSE LISTCAT ENT(TEST.SDS2)
-
-
SET
MAXCCまたはLASTCCの値を強制的に特定の値に設定する場合に使用します。主に特定の警告レベルの条件コードを無視して、JCLでKQCAMS以降のステップを順次実行するようにサポートします。
以下は、LASTCCの値が8と同じである場合、強制的にMAXCCの値を0に設定する例です。
DELステップでTEST.SDS1がない場合、リターンコード8を返して終了するため、DEFステップは実行されません。TJESの設定やジョブに記述されたCONDによって異なることはありますが、リターンコードがRC=8である場合、DEFステップを処理せずにジョブがABEND処理されることを防止するためには、MAXCCを0に強制設定することによって後続のDEFステップが実行されるように設定できます。
//DEL EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE TEST.SDS1 IF LASTCC=8 THEN SET MAXCC=0 /* //DEF EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE NONVSAM (NAME(TEST.SDS1) VOLUMES(100000)) /* //
-
CANCEL
CANCELコマンドに遭遇すると、KQCAMSの実行が終了され、CANCELコマンド以降の残りのコマンドは処理されません。
以下の例は、LASTCCが4である場合、次のTHENコマンドを実行中にCANCELが実行されてKQCAMSの実行を終了するプログラムの一部です。
LISTCAT ENTRIES(MUST.EXIST.SDS) IF LASTCC=4 THEN CANCEL ...
LISCATに指定したカタログ・エントリが存在しない場合の条件コードは4です。条件コードが4である場合は、メッセージレベルの条件コードであるため、次のKQCAMSコマンドが続けて実行されます。
上記の例は、MUST.EXIST.SDSデーターセットがない場合は次のコマンドを実行せず、続けてIF条件を満たす場合はCANCELコマンドを実行してKQCAMSの実行を終了します。
12.5. 非機能コマンド
KQCAMSの動作のために、実際には機能しないけれど、エラーが発生しないように処理されるコマンドです。
-
BLDINDEX
BLDINDEXは、既に存在するデータセットの代替索引を構成するコマンドです。 BLDINDEXコマンドは内部的に代替索引クラスターに1つの補助キーと多数の主キーで構成されるレコードをロードする役割をします。
OpenFrameではデータセットの代替索引の構成をTiberoの索引機能を利用して実装しているので、このコマンドは実際に機能しません。
以下は、BLDINDEXコマンドの構文と指定できるパラメータです。
BLDINDEX {INFILE(ddname)|INDATASET(entryname)} {OUTFILE(ddname)|OUTDATASET(entryname)} [CATALOG(catname)]
項目 説明 INFILE|
INDATASET
代替索引の構成に使用するベース・クラスターを指定します。
-
INFILE: KQCAMSを呼び出す前に実行環境に応じて予め割り当てられたデータセットを使用する場合はddnameを使用します。
-
INDATASET: KQCAMS内部的にデータセットを割り当てる場合はentrynameを使用します。INDATASETパラメータを使用して指定したべース・クラスターは排他的に(DISP=OLD)割り当てられます。
OUTFILE|
OUTDATASET
BLDINDEXの結果で構成される代替索引クラスターを指定します。BLDINDEXの前に代替索引を事前に定義される必要があります。
-
OUTFILE: KQCAMSを呼び出す前に実行環境に応じて予め割り当てられたデータセットを使用する場合はddnameを使用します。
-
OUTDATASET: KQCAMS内部的にデータセットを割り当てる場合はentrynameを使用します。OUTDATASETパラメータを使用して指定した代替索引クラスターは排他的に(DISP=OLD)割り当てられます。
CATALOG
entrynameに指定されたカタログ・エントリを検索する際に使用するカタログを明示的に指定します。指定していない場合は、カタログの検索順により決定されます。
以下は、VSAM.KSDS1の代替索引であるVSAM.AIX1を構成する例です。
//JOB03 JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1) //BLDAIX EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //BASE DD DSN=VSAM.KSDS1,DISP=OLD //AIX DD DSN=VSAM.AIX1,DISP=OLD //SYSIN DD * BLDINDEX INFILE(BASE) - OUTFILE(AIX) /* //
-
-
EXAMINE
EXAMINEは、KSDSのインデックスおよびデータ領域の整合性を解析し、その結果を出力するコマンドです。
OpenFrameでは、このコマンドは実際には何の動作も行いません。
EXAMINEコマンドの構文で指定可能なパラメータは以下のとおりです。
EXAMINE {NAME(clustername)} [{INDEXTEST|NOINDEXTEST}] [{DATATEST|NODATATEST}] [ERRORLIMIT(value)]
項目 説明 NAME
整合性検査を実行するKSDSまたはユーザーカタログの名称を指定します。
INDEXTEST|
NOINDEXTEST
指定されたクラスタのインデックスコンポーネントに対して整合性検査を実行するかどうかを指定します。
-
INDEXTEST:インデックスコンポーネントの整合性検査を実行します。(デフォルト)
-
NOINDEXTEST::インデックスコンポーネントの整合性検査を実行しません。
DATATEST|
NODATATEST
指定されたクラスタのデータコンポーネントに対して整合性検査を実行するかどうかを指定します。
-
DATATEST:データコンポーネントの整合性検査を実行します。
-
NODATATEST : データコンポーネントの整合性検査を実行しません。(デフォルト)
ERRORLIMIT
コマンド実行結果として出力されるエラーの最大件数を、valueに指定します。
以下は、VSAM.KSDS1に対してEXAMINEコマンドを実行する例です。
//JOB EXEC PGM=KQCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * EXAMINE - NAME(VSAM.KSDS1) - INDEXTEST - DATATEST - ERRORLIMIT(350) /*
-
12.6. 関連環境設定
KQCAMSに関する環境設定は、OpenFrame環境設定のidcamsサブジェクトで行います。設定内容を変更することで、KQCAMSのいくつかの動作をユーザーの要件に合わせて調整することができます。
環境設定項目の詳細については、OpenFrame Batch『環境設定ガイド』を参照してください。 |
[参考]
以下は、実際に機能はしないものの、エラーが発生しないように処理されているKQCAMSのコマンドのパラメータの一覧です。
コマンド | パラメータ |
---|---|
ALTER |
[ACCOUNT(account–info)] |
[ADDVOLUMES(volser[ volser…])] |
|
[BUFFERSPACE(size)] |
|
[BUFND(number)] |
|
[BUFNI(number)] |
|
[BWO(TYPECICS|TYPEIMS|NO)] |
|
[CCSID(value)] |
|
[CODE(code)] |
|
[ECSHARING|NOECSHARING] |
|
[ERASE|NOERASE] |
|
[EXCEPTIONEXIT(entrypoint)] |
|
[FILEDATA(TEXT|BINARY)] |
|
[FREESPACE(CI-percent[ CA-percent])] |
|
[FRLOG(NONE[ REDO])] |
|
[INHIBIT|UNINHIBIT] |
|
[KEYS(length offset)] |
|
[LOCK|UNLOCK] |
|
[LOG(NONE|UNDO|ALL)] |
|
[LOGSTREAMID(logstream)] |
|
[MANAGEMENTCLASS(class)] |
|
[NULLIFY([AUTHORIZATION(MODULE|STRING)] [BWO] [CODE] [EXCEPTIONEXIT] [LOG] [LOGSTREAMID] |
|
[RECORDSIZE(average maximum)] |
|
[REMOVEVOLUMES(volser[ volser…])] |
|
[REUSE|NOREUSE] |
|
[ROLLIN] |
|
[SHAREOPTIONS(crossregion[ crosssystem])] |
|
[STORAGECLASS(class)] |
|
[STRNO(number)] |
|
[TYPE(LINEAR)] |
|
[UNIQUEKEY|NONUNIQUEKEY] |
|
[UPDATE|NOUPDATE] |
|
[UPGRADE|NOUPGRADE] |
|
[WRITECHECK|NOWRITECHECK] |
|
DEFINE |
[ACCOUNT(account–info)] |
[BUFFERSPACE(size)] |
|
[BWO(TYPECICS|TYPEIMS|NO)] |
|
[ERASE|NOERASE] |
|
[EXCEPTIONEXIT(entrypoint)] |
|
[FILE(ddname)] |
|
[FREESPACE(CI-percent[ CA-percent])] |
|
[FRLOG(NONE[| REDO])] |
|
[LOG(NONE|UNDO|ALL)] |
|
[LOGSTREAMID(logstream)] |
|
[MODEL(entryname[ catname])] |
|
[REUSE|NOREUSE] |
|
[SHAREOPTIONS(crossregion[ crosssystem])] |
|
[SPEED|RECOVERY] |
|
[WRITECHECK|NOWRITECHECK]) |
|
[UPDATE|NOUPDATE] |
|
[CYLINDERS(primary[secodnary])] |
|
[KILOBYTES(primary[secodnary])] |
|
[MEGABYTES(primary[secodnary])] |
|
[RECORDS(primary[secodnary])] |
|
[TRACKS(primary[secodnary])] |
|
[CONTROLINTERVALSIZE(size)] |
|
DELETE |
[LIBRARYENTRY|NVR| PAGESPACE|OLUMEENTRY|VVR] |
[ERASE|NOERASE] |
|
[FORCE|NOFORCE] |
|
[PURGE|NOPURGE] |
|
[RECOVERY|NORECOVERY] |
|
[SCRATCH|NOSCRATCH] |
|
EXPORT |
[CIMODE|RECORDMODE] |
[ERASE|NOERASE] |
|
[INHIBITSOURCE|NOINHIBITSOURCE] |
|
[INHIBITTARGET|NOINHIBITTARGET] |
|
[PURGE|NOPURGE] |
|
[TEMPORARY|PERMANENT] |
|
IMPORT |
[ALIAS|NOALIAS] |
[ERASE|NOERASE] |
|
[LOCK|UNLOCK] |
|
[OBJECTS ([FILE(ddname)])] |
|
[PURGE|NOPURGE] |
|
[SAVRAC|NOSAVRAC] |
|
LISTCAT |
[LIBRARYENTRIES(libent)] |
[PAGESPACE] |
|
[VOLUMEENTRIES(volent)] |
|
[EXPIRATION(days)] |
|
[FILE(ddname)] |
|
[LIBRARY(libname)] |
|
[OUTFILE(ddname)] |
|
[DBCS] |
|
[INSERTSHIFT((offset1 offset2)[(offset1 offset2 )…])|INSERTALL] |
|
[SKIPDBCSCHECK((offset1 offset2) [(offset1 offset2)…])|NODBCSCHECK] |
|
REPRO |
[DBCS] |
[ERRORLIMIT(value)] |
|
[FILE(ddname)] |
|
[INSERTSHIFT((offset1 offset2)[(offset1 offset2 )…])| INSERTALL] |
|
[SKIPDBCSCHECK((offset1 offset2)[(offset1 offset2 )…])| NODBCSCHECK] |
|
[VOLUMEENTRIES(entryname)] [ENCIPHER ({EXTERNALKEYNAME(keyname)|INTERNALKEYNAME(keyname)|PRIVATEKEY} [CIPHERUNIT(number|1)] [DATAKEYFILE(ddname)|DATAKEYVALUE(value)] [SHIPKEYNAMES(keyname[ keyname…])] [STOREDATAKEY|NOSTOREDATAKEY] [STOREKEYNAME(keyname)] [USERDATA(value)])] |
|
[DECIPHER({DATAKEYFILE(ddname)| DATAKEYVALUE(value)|SYSTEMKEY} [SYSTEMDATAKEY(value)] [SYSTEMKEYNAME(keyname)])] |
以下は、DEFINEコマンドのサブコマンドのパラメータの一覧です。
サブコマンド | パラメータ |
---|---|
ALIAS |
(SYMBOLICRELATE(entryname)) |
ALTERNATEINDEX |
(BUFFERSPACE(size)] |
[ERASE|NOERASE] |
|
[EXCEPTIONEXIT(entrypoint)] |
|
[FREESPACE(CI-percent[CA-percent]| 0 0)] |
|
[MODEL(entryname[catname])] |
|
[REUSE|NOREUSE] |
|
[SHAREOPTIONS(crossregion[crosssystem]| 1 3)] |
|
[SPEED|RECOVERY] |
|
[WRITECHECK|NOWRITECHECK]) |
|
[DATA ([ATTEMPTS(number)] [AUTHORIZATION(entrypoint[ string])] [BUFFERSPACE(size)] [CODE(code)] [ERASE|NOERASE] [EXCEPTIONEXIT(entrypoint)] [FREESPACE(CI-percent[CA-percent])] [MODEL(entryname[catname])] [REUSE|NOREUSE] [SHAREOPTIONS(crossregion[crosssystem])] [SPEED|RECOVERY] [WRITECHECK|NOWRITECHECK])] |
|
[INDEX ([ATTEMPTS(number)] [AUTHORIZATION(entrypoint[string])] [CODE(code)] [EXCEPTIONEXIT(entrypoint)] [MODEL(entryname[catname])] [REUSE|NOREUSE] [SHAREOPTIONS(crossregion[crosssystem])] [WRITECHECK|NOWRITECHECK])] |
|
CLUSTER |
([ACCOUNT(account–info)] |
[BUFFERSPACE(size)] |
|
[BWO(TYPECICS|TYPEIMS|NO)] |
|
[ERASE|NOERASE] |
|
[EXCEPTIONEXIT(entrypoint)] |
|
[FREESPACE(CI-percent[CA-percent]|0 0)] |
|
[FRLOG(NONE[| REDO])] |
|
[LOG(NONE|UNDO|ALL)] |
|
[LOGSTREAMID(logstream)] |
|
[MODEL(entryname[catname])] |
|
[REUSE|NOREUSE] |
|
[SHAREOPTIONS(crossregion[crosssystem]|1 3)] |
|
[SPEED|RECOVERY] |
|
[WRITECHECK|NOWRITECHECK]) |
|
[DATA ([BUFFERSPACE(size)] [ERASE|NOERASE] [EXCEPTIONEXIT(entrypoint)] [FREESPACE(CI-percent[CA-percent])] [MODEL(entryname[catname])] [REUSE|NOREUSE] [SHAREOPTIONS(crossregion[crosssystem])] [SPEED|RECOVERY] [WRITECHECK|NOWRITECHECK])] |
|
[INDEX ([EXCEPTIONEXIT(entrypoint)] [MODEL(entryname[catname])] [REUSE|NOREUSE] [SHAREOPTIONS(crossregion[crosssystem])] [WRITECHECK|NOWRITECHECK])] |
|
GENERATIONDATAGROUP |
([SCRATCH|NOSCRATCH]) |
NONVSAM |
([COLLECTION] |
[FILESEQUENCENUMBERS(number[number…])]) |
|
PATH |
([MODEL(entryname[catname])]) |
USERCATALOG |
([BUFFERSPACE(size|3072)] |
[BUFND(number)] |
|
[BUFNI(number)] |
|
[ECSHARING|NOECSHARING] |
|
[FREESPACE(CI-percent[CA-percent ]|0 0)] |
|
[ICFCATALOG|VOLCATALOG] |
|
[LOCK|UNLOCK] |
|
[MODEL(entryname[catname])] |
|
[SHAREOPTIONS(crossregion[crosssystem]| 3 4)] |
|
[STRNO(number|2)] |
|
[WRITECHECK|NOWRITECHECK]) |
|
[DATA ([BUFFERSPACE(size)] [BUFND(number)] [FREESPACE(CI-percent[ CA-percent])] [WRITECHECK|NOWRITECHECK])] |
|
[INDEX ([BUFNI(number)] [WRITECHECK|NOWRITECHECK])] |
[比較演算子]
以下は、IF-THEN-ELSEコマンドのoperator項目で使用される比較演算子をまとめた表です。
演算子 | 符号 | 意味 |
---|---|---|
EQ |
= |
等しい |
LE |
<= |
小さいか等しい |
LT |
< |
小さい |
GT |
> |
大きい |
GE |
>= |
大きいか等しい |
NE |
!= |
等しくない |
12.7. 注意事項
条件コード(Condition Code)は、KQCAMSによる各コマンドの処理が正常に行われたか、あるいはコマンドの実行中にエラーが発生したかを表すエラーコードです。発生可能な条件コードは0、4、8、12、16であり、値が大きいほどコマンドの実行に重大な問題があったことを意味します。各条件コード値についての説明は以下のとおりです。
コード | 意味 |
---|---|
0 |
コマンドを正常に処理した場合に返されます。情報メッセージの一部が出力されることがあります。 |
4 |
処理が完了していないコマンドを無視して追加的にコマンドを実行しても、永久的にエラーが発生しないと判断された状態において、追加的にコマンドを実行できます。この際、警告性のメッセージが一緒に出力されます。 たとえば、LISCATコマンドの実行時にユーザー指定のカタログ・エントリが存在しない場合、条件コードは4に設定され、以下のメッセージが出力されます。 KQCAMS: No specified catalog entry found: NOT.EXIST.SDS |
8 |
コマンドが意味する動作の一部が実行されなくても、結果的にユーザーが希望した状態になった場合は追加的にコマンドを実行できます。 たとえば、DELETEコマンドに指定したデータセットが存在しない場合、実際にDELETEコマンドの実行は完了していなくても、結果的には指定のデータセットがないという状態は同じです。この場合、追加的なコマンドの実行に問題がないため条件コードは8に設定され、警告メッセージが出力されます。 KQCAMS(WARNING): No such catalog entry - 'NOT.EXIST.SDS' |
12 |
コマンドの実行中にエラーが発生し、必ず実行すべき動作や機能が完了できない場合に発生します。このようなエラー(logical error)は同時に指定できない論理的に不一致のパラメータを指定した場合や、指定する必要のある必須パラメータが省略された場合、またはデータセットのキー長、レコードサイズなどに指定した値が正しくない場合に発生します。 上記のような状況が発生した場合、条件コードは12に設定され、エラーメッセージが出力されます。 KQCAMS(ERROR): {error description or logical error code} |
16 |
現在のコマンドの実行プロセスで深刻なエラーが発生し、ユーザーが指定した残りのコマンドを実行できない場合に発生します。 以下のような場合にこのコードが発生します。
|
-
条件コードの変数名(LASTCCとMAXCC)
KQCAMSはLASTCCおよびMAXCCという変数に条件コード値を保存します。
LASTCCには最新の実行コマンドの条件コードが保存され、MAXCCには既存の条件コードの中から最も大きい値が保存されます。LASTCCおよびMAXCCは、SETコマンドを使用してユーザーが直接設定できます。
以下は、NOT.EXIST.SDSデータセットを削除した後、LASTCCの値が8である場合に強制的にMAXCCに0を設定する例です。
DELETE NOT.EXIST.SDS IF LASTCC = 8 THEN SET MAXCC=0 DEFINE ...