DFU, Query, SQL

53. ジャーナルとジャーナル・レシーバー

SQLを使ってデータ・ベースを更新するのであれば
ジャーナル(*JRN)とジャーナル・レシーバー(*JRNRCV)は必須であるかもしれない。
汎用機と呼ばれる大型のIBMホスト・マシンを使っている開発では
ジャーナル(*JRN)とジャーナル・レシーバー(*JRNRCV)はごく普通に使われていいる。
ジャーナル(*JRN)とはデータ・ベースの更新履歴を記録するファイルである
ジャーナル・レシーバー(*JRNRCV)に更新データが記録される。

ジャーナルに更新経緯を記録する目的は更新の経緯を単純に調べるだけではなく
更新の不備があったときには被更新ファイルの値を元に戻す(=ロール・バック)するためである。

更新が確定されるのはコミット(COMMIT)と呼ばれる命令が行われたときである。

コミット(COMMIT)

SQLによる更新作業(UPDATE/INSERT/DELETE)

コミットで更新を確定するか、またはロール・バック(ROLLBK)で
  元の状態に戻す

SQLによる更新はひとつひとつのファイルに対して個別の命令で実行されるのだが
SQLによる更新には時間のかかることが多いので最後のSQL更新でエラーになれば
それまでの更新も元の状態に戻すためにロール・バック(ROLLBK)が必要となる。

例えば売上の入力による更新を考えてみよう。

(1)在庫レコードから引当ていた数を減らす

(2)在庫レコードから出荷数を引き落とす

(3)得意先別の当月出荷数に加算する

(4)得意先別の当月売上数に加算する

(5)得意先別の当月請求額に加算する

ところが(5)の更新をSQLで行ったところ与信限度額を超えてしまった。
この出荷は取り消さないといけないので(1)~(4)の更新も
元通りに戻す。これがロール・バックである。

通常、更新するデータ・ベースに対してジャーナルを設定しておけば
いつどこでどのようにどのプログラムによってどのように更新されたかなどの
履歴を取ることができる。