OpenTP1のジャーナルの構成について説明します。
OpenTP1のジャーナルには,OLTPレコードとジャーナルレコードがあります。
ジャーナルバッファ上のデータをジャーナルファイルに出力する単位がジャーナルブロックです。一つのジャーナルバッファは,システムジャーナルサービス定義のjnl_max_datasizeオペランドに指定した大きさで確保されます。一つのジャーナルブロックは1~n個のジャーナルレコードで構成されています。ジャーナルレコードを取得した場合に,ジャーナルバッファにジャーナルレコードが書き込めなくなったり,同期点ジャーナルレコードの取得要求が発生したりするときは,その時点までのジャーナルレコードを1件のジャーナルブロックとしてジャーナルファイルに取得します。ジャーナルブロックをジャーナルファイルに書き込むと,jnllsコマンドで表示されるブロック番号が1カウント増えます。
OpenTP1のジャーナルは,1件のジャーナルブロックを出力するのにOLTPレコードを1~n個使用します。例えば,システムジャーナルサービス定義のjnl_max_datasizeオペランドに32000を指定していた場合,1~8個のOLTPレコードを使用します。最大8個になるときの計算式は,↑(32000/4096)↑です(↑↑:小数点以下切り上げ)。ジャーナルバッファにジャーナルレコードを取得できなくなった場合はOLTPレコードを8レコード分使用します。ただし,同期点ジャーナルレコードの取得の場合,その時点までのジャーナルレコードをジャーナルブロックとして取得するため,4096バイト未満のジャーナルブロックができる場合があります。この場合は,OLTPレコードは1レコード分だけ使用します。
レコードとジャーナルブロックの関係を次の図に示します。
図4-3 レコードとジャーナルブロックの関係
図4-3では,一つのジャーナルブロックは,6個のジャーナルレコードで構成され,二つのOLTPレコードを使用してジャーナルファイル内に格納されています。
OpenTP1のジャーナルファイル内の使用済み容量は,jnllsコマンドに-dオプションを付けて実行して表示されたレコード数に,OLTPレコードの4096バイトを掛けると求められます。例えば,次の図に示すようなjnllsコマンドの実行結果を得た場合,jnlgrp02の使用済みのジャーナルファイル容量は,(13)16×4096バイト=77824バイトとなります。
図4-4 jnlls -j sys -dの実行結果