IEBCOPYでE37 ABENDを最速解決!PDS圧縮・コピーのJCLを職人がコピペ用にデバッグしたぜ

IBMメインフレーム(z/OS)のJCLユーティリティ「IEBCOPY」を、27年のベテラン職人(ITFighting Grandpa)が、サーバーラックとホログラムディスプレイの前でクロス腕で解説する、サイバーパンク風アイキャッチ画像。区分データセット(PDS/PDSE)のコピー、圧縮、アンロード/ロードといった機能が、Glowingな日本語と英語で表示されている。 【技術深掘り】メインフレーム遺産
27年の現場経験が教える、PDSライブラリ操作の全て。IEBCOPYという最強の守護神を脳内にデプロイしろ。

「IDCAMSがデータセットの掃除屋なら、IEBCOPYはライブラリの守護神だ。JCLを書くなら、IEBCOPYと格闘できないと、現場では半人前扱いだぜ。」

27年間、ITエンジニアとして現場のJCL、そして区分データセット(PDS/PDSE)のバグや容量不足(ABEND)と格闘し続けてきた老兵が、今日は「IEBCOPY」の真髄を叩き込んでやる。

IEBCOPYは、z/OS(メインフレーム)の区分データセットを操作する、最も強力で信頼されているIBMユーティリティだぜ。これさえマスターすれば、プログラムのデプロイ、ライブラリのマージ、バックアップ、そして現場で最も感謝される「PDSの圧縮(コンプレス)」まで、自在に操れるようになる。

この記事では、

  • IEBCOPYの役割
  • JCLの基本構成
  • 全パラメータの表形式解説
  • 現場で混乱しやすい注意事項

さあ、このリファレンスを脳内キャッシュにインポートして、今日の現場のStatusを正常稼働に戻そうぜ!

IEBCOPYとは?:ライブラリの Status 正常化を担う守護神

IBMメインフレーム(z/OS)のベテランITエンジニア(ITFighting Grandpa)が、ホログラムディスプレイとサーバーラックの前でクロス腕で立っている。画像内にはGlowingな日本語と英語で、「IEBCOPYとは?」「ライブラリの Status 正常化を担う守護神」という見出しが表示されている。さらに、ホログラムディスプレイには「PDSディレクトリのクリーンアップ」「メンバー断片化の除去」「スペースの断片化解消」「ライブラリの健康状態:最適」といったIEBCOPYの機能が日本語と英語でビジュアライズされている。
ライブラリが悲鳴を上げている(B37/E37 ABEND)時は、この守護神をロードしろ。IEBCOPYが、PDSの内部Statusを最速で正常化(Green)に戻してくれるぜ。

ライブラリが悲鳴を上げている(B37/E37 ABEND)時は、迷わずこの守護神をロードしろ。IEBCOPYが、PDSの内部Statusを最速で正常化(Green)に戻してくれるぜ。

IEBCOPYは、IBMメインフレーム(z/OS)において、区分データセット(PDS: Partitioned Data Set、またはPDSE)を操作するための標準的なユーティリティだぜ。

※職人の鉄則:POとPDSの混乱をデバッグしろ

JCLでPDSを定義する時、DSORG=PO というパラメータを叩き込むぜ。このPOは「Partitioned Organization(区分組織)」の略だ。現場で「PO」と言えば、それは区分データセット(PDS)のことを指していると思ってOKだぜ。ここがごっちゃになってる若手は、リングに上がる前の基本ルールで減点されてるようなもんだぜ。

基本的なJCL構成:IT職人の命令フォーマット

ベテランITエンジニア(ITFighting Grandpa)が、サーバーラックの間で空中ホログラムディスプレイを操作している。ホログラムには「基本的なJCL構成:IT職人の命令フォーマット」という見出しとともに、PGM=IEBCOPY、SYSPRINT DD、INDD、OUTDD、そしてSYSIN DD *といったIEBCOPYを実行するためのJCL構文が、青く光るサイバーなインターフェースとしてビジュアライズされている。JCLの各ステップがデータフロー図のように接続され、職人がシステムを構築している様子が描かれている。
JCLはシステムへの命令書だ。SYSPRINTでログを確認し、SYSINで具体的な動作を叩き込む。この基本形(フォーマット)を脳内にデプロイすれば、どんなユーティリティも怖くないぜ。

JCLはシステムへの命令書だ。SYSPRINTでログを確認し、SYSINで具体的な動作を叩き込む。この基本形(フォーマット)を脳内にデプロイすれば、どんなユーティリティも怖くないぜ。

IEBCOPYを起動させるための、最もシンプルで100%正常動作する基本JCLだ。SYSIN(命令パケット)へ命令クエリを叩き込むスタイルだぜ。

//IEBCOPY  JOB (ACCOUNT),'IEBCOPY JOB',CLASS=A,MSGCLASS=X
//STEP01   EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=*
//DDIN     DD DSN=YOUR.SOURCE.LIBRARY,DISP=SHR
//DDOUT    DD DSN=YOUR.TARGET.LIBRARY,DISP=SHR
//SYSIN    DD *
  COPY INDD=DDIN,OUTDD=DDOUT
/*
//

鉄壁のコード解説

  1. //STEP01 EXEC PGM=IEBCOPY : IBM純正のライブラリ制御ユーティリティ「IEBCOPY」をロードして実行する、すべての始まりとなる命令ステップだぜ。
  2. //SYSIN DD * と COPY INDD=… : システムに入力ストリーム(制御カード)を流し込む。内部コマンドの COPY によって、DDIN で定義した入力元から、DDOUT の出力先へメンバーを爆速パケット転送しろという具体的なコンビネーション命令だぜ。

全パラメータの詳細説明:職人の命令セット

ベテランIT職人のじいじ(ITFighting Grandpa)が、サーバーセンター内で空中に浮かぶ複数の命令パネルを慎重に操作している。「全パラメータの詳細説明:職人の命令セット」というタイトルが添えられ、ホログラム上には「COPY」「INDD/OUTDD」「SELECT MEMBER=」「R=Y (REPLACE=YES)」「RENAME」といったIEBCOPYの主要なパラメータやコマンドが、フローチャートのような形式で青く光り輝いている。職人が最適なシステム設定(命令セット)を構築している様子を描写したサイバーパンク風画像。
一つひとつのパラメータには意味がある。コピーか、置換か、名前変更か。状況に応じた「命令セット」を使い分け、データセットを自在にコントロールしろ。

一つひとつのパラメータには意味がある。コピーか、置換か、名前変更か。状況に応じた「命令セット」を使い分け、データセットを自在にコントロールしろ。

パラメータ・コマンド 詳細説明 職人の鉄則・意味
COPY 区分データセットのメンバーをコピー・処理する基本命令だ。 最重要。後述のSELECTやEXCLUDEと併用可能だぜ。
INDD=ddname 入力元の区分データセット(PDS/PDSE)のDD名を指定する。 必須項目。複数のDD名を指定して一括マージも可能だぜ。
OUTDD=ddname 出力先の区分データセット(PDS/PDSE)のDD名を指定する。 必須項目。INDDと同じDD名なら「圧縮(コンプレス)」になるぜ。
REPLACE=YES (R=Y) 出力先ライブラリに同名のメンバーがあった場合、上書き(置換)する。 本番デプロイ時は、これを指定して古いデータをKOするんだ。
REPLACE=NO (R=N) 出力先ライブラリに同名のメンバーがあった場合、上書きしない。 デフォルトはこのStatus。上書きエラーを未然に防ぐぜ。
SELECT MEMBER= 指定した特定のメンバーだけを選択してコピーする。 例:(MEM1, MEM2)。必要なパケットだけ選んで転送しろ!
SELECT MEMBER=((O,N,R)) メンバー名「O(古)」を「N(新)」に変更(RENAME)して置換コピー。 最後のRはReplaceだ。名前を変えつつ、既存なら上書きの特権。
EXCLUDE MEMBER= 指定したメンバー以外(除外)をすべてコピーする。 不要なゴミパケットを弾いてライブラリを移行する時に使うぜ。

【現場の罠】オンライン稼働中の排他制御無視とE37容量不足の恐怖

サーバーセンター内で、ベテランIT職人のじいじ(ITFighting Grandpa)が、複数のホログラムディスプレイに映し出されたエラーログと診断データを操作している。「よくあるエラーとトラブルシュート(IT職人のデバッグログ)」というタイトルが添えられ、ディスプレイ上には「B37 ERROR: OUT OF SPACE」「E37 ERROR: DSORG=PO MISMATCH」「PDS COMPRESS FAIL」「DCB INCONSISTENCY」といった、IEBCOPYで発生しやすい致命的なエラーメッセージやシステム・アベンド(SYSTEM ABEND)の状態が、赤とアンバーに光り輝くサイバーなUIで表示されている。職人がエラーの原因を特定し、システムを正常な状態( Status:Green )に戻そうとしている様子を描写した、サイバーパンク風画像。
E37 ABENDが出たか?焦るな、それは「データセットが悲鳴を上げている」だけのStatusだ。IEBCOPYのSYSINログ(デバッグログ)を叩けば、原因は必ず見つかる。俺が27年使い倒した、B37/E37を最速でシャットダウンさせるエラーパッチ(対処法)を、ここにまとめておくぜ。Status:Green を勝ち取れ!

ここで若手が100%ハマる、現場の最凶アベンドの罠について警告しておく。

それが、「PDSライブラリのガベージ(不要領域の断片化)による E37 / B37 ABEND(容量不足)」、そして圧縮処理時に DISP パラメータのガードを崩して引き起こす「データセット完全破壊(システムダウン)」の罠だ。

PDSというのは、メンバーを更新・削除するたびに、古い領域が「使用不可能なゴミ(ガベージ)」として中に残り続けるシビアな構造データセットだ。見た目のファイル容量に余裕があっても、内部のインデックスや空きブロックが枯渇すると、突如として E37 ABEND のストレートを喰らってシステムが急停止する。

これを解決するのが「PDSの圧縮(コンプレス)」だが、ここにド素人の罠がある。

「よし、容量不足だから圧縮コマンドのJCLを流そう!」と、ノーガードで DISP=SHR を指定してバッチを叩く奴がいる。甘いぜ、ガードがガラ空きだ!

もし、そのPDSがCICSやIMS、オンラインシステム、あるいは他のユーザーによって参照(SHR)されている最中にIEBCOPYで圧縮を仕掛けたらどうなるか。処理中のデータストリームが完全に衝突し、最悪の場合、ライブラリ内のすべての全メンバーのディレクトリ領域が汚染されて完全アベンド(データ全損)を叩き出すぜ。

プロの防衛策(カウンターパンチ)

DISP=OLDによる鉄壁の排他制御: PDSを圧縮(コンプレス)する際は、必ず DISP=OLD を指定し、データセットを自分のJOBだけで完全にロック(排他制御)しろ。システムが「他の奴は誰も触らせねえ!」とガードを固めた状態を確認してから、IEBCOPYの鉄拳(圧縮)を叩き込むのがプロの流儀だぜ。

実戦JCLサンプル:現場でコピペして戦う職人の鉄則

サーバーセンター内で、ベテランIT職人のじいじ(ITFighting Grandpa)が、複数のホログラムディスプレイに映し出されたJCLコードを操作している。「実戦JCLサンプル:現場でコピペして戦う職人の鉄則」というタイトルが添えられ、ディスプレイ上には「PDS圧縮」「メンバーコピー/名前変更」「ライブラリバックアップ」「DSORG=PO定義」といった、IEBCOPYの主要な機能を実装した実戦的なJCLコードの断片が、青く光り輝くサイバーなUIで表示されている。職人が最適なコードブロックを選択(コピペ)してシステムを構築している様子を描写した、サイバーパンク風画像。
理論も大事だが、現場では「動くコード」が正義だぜ。俺が27年使い倒した、E37 ABENDを防ぐ「PDS圧縮」や、安全なデプロイのための「メンバー変更コピー」のJCLパケットを用意した。そのままデプロイして、 Status:Green を勝ち取れ!

理論も大事だが、現場では「動くコード」が正義だぜ。俺が27年使い倒した、E37 ABENDを防ぐ「PDS圧縮」や、安全なデプロイのための「メンバー変更コピー」のJCLパケットを用意した。そのままデプロイして、 Status:Green を勝ち取れ!

実戦例1:名前を変更して本番デプロイ(置換あり)

開発ライブラリ(TEST.SOURCE)から本番ライブラリ(PROD.SOURCE)へ、名前を変えて上書きコピーするぜ。

//DEPLOY   JOB (ACCOUNT),'PGM DEPLOY',CLASS=A,MSGCLASS=X
//STEP01   EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=*
//DDIN     DD DSN=TEST.SOURCE,DISP=SHR
//DDOUT    DD DSN=PROD.SOURCE,DISP=OLD
//SYSIN    DD *
  COPY INDD=DDIN,OUTDD=DDOUT,R=Y
  SELECT MEMBER=((OLDPGM1,NEWPGM1,R),PGM002)
/*
  • COPY INDD=DDIN,OUTDD=DDOUT,R=Y : 同名メンバーがあった場合は古いシステムを上書き(R=Y)してノックアウトしろという実行命令カードだ。
  • SELECT MEMBER=((OLDPGM1,NEWPGM1,R),PGM002) : 入力元の「OLDPGM1」を、出力先では「NEWPGM1」という名前にリネームしてデプロイし、同時に「PGM002」はそのままの名前で本番環境へパケット転送する職人技だぜ。

実戦例2:PDSの圧縮(コンプレス)(最重要ミッション)

PDSの断片化されたガベージを掃除して、E37 ABENDを最速解決・予防する、27年選手の真骨頂だ。

//COMPRESS JOB (ACCOUNT),'PDS COMPRESS',CLASS=A,MSGCLASS=X
//STEP01   EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=*
//DDCOMPDD DD DSN=YOUR.LIBRARY.PDS,DISP=OLD
//SYSIN    DD *
  COPY INDD=DDCOMPDD,OUTDD=DDCOMPDD
/*
  • //DDCOMPDD DD DSN=…,DISP=OLD : 前述した通り、DISP=OLD でシステムに強力なロックを掛け、他のトランザクションを一切寄せ付けない防御陣形を敷いているぜ。
  • COPY INDD=DDCOMPDD,OUTDD=DDCOMPDD : 「入力元(INDD)と出力先(OUTDD)に全く同じDD名を指定する」、これこそがIEBCOPYにおけるPDS圧縮(コンプレス)の黄金コマンドだぜ!これによって内部データが綺麗に再配置され、E37エラーが消滅する。

実戦例3:バックアップ(アンロード)

ライブラリが壊れる前に、PDS全体を1本の順次ファイル(PS)に退避(アンロード)させておく、損切りの美学に基づいた防衛策だ。

//UNLOAD   JOB (ACCOUNT),'PDS UNLOAD',CLASS=A,MSGCLASS=X
//STEP01   EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=*
//DDPDSIN  DD DSN=YOUR.PDS.LIBRARY,DISP=SHR
//DDPSBACK DD DSN=YOUR.BACKUP.PS,DISP=(NEW,CATLG),UNIT=SYSDA,
//            SPACE=(CYL,(10,5)),DCB=(RECFM=U,BLKSIZE=27998)
//SYSIN    DD *
  COPY INDD=DDPDSIN,OUTDD=DDPSBACK
/*
  • DCB=(RECFM=U,BLKSIZE=27998) : 区分データセットをアンロード(PS化)する時は、レコード形式を RECFM=U(不定長)にし、ブロックサイズをトラック容量に最適化(27998など)するのがメインフレームの掟だ。
  • COPY INDD=DDPDSIN,OUTDD=DDPSBACK : これにより、PDSの全メンバー構造が、1本のバックアップ用順次データストリームへと安全にパッキングされるぜ。

まとめ:IEBCOPYという守護神を脳内にデプロイしろ

どうだ、IEBCOPYの使い勝手がシビアにわかったか?

こいつを自在に扱えれば、ライブラリ管理や容量限界の局面で慌ててバグ(アベンド)を出すことはねえ。現場でエラーが出ても、焦らずSYSINの命令クエリをデバッグし、DISP=OLD のガードを固めてから圧縮をぶち込め。

27年、この頑丈なJCLが俺の背中を守り、数々のシステム障害から現場を救ってくれた。次は、お前の番だぜ。

投資も、ブログも、メインフレームも、シビアにルールを読み切った職人だけが最後にリングの真ん中で立ってるんだ。さあ、学んだコードを今すぐ現場のシステムにデプロイして、 Status:Green を勝ち取るぞ!オス!!!

関連記事:

JCLの深淵へ|80列の掟と「カンマの後の沈黙」。27年選手が教えるJOB・EXEC・DD文の極意
JCLの「12列目の聖域」とは何か? 27年選手のエンジニアが、JOB文のパラメータからDISPの三段構え、継続行の「見えない空白」まで、JCL構文の深淵を徹底解説。
JCLユーティリティ必携ガイド|27年選手が選ぶ「現場で即戦力の武器」TOP5
「武器(ツール)を使いこなすプロの姿」を強調するスタイルだぜ!「IEBGENERとIEBCOPY、どっちを使えばいいんだ?」「IDCAMSのコマンドが多すぎて、やりたいことがすぐできない……」もしお前がJCLのユーティリティ選びで足踏みして…

コメント

タイトルとURLをコピーしました