分散データベース環境で確実にトランザクションのACID属性を確保するための手法。詳しくは専門書を読んどくれ。
Oracleでは、トランザクションを行うアプリケーションの接続先がグローバル・コーディネータとなるが、トランザクションの中心となるサイトは「コミット・ポイント・サイト」として別に選出される。このサイトは、
という性質を持つ。どのサイトがコミット・ポイント・サイトになるかは、初期化パラメータCOMMIT_POINT_STRENGTH(0〜255の整数)の比較によって行われ、この値が最大のものが選出される。通常、データベースサーバとして安定なもの、また最大のデータを処理するものを選出すべきなので、各サーバに与える値はそれらを考慮して決定する。
Oracleにおけるデッドロックの検出は、同一サイト内のトランザクションの場合は待ちグラフの解析によって行われるが、複数サイトにまたがるトランザクションの場合はタイムアウトによって検出される。タイムアウトの時間は初期化パラメータDISTRIBUTED_LOCK_TIMEOUTによって決定され、デフォルト値は60(秒)となっている。
1ノード当りの分散トランザクション数の最大値は、初期化パラメータDISTRIBUTED_TRANSACTIONSで指定される。この値を超えて分散アクセスを要求するDML文を発行すると、その文はエラーを起こしてロールバックする。
分散トランザクションに参加する各ノードでは、別々のSCNが存在している。しかし、1つのトランザクションが複数サイトにまたがって発生した場合、そのトランザクションのSCNは各サイトで同一になる。そのSCNは、関連サイト間で最大のSCNが使用される。
コミット・ポイント・サイトでないサイトが準備命令を受け取ったままトランザクションが異常終了すると、そのサイト上のトランザクションは中途半端な状態(インダウト状態)に置かれることになる。通常、この状態は、グローバル・コーディネータのRECOプロセスによって自動的に復旧されるが、それを待つことのできない場合には、手動で回復処理を行うことになる。その手順は以下の通り。
ここで、トランザクションを強制終了させるためには、自分が発行したトランザクションについてはFORCE TRANSACTION・他のユーザのトランザクションについてはFORCE ANY TRANSACTIONシステム権限が、それぞれ必要となる。
また、2層コミット失敗後に回復を待つための時間を設定するために、初期化パラメータDISTRIBUTED_RECOVERY_CONNECTION_HOLD_TIMEが存在する(デフォルトは200秒)。