この節では、バッチ・ジョブの JCL で割り振られたデータ・セットまたはファイル、または転送の前に対話式ユーザーにより割り振られたデータ・セットまたはファイル を FTP クライアントが転送する方法について説明します。FTP クライアントは割り振りで 使用される ddname を持つデータ・セットを参照します。
FTP クライアント API は ddname 転送をサポートしません。FTP クライアント API を使用してアプリケーション・プログラムを起動するバッチ・ジョブに関連した ddnames は、作成された FTP クライアント・プロセスでは使用できません。
クライアント・ファイル・アクセス・コマンドの 1–8 文字のローカル・ファイル名の前の接頭部として指定する //DD: トークンは、その後のトークンが、ローカル・ファイル名ではなく、実際には ddname であることを示します。この ddname はユーザーが割り振らなければなりません (例えば、FTP クライアントを開始した JCL で割り振ります)。put コマンドでローカル・ファイルにアクセスするために ddname を使用するときは、サーバー・ファイル名を明示的に指定しなければなりません。
データ・セットが ddname を使用して割り振られており、それをオープンする前に DCB 情報が必要な場合は、 そのデータ・セットを割り振るときに使用された DD ステートメントの DCB 情報を FTP クライアントが検出できる必要があります。
ddname 割り振りに関する DCB 属性は、DD ステートメントの DCB パラメーターに指定された属性またはデータ・セット名を 使用して獲得されます。DCB パラメーターに逆方向参照を使用する際の制約事項については、「z/OS MVS JCL 解説書」を参照してください。
DD ステートメントがカタログ式 DASD データ・セットを参照する場合、 指定されていない DCB 属性はすべて DSCB から検索されます。DD ステートメントの DCB 属性は、DSCB で検出された DCB 属性をオーバーライドします。 ただし、LRECL=0 および BLKSIZE=0 については DSCB に異なる値があってもオーバーライドしません。
入力用にオープンされるテープ・データ・セットを DD ステートメントが参照する場合 (PUT //DD:)、READTAPEFormat 設定の代わりに、 DD ステートメントに指定されたレコード・フォーマットが使用されます。DD ステートメントにレコード・フォーマット (RECFM) がまったく指定されていない場合は、READTAPEFormat 設定 (もしあれば) が使用されます。
データ・セットが FTP によってオープンされたあとは、オープンによって DCB に戻されたデータを 使用して、そのデータ・セットの属性が設定されます。
空のファイルからのデータの転送を防ぐために、 FTP は、一連の連結ファイルの最初のファイルが空であるかどうかを検査し、 空のデータ・セットを割り振ります。データは転送されません。
BSAM を 使用して一連の連結ファイルを転送する場合、そのうちの個々のファイルが空であってはなりません。つまり、個々のファイルが、有効なファイル終了インディケーター・セットを 持っている必要があります。
連結データ・セットでは、いずれかのファイルが 空の場合は、PUT コマンドおよび APPEND コマンドを使用して データ・セットを転送することができます。データ・セットの 1 つが空の場合、 次のコマンドの実行が続行され、追加のデータが連結されます。
put //dd:infile1 target.ds
append //dd:infile2 target.ds
append //dd:infile3 target.ds
以下は、 入力が連結データ・セットで構成されており、最初のファイル USER35.GDG1 が 空で残りのファイルが空ではない場合の問題を示す サンプル JCL です。FTP は、最初のファイルの空のデータ・セットを検査し、 その結果、ヌル・ファイルを転送します。
//STEP02 EXEC PGM=FTP,REGION=2048K,PARM='(TCP TCPCS TRACE'
//STEPLIB DD DSN=USER33.LINKLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
//INFILE1 DD DSN=USER35.GDG1(+1),DISP=SHR
// DD DSN=USER35.GDG2(+1),DISP=SHR
// DD DSN=USER34.FILE,DISP=SHR
//OUTPUT DD SYSOUT=*
//INPUT DD *
9.67.113.57 21
USER33 **pw**
put //DD:INFILE1 remote.file
quit
/*
この問題を解決するために、代わりに以下のサンプル JCL を 使用することができます。
//STEP02 EXEC PGM=FTP,REGION=2048K,PARM='(TCP TCPCS TRACE'
//STEPLIB DD DSN=USER33.LINKLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
//INFILE1 DD DSN=USER35.GDG1(+1),DISP=SHR
//INFILE2 DD DSN=USER35.GDG2(+1),DISP=SHR
//INFILE3 DD DSN=USER34.FILE,DISP=SHR
//OUTPUT DD SYSOUT=*
//INPUT DD *
9.67.113.57 21
USER33 **pw**
put //DD:INFILE1 remote.file
append //DD:INFILE2 remote.file
append //DD:INFILE3 remote.file
quit
/*
//USER33J JOB MSGLEVEL=1,MSGCLASS=H,USER=USER33,PASSWORD=**pw**
//STEP01 EXEC PGM=IEBDG
//SYSPRINT DD SYSOUT=A
1 //OUTSET DD DSNAME=USER33.MYGDG(+1),DISP=(NEW,CATLG,CATLG),
// VOLUME=SER=CPDLB1,SPACE=(TRK,(5,5)),UNIT=SYSDA,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)
//SYSIN DD *
< create statements >
//STEP02 EXEC PGM=FTP,REGION=2048K,PARM='(TCP TCPCS TRACE'
//STEPLIB DD DSN=USER33.LINKLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
2 //DD01 DD DSNAME=USER33.TEST.S.A,DISP=OLD
3 //DD02 DD DSNAME=*.STEP01.OUTSET,DISP=SHR
//OUTPUT DD SYSOUT=*
//INPUT DD *
9.67.113.57 6321
USER33 **pw**
4 put //DD:DD02 data
5 get data //DD:DD01
quit
/*
以下は、この例の中で番号の付いている項目の簡潔な説明です。 EZA1736I FTP (TCP TCPCS
EZA1450I IBM FTP CS V1R5 2003 090 19:22 UTC
EZA1466I FTP: using TCPCS
EZA1456I Connect to ?
EZA1736I 9.67.113.57 6321
EZA1554I Connecting to: 9.67.113.57 port: 6321.
220-FTPDJG1 IBM FTP CS V1R2 at MVS164, 14:58:36 on 2003-01-01.
220 Connection will not timeout.
EZA1459I NAME (9.67.113.57:USER33):
EZA1701I >>> USER USER33
331 Send password please.
EZA1701I >>> PASS
230 USER33 is logged on. Working directory is "/u/user33".
EZA1460I Command:
1 EZA1736I put //DD:DD02 data
2 MF0680 seq_open_file: DDname DD02 has filename USER33.MYGDG.G0087V00
EZA1701I >>> PORT 9,67,113,57,6,158
200 Port request OK.
EZA1701I >>> STOR data
125 Storing data set /u/user33/data
250 Transfer completed successfully.
EZA1617I 820 bytes transferred in 0.020 seconds. Transfer rate 41.00 Kbytes/sec.
EZA1460I Command:
3 EZA1736I get data //DD:DD01
4 MF0680 seq_open_file: DDname DD01 has filename USER33.TEST.S.A
EZA1701I >>> PORT 9,67,113,57,6,159
200 Port request OK.
EZA1701I >>> RETR data
125 Sending data set /u/user33/data
250 Transfer completed successfully.
EZA1617I 820 bytes transferred in 0.030 seconds. Transfer rate 27.33 Kbytes/sec.
EZA1460I Command:
EZA1736I quit
EZA1701I >>> QUIT
221 Quit command received. Goodbye.