#z/Db2のCOPYユーティリティでハマった話
メインフレームの現場から離れて4か月。少しずつメインフレームの知識を忘れていると感じたため、自分自身の備忘録として書きます。
結構忘れてきてるから、コードに自信がない・・・
ある朝のことz/Db2のCOPYユーティリティを使用して実行している定期バックアップジョブがabendしてた・・・orz
でも、原因が分からない。それまで普通に動いてたのに・・・
バックアップ容量も見積もって余裕を持たせてるし、バックアップジョブの実行時間にも問題ない。
なのにどうして!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
######原因はz/Db2ユーティリティのTEMPLATEだった
-TEMPLATEユーティリティは各テンプレートに関して、テンプレート名、データ・セットの命名規則、必要な割り振りパラメーターを指定できる。
-なんのこっちゃと思った?例を挙げよう。
以下のような名前のDBとテーブルスペースたちがあったとしよう。
1つ目
DB名:DBTEST1
TS名:TSTEST1
2つ目
DB名:DBTEST2
TS名:TSTEST2
こうしたDB、TSたちに対していちいちデータセット名JCLにべた書きしてを割り振るのは面倒すぎる。それにデータセット名は一意でないといけないから、被りは絶対NG!
そんなこ定期バックアップでいちいち考慮してられっか(怒)
って時にこのTEMPLATEが超便利なんです。
TEMPLATEにはあらかじめDB名やTS名のほかに日付や時間にデータセット名を一意にするためのがある。それらを組み合わせると、
TEMPLATE COPYDS DSN &DB..&TS..IC.D&DATE..&UN
LOCALDDN UNIT SYSDA DSN(COPY001F.IFDY01) SPACE(15,1) CYL
DISP(NEW,CATLG,CATLG)
LISTDEF LIST1 INCLIUDE DB.ONLDB.*
COPY TABLESPACE LIST1 COPYDDN(COPYDS)
こんな感じ。実際に使ってたのはVTLだけどそこは許して・・・。
じゃあ何が悪かったのかというと。
TEMPLATE COPYDS DSN &DB..&TS..IC.D&DATE..*&UN*
「&UN」の部分。これは、英数字からなるランダムな8文字で、DB2 はこの文字をシステム・クロックから組み込んでくれる。
この数字が当時、偶然GDG(世代管理)データセットの絶対バージョンGxxxxVxxxのランダムな数字を生成してしまった。
ただ、実態はGDGではないからz/OS君が異常を検知してabendしちゃってた。
結局ダサいけど、↓みたいな感じで直した。
TEMPLATE COPYDS DSN &DB..&TS...&UN..IC.D&DATE.
そこまで考えてバックアップ設計をしないといけないのねって痛感した。