1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(QA) Db2 for i でジャーナルレシーバーを削除しようとした時、CPF7023エラーが発生

Last updated at Posted at 2025-06-09

DB2 for i のテーブル他テストライブラリー一式を他システムへコピーしようとしました。不要なジャーナルレシーバー(DBログ)が多数あるため、DLTJRNRCVコマンドで削除しようとしたところCPF7023が出てジャーナルレシーバーを削除できません。
image.png

上記の原因は、ジャーナルレシーバーは前後関係を保持しており、削除しようとしたジャーナルレシーバー(上記例ではJRNRCV0002)よりも古いジャーナルレシーバーが存在しているためです。ジャーナルレシーバーを削除する際は古い順に削除する必要があります。

※一昔前はジャーナルレシーバーの順番に関わらず任意のジャーナルレシーバーを削除できていました。

環境の確認

上記のサンプルでは下記のようにジャーナルレシーバーが数十個あります。
image.png

このサンプルではシステムによる自動ネーミングで番号が増えているように見えるのでJRNRCV0001を削除すればいいように見えますが、実はこれ以前にもう一つ古いジャーナルレシーバーが存在しました。(最初のジャーナルを作成した際、ユーザーがCRTJRNRCVコマンドでJRNRCV01という名前で作成しており、そのジャーナルレシーバーが一杯になった後にシステムによってJRNRCV0001 が作成されたため。JRNRCV0001は2番目に古いジャーナルレシーバーでした。)

image.png

ジャーナルレシーバーの確認方法:

ジャーナルに接続されたジャーナルレシーバーを検索する

例)ジャーナル GOMALIB/JRN0に関連したジャーナルレシーバーの一覧を取得する

 SELECT JOURNAL_RECEIVER_LIBRARY, JOURNAL_RECEIVER_NAME, STATUS
	FROM QSYS2.JOURNAL_RECEIVER_INFO
	WHERE 
                     JOURNAL_NAME = 'JRN01' 
         AND      JOURNAL_LIBRARY = 'GOMALIB';

結果例はこちら
image.png

*** 上図の STATUS 欄の意味はこちら
image.png
現在の日本語サイトは自動翻訳で本来無用な語句まで日本語化されてます(^^;、
正しいSTATUSパラメーターは下記です。
接続 = ATTACHED
保留 = SAVED
解放 = FREED
部分 = PARTIAL
空 = EMPTY

ジャーナルレシーバーの順番を確認する方法は?

通常はこのサンプルのようにシステムが連番でジャーナルレシーバーを切り替えてくれるのであまり意識しないと思います。がマニュアル操作でジャーナルレシーバー名を指定・切替しているケースもあると思います。その場合、ジャーナルレシーバーの順番を確認する必要が出てきます。

方法① 自分自身の前後のジャーナルレシーバー名を検索する

QSYS2.JOURNAL_RECEIVER_INFOビューの下記のカラムにジャーナルレシーバーの前後の情報が記録されているのでこれを調べます。
PREVIOUS_JOURNAL_RECEIVER : 自分自身の1つ前のジャーナルレシーバー名
NEXT_JOURNAL_RECEIVER : 自分自身の1つ後のジャーナルレシーバー名

 SELECT JOURNAL_RECEIVER_LIBRARY, JOURNAL_RECEIVER_NAME, STATUS, PREVIOUS_JOURNAL_RECEIVER
	FROM QSYS2.JOURNAL_RECEIVER_INFO
	WHERE JOURNAL_NAME = 'JRN01' 
         AND      JOURNAL_LIBRARY = 'GOMALIB'
         ORDER BY PREVIOUS_JOURNAL_RECEIVER ;

image.png

上記は、PREVIOUS_JOURNAL_RECEIVER(自分の前のジャーナルレシーバー名)でソートした例ですが、ジャーナルレシーバー名では命名ルールによっては必ずしも古い順番に並ばないことが発生しますね。

方法② ジャーナルレシーバーの接続時刻を確認する

上記と同様にジャーナルレシーバーの接続されていた時刻を調べソートすることでも確認できると思います。
例)

 SELECT JOURNAL_RECEIVER_LIBRARY, JOURNAL_RECEIVER_NAME, STATUS, ATTACH_TIMESTAMP
	FROM QSYS2.JOURNAL_RECEIVER_INFO
	WHERE JOURNAL_NAME = 'JRN01' 
         AND      JOURNAL_LIBRARY = 'GOMALIB'
         ORDER BY ATTACH_TIMESTAMP ;

ATTACH_TIMESTAMP : ジャーナルレシーバーを接続した時刻
DETACH_TIMESTAMP : " 切断した時刻
image.png

やはりタイムスタンプの方が順番にソートする目的では適しているようです。期待した結果が得られました。

おまけ:カラム名をコピーする方法

ここまで長いカラム名を書くのが面倒、ということでACSの画面からコピーする方法です。

  1. カラム名を右クリックして、詳細を選択
    image.png
  2. 詳細ウィンドウで コピー → カラム名 を選択
  3. image.png

(参考)

一番最初のジャーナルレシーバーを検索する方法 : PREVIOUS_JOURNAL_RECEIVER IS NULL で検索

PREVIOUS_JOURNAL_RECEIVERカラムには自分自身の一つ前のジャーナルレシーバーの名前が入りますので一番最初のジャーナルレシーバーはNULLが入ります。
例)GOMALIBのジャーナル JRN01の最初のジャーナルレシーバーを検索。

 SELECT *
	FROM QSYS2.JOURNAL_RECEIVER_INFO
	WHERE STATUS = 'ONLINE'
         AND      JOURNAL_NAME = 'JRN01' 
         AND      JOURNAL_LIBRARY = 'GOMALIB' 
         AND      PREVIOUS_JOURNAL_RECEIVER IS NULL ;

結果例はこちら
image.png

現在アクティブな=最新の ジャーナルレシーバーを検索する方法 : QSYS2.JOURNAL_INFO ビュー

例) GOMALIBのジャーナル JRN01に接続されている最新のジャーナルレシーバーを検索する

SELECT * FROM QSYS2.JOURNAL_INFO 
         WHERE JOURNAL_NAME = 'JRN01' 
         AND  JOURNAL_LIBRARY = 'GOMALIB';

下記の結果例ではJRNRCV0022 が該当します。
image.png

5250画面でジャーナルレシーバーを検索・削除する : WRKJRNコマンド

1.WRKJRNコマンドを実行

WRKJRN GOMALIB/JRN01

image.png

  1. 1.の画面で 8:ジャーナル属性の処理 を実行
    image.png

  2. 2.の画面で PF15:レシーバー・ディレクトリーの処理を実行(PF15キーの説明はPF24キーを押すと表示されます)
    image.png

  3. 下図のようにJRN01に接続されたジャーナルレシーバーが表示されます。image.png

上記画面では古い順番に表示されますので、今回のケースでは一番上のジャーナルレシーバーから順にDLTJRNRCVコマンドを実行すればOKです。

1
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?