トランザクション

トランザクションは、論理作業単位を定義するオブジェクトです。 トランザクションは、トランザクションを参照するハンドルがある限り有効であり、トランザクションがまだコミットまたはロールバックされていない場合はアクティブと見なされます。 コミットまたはロールバックが発生する前にトランザクションが作成され、そのトランザクションに対するすべてのハンドルが閉じられた場合、トランザクションはロールバックされます。

操作のスコープを指定するトランザクションを作成し、1 つ以上のリソース マネージャーに対して更新を実行するユーザー モード トランザクション クライアントの場合を考えてみましょう。 次の処理が行われます。

  1. クライアントは、CreateTransaction 関数を呼び出してトランザクションを作成し、そのトランザクションへのハンドルを戻り値として受け取ります。

    トランザクションは、任意の数のプロセスで開いたり継承したりできます。したがって、各プロセスはトランザクションに関与します。 これらのプロセスのいずれかが失敗すると、トランザクションが中止されます。

    このトランザクションはまだ永続的ではない可能性があります。 トランザクションで推定中止ログを使用する場合は、準備済み状態に達したトランザクションのみをシステム障害全体で復旧する必要があります。

  2. クライアントは、リソース マネージャーにトランザクションを明示的に渡す必要があります。

  3. クライアントは、トランザクション ファイル システムなどの 1 つ以上の VM を使用して、すべてのトランザクション操作を実行します。

  4. クライアントは、CommitTransaction 関数を呼び出します。

  5. リソース マネージャーは、KTM からデータを準備してコミットするための通知を受け取ります。

トランザクションとスレッド

トランザクションはスレッドと同じではありません。 複数のスレッドまたはプロセスを 1 つのトランザクションの一部にすることができます。 逆に、スレッドは、異なる時間に複数の異なるトランザクションの一部になる可能性があります。

トランザクション関数

トランザクションでは、次の関数が使用されます。

機能 形容
CommitTransaction 指定したトランザクションをコミットすることを要求します。
CommitTransactionAsync 指定したトランザクションをコミットすることを要求します。
CreateTransaction 新しいトランザクション オブジェクトを作成します。
GetTransactionInformation 指定したトランザクションに関する要求された情報を返します。
OpenTransaction 既存のトランザクションを開きます。
RollbackTransaction 指定したトランザクションをロールバックすることを要求します。
RollbackTransactionAsync 指定したトランザクションをロールバックすることを要求します。 この関数は非同期的に返します。
SetTransactionInformation 指定したトランザクションのトランザクション情報を設定します。