XMIT(TSO TRANSMITコマンド)
XMIT:Transmit,TSO TRANSMITコマンド
TRANSMITはTSOコマンドです。XMITはTRANSMITの短縮形です。XMITはデータセットを、転送可能な形式に変換して、他のシステムに転送するために使用されます。transmitと言う名前ですが、このコマンドそのものに転送の機能は無く、JESのNJEを使っています(転送データをSYSOUTとしてスプールに書き出すので、それがNJEによって転送される)。そのためコマンドで直接転送するためには、転送先システムがJESのNJEで接続されている必要があります。
転送させずに、データセットを単に転送可能な形式に変換するだけの処理も可能です。NJE接続されていない他のMVSシステム、WindowsやUnixなどの全く別のコンピュータ・システムに送る場合にもXMITコマンドを利用できます。ただし全く別のシステムへしても、データセットはXMIT固有の形式に変換されるため、IBM以外のシステムでは直接扱うことはできません。それでもPC上にバックアップコピーを取ったり、CDやDVDに書き出したり、メーカーやベンダーに調査用資料としてデータを渡したり、などいろいろと応用できます。
MVSのデータセットはレコードによって構造化されますが、レコードは固定長、可変長、不定長、さらにブロッキングなど特有な形式を持ち、unixやwindowsなどのように、バイト・ストリームで構成されたファイル構造ではないため、ftpのように単にデータそのものの転送だけでは、受け取り側は元の形に戻せません。そこでレコードのデータそのものだけでなく、元のデータセット・レコードの形式、長さ、などの属性情報、区分データセットの場合は、ディレクトリ情報なども格納して、xmitファイルを構成します。
xmitファイルは、z/OS上では、RECFM=FB,BLKSIZE=3120,LRECL=80、のレコード形式のデータセットに格納されます。xmitファイルを格納するデータセットは順次データセット、区分データセットのメンバー、いずれでもかまいません。またxmitされる元のMVSデータセットは、順次データセット、または区分データセットです。特定のレコード形式やレコード長に、制限されることもありません。
TRANSMITで変換したxmitファイルは、同じくTSOのRECEIVEコマンドで、元の形式のデータセットに復元することができます。
RECFM=F|FBの固定長レコードのデータセットは、ftpなどでも転送可能ですが、可変長レコードや不定長レコードのデータセットは、そのまま転送しても、元のMVSデータセットとしては利用できません。不定長レコードの場合は長さがバラバラでもかまわない形式ですが、ロードモジュールに関しては、データレコードだけでなく、ディレクトリ情報も必要になるため、それがなければただのバイナリー・データと化してしまいます。
多様な種類のMVSデータセットを簡単に転送可能にするために、TRANSMITコマンドによって、確実に転送可能な固定長レコード形式に変換しているわけです。複数のデータセットをまとめることはできないので、LHAやZipのようなアーカイバーとは違いますが、無圧縮の1ファイル専用アーカイバー[転送機能付き]、とも言えます。
XMIT/RECEIVEの使い方
XMITはTSOコマンドですが、いくつものデータセットを変換したり、容量の大きなデータセットを変換するには、バッチジョブによるTSOセッションで使用することもできます。XMITの後続ステップでFTPクライアントを実行すれば、変換されたデータセットを同じジョブで転送することもできます。バッチ処理によるTRANSMIT/RECEIVEコマンドの使い方のサンプルはこちらのページで紹介しています。「データセットをファイル転送可能な形式に変換する(TRANSMITとIEHMOVE)」
変換可能なデータセットは順次または区分データセットですが、VSAMやDB2などのデータベースの場合は、IDCAMSユーティリティーやデータベース・システムのユーティリティー・プログラムによって順次データセットにアンロードすれば、XMITでの変換が可能になります。変換されたxmitファイルは、必ずバイナリー転送をする必要があります。
TRANSMITコマンドには、データセットの変換だけでなく、メッセージの送信や付加、暗号化など、いくつもの機能があります。それらについてはTSOのコマンド解説書に詳細が載っています。
MSPとVOS3では互換コマンド、ユーティリティーはありませんが、IEHMOVE互換のJSGMOVE、JSFMOVEを利用できます。IEHMOVEは順次データセットまたは区分データセットを、RECFM=FB,BLKSIZE=800,LRECL=80の形式の順次データセットにアンロードする機能を持っています。xmitファイル同様にftpや端末エミュレーターなどでの転送が可能になります。
z/OS、MSP、VOS3それぞれの間でアンロードされる順次・区分データセットも、アンロード・データセットも内部の形式には互換がありますが、アンロード・データセットのヘッダーに書き込まれる、’THIS IS AN UNLOADED DATA SET PRODUCED BY.THE IBM UTILITY, SYSMOVE.OMMBRLDWB’の識別文字列が異なるため(THE IBM UTILITY以降の部分)、他のメーカーのシステムでアンロードしようとしても、互換のないアンロード・データセットと見なされる場合があります。
おそらく、MVS(z/OS)で作成したアンロード・データセットは、MSP/VOS3側で復元できますが、逆はできません。MSP/VOS3で作成したアンロード・データセットはMVSではサポートされません。MSPとVOS3の間も同じです。これは昔、MSPやVOS3はIBMのMVS互換を意識して、随所にそれをサポートしていた部分の名残があるからです。なお、識別文字列は単なる文字なので、ヘッダーレコードの文字を無理矢理書き換えて、読み込ませたらOKだった、と言う話を聞いたことがあります。
ついでですが、IEBCOPYのアンロード・データセットは3つのOS間、相互で互換があります。これは実際に仕事でよく使っていました。ただしIEBCOPYのアンロード・データセットはVS形式なのでそのままでは転送できません。今のようにTCP/IPで簡単にネットワーク通信ができなかった頃は、磁気テープにアンロード・データセットを格納したので、アンロード・データセットが固定長になる必要はなく、IEHMOVEより簡単で使いやすかったIEBCOPYを多用していたのです。
TRANSMIT/RECEIVE、IEHMOVE(JSGMOVE/JSFMOVE)の詳細は、TSOコマンド解説書、DFSMSdfpユーティリティーー、MSP/VOS3のデータセット・ユーティリティーーのマニュアルに記載されています。
XMIT/RECEIVEのカスタマイズ
XMIT/RECEIVEは出口ルーチンによって、きめ細かなカスタマイズも可能ですが、基本的なものはパラメーターでできるようになっています。SYS1.PARMLIBのIKJTSOnnメンバーのTRANSRECで、センター毎のデフォルト属性を設定できます。特にOUTLIMパラメーターは要確認項目です。これは転送(変換)できる最大レコード数に影響します。大きなサイズのデータセットをXMITする場合、必要に応じてOUTLIMパラメーターを値を増やします。
xmitファイルの内部形式
xmitファイルの内部形式は公開されています。TSOカスタマイズ・マニュアルの「TRANSMIT とRECEIVE のカスタマイズ」の章に詳しく解説されています。
内部の形式がわかれば、このようなツール「Xmit Manager(XMITファイルビュワー)」を作ることもできます。
2 Responses to “XMIT(TSO TRANSMITコマンド)”
Comment from アルテシード
Time 2009年10月11日 at 10:20
ご指摘ありがとうございました。それに基づき記事の一部を修正いたしました。
Comment from S360-195
Time 2009年10月11日 at 00:42
>このコマンドには転送の機能は無く、
>転送可能な形式に変換するという機能のコマンドです。
TSO XMITコマンドの目的はData SetをNJEで結ばれた他のNodeのユーザーに送る事です。他のNodeとはMVS(z/OS)だけでなくVMも含まれます。ユーザーというのはMVSの場合はTSOのユーザーであり、VMの場合はVM上の仮想計算機のユーザー(基本的にはCMSユーザー)です。
XMITコマンドはData Setだけでなくメッセージも送る事が出来ます。
確かに変換されたデータの「転送」そのものはMVSのJESのNJE機能や、VMのRSCS仮想計算機が自動的行いますので、NJEが導入されていなければ自動的な転送は行われません。ただし送り先が自分自身のNodeのユーザーであれば当然「転送」そのものは行われません。
XMITはData SetをNETDATA Formatに変換してJESのSpoolにPunch Cardのデータとして他のNode(自分自身のNodeでもかまわない)のユーザーIDに送るよう書き込みます。XMITのパラメータOUTDSNを特に指定するとSpoolにPuch Cardのデータとして書き出されるのでは無く、MVSのData SetにNETDATA formatで書き出されます。
Punch Cardとして書き出されるので、LRECLが80バイトになっています。
>他のシステムへの転送と言っても、
>XMIT固有の形式に変換されるため、
>z/OS以外のシステムでは直接扱うことはできません。
「XMIT固有の形式」というのがNETDATA formatでこれはMVS(z/OS)固有ではありません。
VM/CMSのSENDFILE/NOTE/RECEIVEコマンドはこのNETDATA formatをTSOのXMIT/RECEIVEコマンドと同様に扱いますのでMVS以外VMでも扱えます。
VM/CMSのマニュアルにもその形式の記述がなされています。参照 下記URL
http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsc5/hcsh1b10145.htm