2003年10月16日 トランザクション・バックアウト >> 目次 (作成日順)


 
トランザクション・バックアウト は、更新 トランザクション の取り消し (reversed、帳消し) である。

 トランザクション・バックアウト は、正常に終了しなかった (not successfully completed) 更新 トランザクション を 「undo」 する機能である。システム あるいは プログラム が アベンド (abend) した際、完了しなかった更新トランザクション は取り消され(backout、つまり reversed)、途中までしか更新されていない テーブル は更新以前の状態に回復される。

 トランザクション・バックアウト は、「restart」 と同じことである。つまり、正常に完了しなかった状態を、「最新の (last)」 正常な状態に遡及して修復する。「最新の正常な状態」 に修復するためには、トランザクション・バックアウト の対象となるタスクは、ログ・エリア に記録されていなければならない。

 
トランザクション・バックアウト の ログ・レコード は、「更新前の データ」 と 「更新 トランザクション」 から構成される。

 ログ・レコード は、更新 トランザクション の記録 (a history of the transaction) である。
 ログ・レコード の中味は、以下の 4つから構成されている。

  (1) 更新前の データ (pre-update image)
  (2) 更新 トランザクション (transaction image)
  (3) 実行時刻 (a time and date stamp)
  (4) ジョブ 名 (job name and number)

 ログ・レコード は、トランザクション・バックアウト 用として、チェックポイント が付与されるまで、ログ・エリア のなかに収録されている。
   ログ・レコード は、ロールバック 系では、通常、「更新前の データ (pre-update image)」 と 「更新後の データ (after-update image)」 から構成されるが、トランザクション・バックアウト 系では、「更新前の データ」 と 「更新 トランザクション (transaction image)」 から構成される。そして、トランザクション が バックアウト される際には、ログ・レコード のなかに収録されている 「更新 トランザクション」 が トランザクション を取り消し、「更新前の データ」 が テーブル を更新前の状態に回復する。

 
更新 トランザクション は、最初、ログ・エリア に書き込まれ、次に、データ・エリア に書き込まれる。

 ちなみに、更新 トランザクション の書き込みは、以下の順になる (follows rigid sequence of physical writes)。

  (1) ログ・エリア
  (2) データ・エリア (テーブル)
  (3) インデックス・エリア (インデックス・ファイル)

 更新が、最初、ログ・エリア に対して書き込まれる理由は、トランザクション・バックアウト に対する準備である。
 なお、トランザクション・バックアウト が起動されたら、データ を修復している間は、テーブル に対して排他制御が作用する。データ の更新時の排他制御を 「1次排他制御 (the primary exclusive control)」 といい、データ の修復時 (トランザクション・バックアウト時) の排他制御を 「2次排他制御 (the secondary exclusive control)」 という。

 
トランザクション・バックアウト は、バックワード・リカバリー にも使われる。

 ログ・エリア から リカバリー・ファイル に スピル された ログ・データ は、リカバリー の際に使われる。
 リカバリー には、以下の 2つがある。

  (1) フォワード・リカバリー (forward recovery)
  (2) バックワード・リカバリー (backward recovery)

 バックワード・リカバリー は、トランザクション・バックアウト と同じ仕組みである。
 次回は、リカバリー について述べる。 □





  << もどる HOME すすむ >>
  ベーシックス