IBM i の同期保管コマンド STRSAVSYNC をある環境で使ったら上手くいかない。
IBM の SWMA と数ヶ月すったもんだしてましたが、ようやく解決しました。( 2025年5月27日時点 )
環境
- IBM i (S1014) V7R5M0
- QCCSID : 5026
参考リンク
その前に、 STRSAVSYNC 意外と知られていないので、簡単に...
STRSAVSYNC を使うと並行して実施している SAVE 系コマンドに対して、同じチェックポイント(保管点)を取ることができます。
詳細は割愛しますが、概ね以下の流れです
- ①STRSAVSYNCで任意の 保管 ID と保管コマンド 実施回数(例えば2回) を指定して同期保管の開始を宣言
- ② 保管 ID を指定して ライブラリをSAVLIB(SAVE 1回目)を SBMJOB して待機します
- ③ 保管 ID を指定して IFSディレクトリをSAV(SAVE 2回目)を SBMJOB して待機します
- ④ 実施回数を満たしたので、同じ保管点で、一斉に保管処理が開始されます
それは、さておきこれが STRSAVSYNC ①の時点で上手くいかず。ここから数ヶ月やりとりが始まりました。
結果的に、QCCSID 5026 指定だと駄目な不具合 Known Issues - DT435894 だった様で、JOB CCSID を 5035 にしても解決しない件でした。もちろん、JOB CCSID 5026 でも駄目だったようです。
エラーは以下の様なポート 9662 で立ち上がっているサービスと接続できない的な感じの内容でした。エラー発生時に 9662 はリッスンしておりました。
> 通信エラーが起こりました
追加のメッセージ情報
メッセージ ID . . . . : CPF37C6 重大度 . . . . . . . . : 40
メッセージ・タイプ . . : エスケープ
送信日付 . . . . . . : 24/12/17 送信時刻 . . . . . . : 18:40:37
メッセージ . . : 通信エラーが起こりました。
原因--ポート 9662 の通信試行中にエラーが発生しました,理由 3 。
1 -- ソケット作成が正常に実行されなかった。
2 -- SOCK オプションの設定に失敗した。
3 -- 接続に失敗した。
4 -- 受信に失敗した。
5 -- 送信に失敗した。
6 -- バインドに失敗した。
7 -- LISTEN に失敗した。
8 -- 予期しない応答。
9 -- IOCTL が失敗した。
その後テスト PTF を導入し、実施したところ正常に同期 SAVE ができる様になりました。
正式な PTF がもうすぐ出るそうで、QCCSID 5026 で上手くいかない方は PTF を当ててみて下さい。
# テスト
STRSAVSYNC SYNCID(SAVE01) NUMSYNC(2) STRSAVWAIT(60)
SBMJOB CMD(
SAVOBJ OBJ(QRPGSRC) LIB(USHIDA) DEV(*SAVF)
SAVF(USHIDA/USAVE01) CLEAR(*REPLACE)
SAVACT(*SYNCLIB) SYNCID(SAVE01)
SAVACTMSGQ(USHIDA/USAVEMSGQ)
)
JOB(SAVE01_01)
SBMJOB CMD(
SAV DEV('/QSYS.LIB/USHIDA.LIB/USAVE02.FILE')
OBJ(('/WWW/CS2/ETC'))
SAVACT(*SYNC) SYNCID(SAVE01)
SAVACTMSGQ('/QSYS.LIB/USHIDA.LIB/USAVEMSGQ.MSGQ')
DTACPR(*YES)
CLEAR(*REPLACE)
)
JOB(SAVE01_02)
-------------------
# MSGQ
-------------------
メッセージ表示
システム : CSC2023
待ち行列 . . . : USAVEMSGQ プログラム . . : *DSPMSG
ライブラリー : USHIDA ライブラリー :
重大度 . . . . : 00 転送 . . . . . : *HOLD
応答を入力して(必要な場合),実行キーを押してください。
同期 ID SAVE01 のすべての操作が開始するのを待っています。
1 個のライブラリー中の 0 個が処理された。 25/05/30 17:51:32 で USHIDA を
開始しました。
活動状態保管チェックポイントの処理が進行中です。
活動状態保管チェックポイントの処理が完了した。
活動状態保管チェックポイントの処理が完了した。