OceanBaseデータベースは、ネイティブな2フェーズコミットプロトコルを実装しており、分散トランザクションの原子性を保証します。
2フェーズコミットプロトコルには、コーディネーター(Coordinator)と参加者(Participant)という2つの役割が含まれます。コーディネーターはプロトコル全体の進行を担当し、複数の参加者が最終的に一貫した決定に至るようにします。参加者はコーディネーターのリクエストに応答し、コーディネーターの指示に従って準備操作(prepare)およびコミット/アボート操作(commit/abort)を実行します。
分散トランザクションのコミットプロセス
従来型とOceanBaseデータベースの2フェーズコミットのプロセスは、以下の図に示されています。

PREPAREフェーズ
コーディネーター:コーディネーターはすべての参加者に対して準備リクエスト(prepare request)を送信します。
参加者:参加者は準備リクエストを受信した後、コミットが可能かどうかを判断します。可能であれば準備ログ(prepare log)を永続化し、コーディネーターに対して準備成功を返します。そうでない場合は、準備失敗を返します。
COMMITフェーズ
コーディネーター:コーディネーターはすべての参加者からの準備確認(prepare ack)を受信した後、COMMIT状態に移行し、ユーザーに対してトランザクションのコミット成功を返します。その後、すべての参加者に対してトランザクションのコミットリクエスト(commit request)を送信します。
参加者:参加者はコミットリクエストを受信した後、リソースを解放して行ロックを解除し、次にコミットログ(commit log)をコミットします。ログの永続化が完了すると、コーディネーターに対してcommit okメッセージを返信し、最後にトランザクションコンテキストを解放して終了します。