非VSAMデータセット(PS,PDS)の操作いろいろ(IDCAMS)
AMS(アクセス方式サービスプログラム)はVSAMデータセットとカタログ操作用のユーティリティ・プログラムとして提供されていますが、その応用範囲は広くて、VSAMだけでなくPSやPDSなどの非VSAMデータセットに関してもさまざまな操作を行うことができます。AMSを利用した非VSAMデータセットに対するいろいろな操作のサンプルを紹介します。
JCLの基本形
// JOB Statement //********************************************************************* //* Sample JCL - IDCAMS //* =================== //********************************************************************* //IDCAMS EXEC PGM=IDCAMS,REGION=4096K //SYSPRINT DD SYSOUT=* //SYSIN DD * AMS制御文 //
プログラム名はMSPではKQCAMS、VOS3ではJSCVSUTですが、いずれもIDCAMSの別名が付いているからIDCAMSとしても利用できます。ただし制御文には一部非互換もあるから必要に応じてマニュアルを参照してください。
使いたい機能に応じたAMS制御文をSYSINに記述することで処理を行います。
データセットをカタログする、アンカタログする
//SYSIN DD * DEFINE NONVSAM (NAME(TEST.PSFILE) DEVT(3390) VOL(WRKVOL)) DELETE TEST.PSFILE NVSAM NSCR //
DEFINE NONVSAMはカタログ、DELETEがアンカタログです。NSCRオプションを付けているので削除はされずアンカタログだけされます。
データセットを改名(リネーム)する、削除する
//SYSIN DD * ALTER TEST.PSFILE NEWNAME(WORK.PSFILE) DELETE TEST.PSFILE //
ALTERはデータセットの属性変更です。この場合はデータセット名の変更となります。DELETEでデータセットが削除されます。
同じ事はIEHPROGM(MSPではJSGPROGM、VOS3ではJSFCTLG)ユーティリティでも行えますが、カタログされているデータセットの場合カタログ登録内容は変更されません。カタログされているデータセットならAMSの方が便利です。あるいは削除であればIEFBR14を使いジョブ管理の機能で消してしまってもかまいません。
// EXEC PGM=IEFBR14 //SYSUT2 DD DISP=(OLD,DELETE),DSN=TEST.PSFILE //
データセットの削除と共にカタログからも削除する場合はDISPとDSNパラメーターのみを指定します。以下のようにUNITとVOL=SERを指定してしまうとデータセットは削除されますがカタログ登録は残ってしまいます。
// EXEC PGM=IEFBR14 //SYSUT2 DD DISP=(OLD,DELETE),DSN=TEST.PSFILE, // UNIT=SYSDA,VOL=SER=WRKVOL //
区分データセットのメンバーを改名(リネーム)する、削除する
//SYSIN DD * ALTER TEST.POFILE(TESTJCL) NEWNAME(TEST.POFILE(WORKJCL)) DELETE TEST.POFILE(WORKJCL) //
AMSではメンバー名を()で指定すると、データセットではなくその中のメンバーに対する操作になります。
区分データセットを圧縮する(これはAMSではありません)
// 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 //
自分専用で使っていて他人がアクセスしないことがわかっているデータセットでない限り、DISP=OLDにすることを勧めます。
データセットまたはメンバー内容をプリントする
//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名を指定します。