AMS(アクセス方式サービスプログラム)ユーティリティーは、VSAMデータセットとカタログ操作用のユーティリティ・プログラムとして提供されていますが、その応用範囲は広くて、VSAMだけでなくPSやPDSなどの非VSAMデータセットに関してもさまざまな操作を行うことができます。AMSを利用した非VSAMデータセットに対するいろいろな操作のサンプルを紹介します。
JCLの基本形
1 2 3 4 5 6 7 8 9 10 |
// JOB Statement //********************************************************************* //* Sample JCL - IDCAMS //* =================== //********************************************************************* //IDCAMS EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * AMS制御ステートメント // |
プログラム名は、MSPではKQCAMS、VOS3ではJSCVSUTですが、どちらのOSでもIDCAMSの別名が付いているので、そのままIDCAMSと指定しても利用できます。このユーティリティーは、使いたい機能に応じたAMS制御ステートメントをSYSINに記述することで処理を行います。ただし、制御ステートメントには一部非互換もあるので、必要に応じてマニュアルを参照してください。
データセットをカタログする、アンカタログする
1 2 3 4 |
//SYSIN DD * DEFINE NONVSAM (NAME(TEST.PSFILE) DEVT(3390) VOL(WRKVOL)) DELETE TEST.PSFILE NVSAM NSCR // |
DEFINE NONVSAMはカタログ、DELETEがアンカタログです。NSCRオプションを付けているので、削除はされずアンカタログだけされます。
データセットを改名(リネーム)する、削除する
1 2 3 4 |
//SYSIN DD * ALTER TEST.PSFILE NEWNAME(WORK.PSFILE) DELETE TEST.PSFILE // |
ALTERは、データセットの属性変更です。この場合は、データセット名の変更となります。DELETEでデータセットが削除されます。
同じ事は、IEHPROGM(MSPではJSGPROGM、VOS3ではJSFCTLG)ユーティリティでも行えますが、カタログされているデータセットの場合、カタログ登録内容は変更されません。カタログされているデータセットのリネームならAMSの方が便利です。削除であれば、IEFBR14を使いジョブ管理の機能で消してしまってもかまいません。
1 2 3 |
// EXEC PGM=IEFBR14 //SYSUT2 DD DISP=(OLD,DELETE),DSN=TEST.PSFILE // |
データセットの削除と共にカタログからも削除する場合は、DISPとDSNパラメーターのみを指定します。下記のように、UNITとVOL=SERを指定してしまうと、データセットは削除されますがカタログ登録は残ってしまいます。
1 2 3 4 |
// EXEC PGM=IEFBR14 //SYSUT2 DD DISP=(OLD,DELETE),DSN=TEST.PSFILE, // UNIT=SYSDA,VOL=SER=WRKVOL // |
区分データセットのメンバーを改名(リネーム)する、削除する
1 2 3 4 |
//SYSIN DD * ALTER TEST.POFILE(TESTJCL) NEWNAME(TEST.POFILE(WORKJCL)) DELETE TEST.POFILE(WORKJCL) // |
AMSでは、メンバー名を()で指定すると、データセットではなくその中のメンバーに対する操作になります。
データセットまたはメンバー内容をプリントする
1 2 3 4 5 6 7 |
//PRINTOUT DD SYSOUT=(K,,FM27) //SYSIN DD * PRINT IDS(USR1.JCL(IDCAMS)) PRINT IDS(USR1.JCL(IDCAMS)) CHAR REPRO IDS(USR1.JCL(IDCAMS)) OFILE(SYSPRINT) REPRO IDS(USR1.JCL(IDCAMS)) OFILE(PRINTOUT) // |
PRINTコマンドで、データセットやメンバーの内容をプリントすることができます。ただし、1レコード毎にユーティリティが付ける見出しが出力されてしまいます。パック10進数やバイナリー値などを含む業務プログラム用データの印刷向けです。JCLやソースプログラムなどの印刷では、メンバーの内容がそのままベタで出力される方がいいでしょうから、その場合にはREPROコマンドを使えます。PRINTコマンドと違って、出力先の指定が必要です。例では、OFILEパラメーターで出力先を定義したDD文のDD名を指定しています。
区分データセットを圧縮する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// JOB Statement //PDSCOMP EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=OLD,DSN=pds dataset //SYSIN DD * COPY I=SYSUT1,O=SYSUT1 // または、 // JOB Statement //PDSCOMP EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=OLD,DSN=pds dataset //SYSUT2 DD DISP=OLD,DSN=pds dataset //SYSIN DD DUMMY // |
区分データセットの圧縮は、AMSではなくIEBCOPYを使います。自分専用で使っていて他人がアクセスしないことがわかっているデータセットでない限り、DISP=OLDにすることを勧めます。