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

DB2 for i のテーブル他テストライブラリー一式を他システムへコピーしようとしました。不要なジャーナルレシーバー（DBログ）が多数あるため、DLTJRNRCVコマンドで削除しようとしたところCPF7023が出てジャーナルレシーバーを削除できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/2e630400-0400-4273-b49b-3ca76b89760e.png)

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

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


## 環境の確認

上記のサンプルでは下記のようにジャーナルレシーバーが数十個あります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/a045b976-3d55-4396-824f-475e9934f5b2.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/8bd54ee6-2215-45b0-9763-b7d76eb9ed60.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/a73ca190-f151-4b57-8c35-e7f19bea24ad.png)

*** 上図の STATUS 欄の意味は[こちら](https://www.ibm.com/docs/ja/i/7.5.0?topic=services-journal-receiver-info-view)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/d25bafc4-de12-41b1-8ad4-e465460f1c8d.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/a78a1ccd-190c-4cd3-92df-221ccaf74553.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/41f1758a-89d8-48b9-b04b-d79ee61a697a.png)

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

## おまけ：カラム名をコピーする方法
ここまで長いカラム名を書くのが面倒、ということでACSの画面からコピーする方法です。
1. カラム名を右クリックして、詳細を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/63bff264-18fa-4612-aed6-7d74009b9008.png)
2. 詳細ウィンドウで コピー → カラム名　を選択
2. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/e31a5653-1d0f-42bb-93f4-4da4bd7c3bff.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/4c91e791-c04f-4279-b6ae-c45d06641e23.png)


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

例) GOMALIBのジャーナル JRN01に接続されている最新のジャーナルレシーバーを検索する
```
SELECT * FROM QSYS2.JOURNAL_INFO 
         WHERE JOURNAL_NAME = 'JRN01' 
         AND  JOURNAL_LIBRARY = 'GOMALIB';
```
下記の結果例ではJRNRCV0022 が該当します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/5f7a47e1-bfdd-4564-ad12-81a190efc365.png)

### 5250画面でジャーナルレシーバーを検索・削除する　: WRKJRNコマンド
1.WRKJRNコマンドを実行
```
WRKJRN GOMALIB/JRN01
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/773cb24b-cced-432c-b5c3-a21e1e842890.png)

2. 1.の画面で 8:ジャーナル属性の処理 を実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/dfbaea56-ecf5-484f-ad1f-2c355911696b.png)

3. 2.の画面で PF15:ﾚｼｰﾊﾞｰ･ﾃﾞｨﾚｸﾄﾘｰの処理を実行（PF15キーの説明はPF24キーを押すと表示されます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/039886e6-a6e0-4c90-adbf-b7aa6e9e6ab0.png)

4. 下図のようにJRN01に接続されたジャーナルレシーバーが表示されます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/b34f3d02-cbb1-47c9-a18c-1a7a6fcfc447.png)

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