SDSFで表示中のSYSOUTをデータセットに取り込む

By kamii - Last updated: 金曜日, 10月 24, 2008

SDSFでSYSOUTの内容を見ているときに、そのプリントリストをデータセットに保存したいと思ったらコマンドで簡単にできる。
パネルのCOMMAND INPUT ===> フィールドに以下のコマンドを順番に打てばよい。

出力先データセットは順次編成なら(member)を取ればよい。データセットはRECFM=VBがいいでしょう。LRECLは適当でかまいません。プリントリストなら121または133以上でしょうが、きっちり決めることはなく例えば200とかにしてしまってかまいません。実際のレコードの長さで格納されます。そのためのRECFM=Vですから…
少し大きめの区分データセットを用意して、その中にメンバーで格納するのが便利です。

ジョブリスト、SYSOUT(DD名)リストパネルであれば、PTコマンドではなく、NPフィールドにアクション文字「XDC」を入力してもよい。この場合、出力先データセットは続いて表示されるパネルで指定できる

Filed in ISPFとSDSFのちょっと得する使い方

非VSAMデータセット(PS,PDS)の操作いろいろ(IDCAMS)

By kamii - Last updated: 木曜日, 10月 23, 2008

AMS(アクセス方式サービスプログラム)はVSAMデータセットとカタログ操作用のユーティリティ・プログラムとして提供されていますが、その応用範囲は広くて、VSAMだけでなくPSやPDSなどの非VSAMデータセットに関してもさまざまな操作を行うことができます。AMSを利用した非VSAMデータセットに対するいろいろな操作のサンプルを紹介します。

JCLの基本形

プログラム名はMSPではKQCAMS、VOS3ではJSCVSUTですが、いずれもIDCAMSの別名が付いているからIDCAMSとしても利用できます。ただし制御文には一部非互換もあるから必要に応じてマニュアルを参照してください。
使いたい機能に応じたAMS制御文をSYSINに記述することで処理を行います。


データセットをカタログする、アンカタログする

DEFINE NONVSAMはカタログ、DELETEがアンカタログです。NSCRオプションを付けているので削除はされずアンカタログだけされます。


データセットを改名(リネーム)する、削除する

ALTERはデータセットの属性変更です。この場合はデータセット名の変更となります。DELETEでデータセットが削除されます。
同じ事はIEHPROGM(MSPではJSGPROGM、VOS3ではJSFCTLG)ユーティリティでも行えますが、カタログされているデータセットの場合カタログ登録内容は変更されません。カタログされているデータセットならAMSの方が便利です。あるいは削除であればIEFBR14を使いジョブ管理の機能で消してしまってもかまいません。

データセットの削除と共にカタログからも削除する場合はDISPとDSNパラメーターのみを指定します。以下のようにUNITとVOL=SERを指定してしまうとデータセットは削除されますがカタログ登録は残ってしまいます。


区分データセットのメンバーを改名(リネーム)する、削除する

AMSではメンバー名を()で指定すると、データセットではなくその中のメンバーに対する操作になります。


区分データセットを圧縮する(これはAMSではありません)

自分専用で使っていて他人がアクセスしないことがわかっているデータセットでない限り、DISP=OLDにすることを勧めます。


データセットまたはメンバー内容をプリントする

PRINTコマンドでデータセットやメンバーの内容をプリントすることができます。ただし1レコード毎にユーティリティが付ける見出しが出力されてしまいます。パック10進数やバイナリー値などを含む業務プログラム用データの印刷向けです。JCLやソースプログラムなどの印刷ではメンバーの内容がそのままベタで出力される方がいいでしょうから、その場合にはREPROコマンドを使えます。PRINTコマンドと違って出力先の指定が必要です。例ではOFILEパラメーターで出力先を定義したDD文のDD名を指定します。

Filed in ありがたいサンプルJCL

区分データセットのメンバー名変更と削除(IEHPROGM)

By kamii - Last updated: 木曜日, 10月 23, 2008

区分データセットのメンバー名の変更と削除を行う。

プログラム名はMSPではJSGPROGM、VOS3ではJSFCTLGとなるがいずれもIEHPROGMの別名が付いているからMVSと同じ名前で利用できる。

区分データセットのメンバーのリネームと削除の例です。ユーティリティ制御文が1行に書ききれない場合は、72桁目に何かの文字を置き、次の行の16桁目から続きを記述します。(RENAME制御文参照)
MVSでは1つのSCRATCH文では1つのメンバーのみ削除できます。MSPでは複数のメンバーを削除する場合は()でくくって記述できます。1つのSCRATCH文で最大30メンバーを削除できます。VOS3では複数のメンバーを削除する場合はMEMBER=メンバー名を繰り返し指定することで最大20メンバー分を削除できます。

IEHPROGMはメンバーだけでなくデータセットのリネームや削除もできます。ただしカタログされているデータセットはIEHPROGMでリネームまたは削除してもカタログ・エントリーは変更されません。カタログされているデータセットに関しては、このユーティリティよりはDD文のDISPパラメーターによる削除、あるいはIDCAMSユーティリティを利用した方がいいでしょう。

Filed in ありがたいサンプルJCL

区分データセットのメンバーリスト出力(IEHLIST)

By kamii - Last updated: 木曜日, 10月 23, 2008

区分データセットのメンバーリストを出力する。

プログラム名はMSPではJSGLIST、VOS3ではJSFLISTとなるがいずれもIEHLISTの別名が付いているからMVSと同じ名前で利用できる。
FORMATパラメーターで、各メンバーのディレクトリ・エントリーが編集されます。ただしロードモジュール用の編集となります。ロードモジュールでなければFORMATの代わりにDUMPと指定した方が返って見やすいでしょう。volumeの箇所にリストアップするデータセットが格納されているボリューム名を指定します。

Filed in ありがたいサンプルJCL

06.データ管理

By kamii - Last updated: 木曜日, 10月 23, 2008

データセットとファイル

MVSではファイルを「データセット」と呼びます。Windowsでは一部のソフトウェアがファイルを「ドキュメント」と呼びます。しばしば同じ意味で使われますが、この場合のファイルとドキュメントは、データの集合をより人間の操作感覚に近いものとしてドキュメントと表現し、裏付けである記録媒体上(例えばハードディスク)での集合体をファイルとして扱う、として使い分けられたものだと考えることができます。MVSにおけるファイルとデータセットもしばしば同じ意味で使われますが、本来は使い分けられるもので、それを理解することは重要です。

Windowsでマイドキュメントを開いてみてください。その中にはいくつかのファイルが入っているはずです。Wordファイル、Excelファイルあるいは画像のファイル何でもいいのですが、名前が付けられファイルの大きさや種類が示されていますね。MVSにおけるデータセットはそこで表示されている1つ1つのファイルと同じです。つまりディスク上に記録されているデータの集合としての実体です。一方ファイルは実体ではなく論理的なデータの集合体として捉えたもので、プログラムで扱うデータの集合として考えることができます。
データセットに付ける名前がデータセット名です。データセット名は1つまたは複数の修飾子(Qualify)で構成されます。修飾子はセグメントとも呼ばれます。各々の修飾子は1から8文字で、そのうち先頭は英字(AからZ)または国別文字(#@$または\)でなければなりません。残りの7文字は、英字、数字(0から9)、国別文字、またはハイフン(-)のいずれかです。修飾子はピリオド(.)によって連結し、データセット名を構成します。データセット名はすべての修飾子およびピリオドを含めて44文字までを使用することができます。ただし磁気テープ上のデータセットには17文字までの名前しか付けられません。17文字以上の名前を付けた場合は後方の17文字で認識されます。

ファイルとデータセット

ファイルとデータセット


データセット名の構成

データセット名の構成



デバイスとボリューム

データセットはディスクやテープに記録され保存されます。ハードウェアとしてのディスク装置やテープ装置がデバイスです。これらのデバイスには記録媒体が取り付けられ、実際のデータが記録されます。MVSではこの記録媒体をボリュームと呼びます。ボリュームとはデータセットを格納する入れ物(器)と言っていいでしょう。デバイスとボリュームは必ずしも1対1になりません。特にテープ装置で考えるとわかりやすいです。(PCのCD-ROMも同じです。機械の方がデバイスで、記録するメディアとしてのCD-ROMがボリュームに相当します。)

デバイスとボリューム

デバイスとボリューム



カタログ

カタログはデータセット名およびそれが作成された装置の種類とボリューム名(テープであればテープ内の順序番号も含む)を記録しておく機能です。カタログされたデータセットは、DD文にデータセット名とアクセス後の後始末方法だけを指定すればアクセスできます。ユーザーは個々のデータセットが格納されているボリューム名を覚えたり、管理したりする必要がなくなります。MVSはDD文にボリュームの指定がないとカタログを探索してデータセットの場所を求めます。
また、カタログはデータセットを名前で管理するという面も併せ持ちます。これによってデータセットをバックアップする際などに、ボリュームを意識することなく、特定の用途にグループ化されたデータセットを一度にまとめて処理することができます。例えば経理業務のマスターファイルがKEIRI.MASTER.xxxxxxxxのように命名されていれば、KEIRI.MASTERで始まるすべてのデータセットを1度の操作で容易にバックアップを行うことができます。この時バックアップの対象になるデータセットがどのボリュームに格納されているかを意識する必要はありません。またカタログを使用する場合は異なるボリュームであっても同じ名前のデータセットを作成することはできなくなります。そのため同名のデータセットが散在し、どれが最新のものか、どれが正しい内容のものかが不明になるなどと言ったことも起きません。またカタログ自体にセキュリティを掛ければ、規定の命名基準に合っていない名前のデータセットをむやみに作成することを防止することもできます。なおカタログを上手に使うためには使用するデータセット名を正しく階層化することが必要です。

カタログによるデータセットのアクセス

カタログによるデータセットのアクセス



アロケーション

ジョブ・ステップで使用するデータセットは、あらかじめJCLのDD文によって定義されます。MVSはジョブ・ステップの開始時に、定義されたデータセットを探し出し、利用できるように準備します。これがアロケーションで、データセットを資源としてジョブ・ステップに割り当てることです。プログラムから見た場合は、論理的なデータの集合であるファイルを、データの実体であるデータセットに関連付けることになります。

手順が多く面倒に見えますが、MVSではアロケーションの仕組みを採用することによってプログラマーとオペレーターの負担を減らし、スループットを向上させています。
例えば処理の結果をデータセットに出力する場合、対象のデータセットを新たに作成して書き出すのか、既存のデータセットに上書きするのか、追加するのか、同じ出力処理でも何通りもの状況が考えられます。
プログラマーは考え得るすべての状況に対応したロジックを組まねばなりません。データセットがすでに存在していたら上書きするのか最後尾に追加するかを、いずれか一方に固定した処理にするか、あるいはパラメーターなどで選択できるようにするかを考え実装しなければなりません。このようなことは本来アプリケーションとしてのビジネス・ロジックとは直接関係しません。
また運用する側から見ればプログラム側で機能が固定されてしまうと、プログラムに合わせた運用しかできず不便です。プログラムが常に既存のデータセットの先頭から上書きして書き出す仕様になっていれば、追加して書き出したいときには現在のデータセットをバックアップしておき、後でマージしなければなりません。新たなデータセットに書き出したいときには、プログラムの実行前にあらかじめ空のデータセットを作成しなければなりません。このような作業が発生すれば、その分ジョブの実行に手間取り、結果としてシステムのスループットは低下します。
プログラマーが楽をすればオペレーターの負担は増しますし、それを解決するにはプログラミングは制御的な処理で複雑になり負担も増えます。これだけのことを考えてもプログラマー、オペレーター双方に取って負担です。

MVSにおけるアロケーションは、このような問題からプログラマーとオペレーター双方の負担を減らし、柔軟な運用を可能にする仕組みなのです。
※アロケーションの機能はMVSではデータ管理ではなくジョブ管理に属します。便宜上ここで説明しましたが、実際にはデータセットの割り当ては、ジョブで使用する資源として管理されるため、ジョブ管理の仕事となっています。

Filed in ..基礎編

アンカーポインターの持ち方

By kamii - Last updated: 木曜日, 10月 23, 2008

Filed in システムプログラマーのための手引きいろいろ

MVCL命令の要約

By kamii - Last updated: 水曜日, 10月 22, 2008

命令実行前のレジスター

転送先のレングス分、転送した時点で命令は終了する。転送先が長い時、余った領域にはPADキャラクターが埋まる。転送先レングスが0の時、何も起こらない。レジスターの内容は変わらない。ただし条件コードは1が設定される。


命令実行後のレジスター


コピー先の長さ ≦ コピー元の長さ の場合


コピー先の長さ > コピー元の長さ の場合



Filed in MVS実践アセンブラー・プログラミング

DFP・31ビットモード・プロセッシング

By kamii - Last updated: 水曜日, 10月 22, 2008

MVSでは当初からQSAM、BSAM、BPAM等によるデータセットのアクセスは24ビットモード・プロセッシングが基本でした。ベーシックなI/OメカニズムはCCWも含めMVS/XAの時点で31ビット化されていましたがQSAMなどのアクセス法レベルではMVSがESAになってDFPがDFSMSに統合された時から31ビットモード・プロセッシングが可能になりました。APIのパラメーター(1部を除く)やデータセットのI/Oバッファが16MBラインの上へ配置できるようになったことはプログラムを作成する上でも恩恵が大きいです。しかしながら従来の24ビットモード・インタフェースではMVSとMSPおよびVOS3にはほぼ完全な互換がありましたが、31ビットモード・インタフェースでは各社各様の仕様になっておりAPIの互換はありません。なおMSPでは31ビットモード・インタフェースはサポートされていません。


DCBの大きさ(QSAM)


拡張DCB(DCBE)の大きさ(QSAM)


QSAMバッファプールの解放

従来はCLOSEマクロの後でFREEPOOLが必要であったが、DCBEでQSAM I/Oバッファを31ビットにする場合はCLOSEルーチン内で自動的に解放されるため不要となった。FREEPOOLマクロはエンハンスされず24ビットモードのバッファしか解放できないため。(DFSMS/MVS Macro Instructions for Data Sets SC26-4913)


サンプルコード

Filed in API、インターナルの違い

DASDレイアウト

By takao - Last updated: 水曜日, 10月 22, 2008

レイアウト

IBMのDASDは、トラック上はCKD(カウント、キー、データ)という形式で管理されます。

その名前のとおり、Count|key|Data| gap |Count|key|Data| gap という形でデータが並んでいます。
ここでカウントには、「レコード番号、キーがあればキーの長さ、データの長さ」が書き込まれます。

オープン系で使われるディスクはFBA形式といわれ、すべてセクターという概念でトラック上に割り振られています。
CKDの場合、セクターという概念はありません。(もっとローレベルではありますが)ブロック長によりデータ長は可変です。

ディスク全体はシリンダー、ヘッド、レコード(CCHHR)でアドレスされます。



ディスクはスパターとアクチュエータからできていますから、アクチュエータが指す場所はすべて同じヘッドが並んでいます。なので、円筒形が重なったと考えるほうが合理的なのです。この単位をシリンダーといいます。そして、何番目のヘッドかでトラックが確定します。そのトラック上のレコード番号でディスクの場所は決まるのです。3次元にアドレスをもっていると考えるとわかりやすいでしょう。

VTOC

IBMディスクでもっとも重要な場所はシリンダー0、ヘッド0、レコード1です。ここには、ディスクのラベル(Volser)とVTOCの場所が指定されています。汎用機ではVTOCの場所を指定できます。

IPLボリューム

ブートをかけるプロセッサーを指定して、チャネルをリセット”System-Reset”しLoadコマンドを出すと、指定したDASDのシリンダー0、ヘッド0、レコード1からIPLブートれコートを読みます。このブートレコードはあらかじめ、ユーティリティ(ICKDSF)でIEAIPL00というファイルをコピーすることで作られます。つまり、ここにスタンドアローンのプログラムを書き込むと動作します。これを利用したのがスタンドアローンで動作するダンプやdfsmsdssです。
Filed in メインフレーム・ハードウェア

ラージDASD(3390-9型)の空きスペース管理

By kamii - Last updated: 水曜日, 10月 22, 2008

シリンダー数が4370cyl(x1112)以上になると総トラック数が65535(xFFFF)を超えてしまう。このため2バイトのトラックアドレスでは表現できなくなる。IBM 3390-9型、日立6588-9型がこれに当たる(10017cyl)。
DSCB5ではRTAは2バイトのため、このDSCBでは空きスペースを管理できない。

Device Size = 10,017cyl + 3cyl(Alternate)
MVSでOS VTOCにするとスペース管理はDSCB5でなくDSCB7となり、DSCB4のVTOC IndicatorがxA0となる。このVolumeをVOS3と共用してもVOS3からではVTOCエラーとなりアロケーションできない。

Filed in システムプログラマーのための手引きいろいろ