次の方法で共有


トランザクションの管理 (XMLA)

Microsoft SQL Server Analysis Services のインスタンスに送信される XML for Analysis (XMLA) コマンドはすべて、現在の明示的または暗黙的なセッションにおけるトランザクションのコンテキストで実行されます。これらの各トランザクションを管理するには、BeginTransactionCommitTransaction、および RollbackTransaction コマンドを使用します。これらのコマンドを使用して、暗黙の、または明示的なトランザクションの作成や、トランザクション参照カウントの変更、およびトランザクションの開始、コミット、ロールバックを行えます。

暗黙のトランザクションと明示的なトランザクション

トランザクションには、暗黙のものと明示的なものがあります。

  • 暗黙のトランザクション
    BeginTransaction コマンドによってトランザクションの開始が指定されない場合、Analysis Services は暗黙のトランザクションを作成します。Analysis Services は常に、コマンドが成功した場合に暗黙のトランザクションをコミットし、コマンドが失敗した場合に暗黙のトランザクションをロールバックします。

  • 明示的なトランザクション
    BeginTransaction コマンドによってトランザクションの開始が指定された場合、Analysis Services は明示的なトランザクションを作成します。しかし、Analysis Services は、CommitTransaction コマンドが送信された場合にのみ明示的なトランザクションをコミットし、RollbackTransaction コマンドが送信された場合にのみ明示的なトランザクションをロールバックします。

また、Analysis Services は、アクティブなトランザクションが完了する前に現在のセッションが終了した場合、暗黙のトランザクションと明示的なトランザクションの両方をロールバックします。

トランザクションと参照カウント

Analysis Services は、各セッションに対してトランザクション参照カウントを維持します。しかし、アクティブなトランザクションは各セッションに対して 1 つだけしか維持されないため、Analysis Services は入れ子になったトランザクションをサポートしていません。現在のセッションにアクティブなトランザクションがない場合、トランザクション参照カウントは 0 に設定されます。

つまり、BeginTransaction コマンドごとに参照カウントが 1 つずつ増え、CommitTransaction ごとに参照カウントが 1 つずつ減ります。CommitTransaction コマンドによって参照カウントが 0 に設定されると、Analysis Services はトランザクションをコミットします。

ただし、RollbackTransaction コマンドは、トランザクション参照カウントの現在の値にかかわりなく、アクティブなトランザクションをロールバックします。つまり、BeginTransaction コマンドまたは CommitTransaction コマンドが送信された数にかかわりなく、RollbackTransaction コマンドが 1 つあればアクティブなトランザクションがロールバックされ、トランザクション参照カウントは 0 に設定されます。

トランザクションの開始

BeginTransaction コマンドは、現在のセッションで明示的なトランザクションを開始し、現在のセッションのトランザクション参照カウントを 1 つ増やします。後続のコマンドはすべて、アクティブなトランザクションをコミットするのに十分な CommitTransaction コマンドが送信されるか、1 つの RollbackTransaction コマンドが送信されてアクティブなトランザクションがロールバックされるまで、アクティブなトランザクションに含まれるものと見なされます。

トランザクションのコミット

CommitTransaction コマンドは、現在のセッションで BeginTransaction コマンドが実行された後に実行されたコマンドの結果をコミットします。CommitTransaction コマンドごとに、セッションのアクティブなトランザクションの参照カウントが 1 つ減ります。CommitTransaction コマンドによって参照カウントが 0 に設定されると、Analysis Services はアクティブなトランザクションをコミットします。アクティブなトランザクションがない場合 (つまり、現在のセッションのトランザクション参照カウントが既に 0 になっている場合)、CommitTransaction コマンドを実行するとエラーが発生します。

トランザクションのロールバック

RollbackTransaction コマンドは、現在のセッションで BeginTransaction コマンドが実行された後に実行されたコマンドの結果をロールバックします。RollbackTransaction コマンドは、現在のトランザクション参照カウントにかかわりなく、アクティブなトランザクションをロールバックし、トランザクション参照カウントを 0 に設定します。アクティブなトランザクションがない場合 (つまり、現在のセッションのトランザクション参照カウントが既に 0 になっている場合)、RollbackTransaction コマンドを実行するとエラーが発生します。