実行環境

102. データ待ち行列を複製するには ?

データ待ち行列 (*DTAQ) は CRTDUPOBJ コマンドによって複製することはできない。
嘘だと思ったら CRTDUPOBJ + F4 キー を押して
「オブジェクト・タイプ」 (OBJTYPE) にカーソルセットして
F4 キーを押して指定可能なオブジェクトの一覧を調べてみて欲しい。
データ待ち行列 (*DTAQ) は実体はメモリーのようなものなので
読取りのパフォーマンスは素晴らしく良いのだが、読取ると中身は消えてしまう。
そのためか CRTDUPOBJ によって複製することはできない。
しかしテストやデバッグをしていてあるデータ待ち行列 (*DTAQ) の BACKUP を
とっておきたい場合、つまりどうしても複製したい場合が発生するのも当然のことである。

ところで印刷スプールが SAVLIB などで保管できるようになっているのと
同様にデータ待ち行列 (*DTAQ) も SAVOBJ や RSTOBJ などで保管できるようになっている。
これを利用すれば

SAVOBJ MYDTAQ ... で *DTAQ を保管してから
RSTOBJ MYDTAQ ... で 復元すれば結果的にデータ待ち行列 (*DTAQ) を

複製しているのと同じことになる。

【例】データ待ち行列 (*DTAQ) の保管
SAVOBJ OBJ(VTDTAQ) LIB(QUSRTEMP) DEV(*SAVF) OBJTYPE(*DTAQ) SAVF(QTEMP/MYSAVF) QDTA(*DTAQ)

【注意】 待ち行列データ (QDTA) パラメータに *DTAQ を忘れずに指定すること

【例】データ待ち行列 (*DTAQ) の復元
RSTOBJ OBJ(VTDTAQ) SAVLIB(QUSRTEMP) DEV(*SAVF) OBJTYPE(*DTAQ) SAVF(QTEMP/MYSAVF)
   MBROPT(*ALL) ALWOBJDIF(*ALL) RSTLIB(QTEMP)

【注意】RSTLIB パラメータも明示的に元のライブラリーとは
ちがうライブラリー名を指定すること。
MBROPT(*ALL) ALWOBJDIF(*ALL) の指定は
復元ライブラリーにこのオプジェクトが
存在していない場合でも復元することを意味している。