Hitachi

ノンストップデータベース HiRDB Version 10 解説


6.9.4 コミットとロールバック

トランザクションによるデータベースの更新内容が有効になることをコミットといいます。トランザクションによる更新内容が無効になることをロールバックといいます。コミットとロールバックのタイミングには,大きく分けて次に示す2種類があります。

コミット及びロールバックの設定タイミングをそれぞれの種類ごとに説明します。

〈この項の構成〉

(1) コミットのタイミング

コミットのタイミングを次に示します。

SQLでタイミングを定義する場合

制御系SQLのCOMMIT文を指定して,COMMIT文が実行されるタイミングでコミットできます。

HiRDBで自動的にコミットされる場合

以下のSQL文実行時にHiRDBによって自動的にコミットされます。

  • 定義系SQL

  • PURGE TABLE文

  • DISCONNECT文

(2) ロールバックのタイミング

ロールバックのタイミングを次に示します。

SQLでタイミングを定義する場合

制御系SQLのROLLBACK文を指定して,ROLLBACK文が実行されるタイミングで直前のコミット時点までロールバックできます。

HiRDBで自動的にロールバックされる場合
  • SQL実行時に処理が続行できなくなった場合,HiRDBによって,直前のコミット時点まで暗黙的にロールバックされます。

  • 以下のSQL文を実行しないでUAPが終了した場合, HiRDBによって,直前のコミット時点までロールバックされます。

    COMMIT文

    ROLLBACK文

    DISCONNECT文

(3) HiRDB/パラレルサーバのコミットメント制御

HiRDB/パラレルサーバのコミットメント制御は次に示す二つの方式があります。

(a) 一相コミット

コミットメント制御を二相(プリペア処理とコミット処理)にしないで,コミット処理だけを行います。したがって,フロントエンドサーバとバックエンドサーバ(ディクショナリサーバ)間の同期点処理の通信回数がブランチ数×2(二相コミットの場合はブランチ数×4)になるため,トランザクションの処理性能が向上します。コミットメント制御に一相コミットを使用する場合は,pd_trn_commit_optimizeオペランドにONEPHASE(省略値)を指定してください。

なお,一相コミットが適用されるケースは,一つのトランザクション内の更新ブランチ数が一つのときだけです。それ以外の場合は二相コミットが適用されます。

一相コミットの処理方式を次の図に示します。

図6‒23 一相コミットの処理方式

[図データ]

コミットメント制御で一相コミットを行うことを一相最適化といいます。

(b) 二相コミット

コミットメント制御をプリペア処理コミット処理の二相に分けてトランザクションの同期点処理を行います。フロントエンドサーバとバックエンドサーバ(ディクショナリサーバ)間の同期点処理の通信回数がブランチ数×4になります。二相コミットの処理方式を次の図に示します。

図6‒24 二相コミットの処理方式

[図データ]

コミット発行元,及びトランザクションの実行環境によって,HiRDB/パラレルサーバのコミットメント制御が決定されます。HiRDB/パラレルサーバのコミットメント制御を次の表に示します。

表6‒11 HiRDB/パラレルサーバのコミットメント制御

条件

HiRDBのコミットメント制御

コミット

発行元

コミット発行元が

指示したコミット

メント制御

トランザクションの実行環境

UAP

参照トランザクションの場合

一相コミット

トランザクションによる更新サーバ数が一つで,かつpd_trn_commit_optimizeオペランドにONEPHASEを指定(又は省略)している場合

上記以外

二相コミット

OLTPシステム

一相コミット

参照トランザクションの場合

一相コミット

トランザクションによる更新サーバ数が一つで,かつpd_trn_commit_optimizeオペランドにONEPHASEを指定(又は省略)している場合

上記以外

二相コミット

二相コミット

参照トランザクションの場合

一相コミット

上記以外

二相コミット

(凡例)−:該当しません。