当記事は、「IBM i RiSING」2025年Aチームの成果物となる記事の一つです。
まとめはこちら
ジャーナルについての解説
本記事ではIBM i のデータベース変更操作に
深く関わってくるジャーナルについて説明しています。
本題に入る前にデータベースを語る上での必要知識として、
トランザクション処理について簡単におさらいしてみましょう。
トランザクション処理とは
一言でいうと
「一連の流れをワンセットとして扱う処理」のことです。
今回は「商品販売処理」を例に説明します。
「商品を販売する」となると……①商品を渡す、②お金を受け取る、
この2つのプロセスが発生することになります。
この2つをそれぞれ単体で考えるのではなく、2つのプロセスでワンセットとして扱う、
これが「一連の流れをワンセットとして扱う処理」、トランザクション処理なのです。
トランザクション処理では、
もし②の工程でエラーが発生すると①の工程が始まる前に処理を戻します。
① の工程でエラーが発生した場合も、①の工程が始まる前、
つまりワンセットの処理の開始前に巻き戻すことで、整合性を保っています。
この巻き戻し処理のことを「ロールバック」と言います。
そして無事にワンセットの全ての工程が終われば、
そこで初めて処理を確定させます。この確定処理は「コミットメント」と言います。
ジャーナルを用いたコミットメント
CRUDと呼ばれるデータベースを操作するアプリでは、
コミットメント制御を行うケースが多く、
それらはIBM iの場合ジャーナルとジャーナルレシーバーを用いて行われます。
ではジャーナルとジャーナルレシーバーとは何なのでしょうか。
ジャーナルとはデータベース、厳密に言えば物理ファイルのレコード追加や更新、
削除といった変化を記録する機能そのもののことです。
そしてジャーナルレシーバーとは、
ジャーナルで記録されたデータベース変更内容を実際に保管しておく場所のことです。
なのでジャーナルレシーバーはジャーナル本体にセットして使うものであり、
ジャーナルで記録された情報が流れ込んで溜まる場所、
というイメージをすると分かりやすいでしょう。
具体的な処理手順の流れ
それでは具体的にジャーナル機能はどうやって動かしているのでしょうか。
今回は一例として私が普段の業務で触っている
RPGⅢ環境での実行コマンドと合わせて紹介します。
まず
① ジャーナルとレシーバーを作成する
CRTJRNRCV JRNRCV(ライブラリー/レシーバー名)
(ジャーナルレシーバー作成)
CRTJRN JRN(ライブラリー/ジャーナル) JRNRCV(ライブラリー/レシーバー名)
(ジャーナル作成)
② 作成したジャーナルを開始する設定
STRJRNPF FILE(ライブラリー/物理ファイル) JRN(ライブラリー/ジャーナル)
③ コミットメント制御の開始
STRCMTCTL *CHG
④ ここでようやく書き換えプログラムを実行
CALL PGM(RISINGLIB/CRUDMAIN)
基本的な実行の流れはこの通りなのですが、
RPGⅢとⅣ、IBM iのバージョン、SQL命令を使っているかどうかなど、
環境の違いで不要な工程があったり、GUI操作が可能なNavigator for i を操作して行う場合もあり、
このコマンドを必ず入力するとは限らないようです。
例えば今回紹介したコマンドは私の利用している環境での手順なのですが、
事前にベースとして動いているプログラム等で
ジャーナル関連処理が行わていない場合を想定したものになります。
ですが実際に業務で動かすプログラム実行時は、
コミットメント制御の開始までは常駐プログラムで制御されており、
普段から操作することは少ないです。
操作環境の違い
それぞれ言語を動かす際のツールが異なることで、操作感や表示される情報量は異なります。
RPGⅢを扱う際の5250画面ではジャーナル関連処理は全てコマンドで行います。
対してFF RPGの場合はACS内のSQL入力画面からのコマンド入力だけでなく、
マウスクリックのGUIでも操作を行うことができます。
開発者の意識の違い
今回の研究メンバーはRPGⅢ技術者とRPGⅣ(FFRPG)技術者の混合チームです。
せっかくなのでそれぞれにジャーナルについてのイメージ、認識を聞いてみました。
RPGⅢの開発者は、
「ジャーナルは自分たちで設定したけど、
昔の話だし汎用プログラムに
組み込まれて動いているから、
現在はあまり意識していないなぁ、、、」
と、遥か昔に作成したジャーナルが汎用プログラムに組み込まれているので、
あまり意識していない様子でした。
また、RPGⅣの開発者は、
「SQL中心の開発が多く、
ジャーナルはシステム側で
管理されているイメージ。
あまり気にしたことはないなぁ、、、」
と、こちらもあまりなじみがない様子でした。
当記事の著作権はIBMに帰属します。詳細はこちらを参照ください。

