6.9.4 コミットとロールバック
トランザクションによるデータベースの更新内容が有効になることをコミットといいます。トランザクションによる更新内容が無効になることをロールバックといいます。コミットとロールバックのタイミングには,大きく分けて次に示す2種類があります。
-
SQLでタイミングを定義する場合
-
HiRDBによって自動的に設定される場合
コミット及びロールバックの設定タイミングをそれぞれの種類ごとに説明します。
(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(省略値)を指定してください。
なお,一相コミットが適用されるケースは,一つのトランザクション内の更新ブランチ数が一つのときだけです。それ以外の場合は二相コミットが適用されます。
一相コミットの処理方式を次の図に示します。
(b) 二相コミット
コミットメント制御をプリペア処理とコミット処理の二相に分けてトランザクションの同期点処理を行います。フロントエンドサーバとバックエンドサーバ(ディクショナリサーバ)間の同期点処理の通信回数がブランチ数×4になります。二相コミットの処理方式を次の図に示します。
コミット発行元,及びトランザクションの実行環境によって,HiRDB/パラレルサーバのコミットメント制御が決定されます。HiRDB/パラレルサーバのコミットメント制御を次の表に示します。
条件 |
HiRDBのコミットメント制御 |
||
---|---|---|---|
コミット 発行元 |
コミット発行元が 指示したコミット メント制御 |
トランザクションの実行環境 |
|
UAP |
− |
参照トランザクションの場合 |
一相コミット |
トランザクションによる更新サーバ数が一つで,かつpd_trn_commit_optimizeオペランドにONEPHASEを指定(又は省略)している場合 |
|||
上記以外 |
二相コミット |
||
OLTPシステム |
一相コミット |
参照トランザクションの場合 |
一相コミット |
トランザクションによる更新サーバ数が一つで,かつpd_trn_commit_optimizeオペランドにONEPHASEを指定(又は省略)している場合 |
|||
上記以外 |
二相コミット |
||
二相コミット |
参照トランザクションの場合 |
一相コミット |
|
上記以外 |
二相コミット |
(凡例)−:該当しません。