Microsoft SQL Server Analysis Services のインスタンスに送信されるすべての XML for Analysis (XMLA) コマンドは、現在の暗黙的または明示的なセッションでトランザクションのコンテキスト内で実行されます。 これらの各トランザクションを管理するには、 BeginTransaction、 CommitTransaction、 RollbackTransaction の各コマンドを使用します。 これらのコマンドを使用すると、暗黙的または明示的なトランザクションの作成、トランザクション参照カウントの変更、トランザクションの開始、コミット、またはロールバックを行うことができます。
暗黙的なトランザクションと明示的なトランザクション
トランザクションは暗黙的または明示的です。
暗黙的なトランザクション
BeginTransaction
コマンドでトランザクションの開始が指定されていない場合、Analysis Services は XMLA コマンドの暗黙的なトランザクションを作成します。 Analysis Services は、コマンドが成功した場合は常に暗黙的なトランザクションをコミットし、コマンドが失敗した場合は暗黙的なトランザクションをロールバックします。
明示的なトランザクション
BeginTransaction
コマンドがトランザクションを開始すると、Analysis Services によって明示的なトランザクションが作成されます。 ただし、Analysis Services は、 CommitTransaction
コマンドが送信された場合にのみ明示的なトランザクションをコミットし、 RollbackTransaction
コマンドが送信された場合は明示的なトランザクションをロールバックします。
さらに、アクティブなトランザクションが完了する前に現在のセッションが終了した場合、Analysis Services は暗黙的なトランザクションと明示的なトランザクションの両方をロールバックします。
トランザクションと参照カウント
Analysis Services では、セッションごとにトランザクション参照数が保持されます。 ただし、Analysis Services では、セッションごとに 1 つのアクティブなトランザクションのみが保持されるという点で、入れ子になったトランザクションはサポートされません。 現在のセッションにアクティブなトランザクションがない場合、トランザクション参照カウントは 0 に設定されます。
つまり、各 BeginTransaction
コマンドは参照カウントを 1 ずつインクリメントし、各 CommitTransaction
コマンドは参照カウントを 1 ずつ減らします。
CommitTransaction
コマンドでトランザクション数を 0 に設定すると、Analysis Services によってトランザクションがコミットされます。
ただし、 RollbackTransaction
コマンドは、トランザクション参照カウントの現在の値に関係なく、アクティブなトランザクションをロールバックします。 つまり、1 つの RollbackTransaction
コマンドは、送信された BeginTransaction
コマンドまたは CommitTransaction
コマンドの数に関係なく、アクティブなトランザクションをロールバックし、トランザクション参照カウントを 0 に設定します。
トランザクションの開始
BeginTransaction
コマンドは、現在のセッションで明示的なトランザクションを開始し、現在のセッションのトランザクション参照カウントを 1 ずつインクリメントします。 後続のすべてのコマンドは、アクティブなトランザクションをコミットするために十分な CommitTransaction
コマンドが送信されるか、アクティブなトランザクションをロールバックするために 1 つの RollbackTransaction
コマンドが送信されるまで、アクティブなトランザクション内にあると見なされます。
トランザクションのコミット
CommitTransaction
コマンドは、BeginTransaction
コマンドが現在のセッションで実行された後に実行されるコマンドの結果をコミットします。 各 CommitTransaction
コマンドは、セッション上のアクティブなトランザクションの参照カウントをデクリメントします。
CommitTransaction
コマンドで参照カウントが 0 に設定されている場合、Analysis Services はアクティブなトランザクションをコミットします。 アクティブなトランザクションがない場合 (つまり、現在のセッションのトランザクション参照カウントは既に 0 に設定されています)、 CommitTransaction
コマンドを実行するとエラーが発生します。
トランザクションのロールバック
RollbackTransaction
コマンドは、現在のセッションで BeginTransaction
コマンドが実行された後に実行されるコマンドの結果をロールバックします。
RollbackTransaction
コマンドは、現在のトランザクション参照カウントに関係なく、アクティブなトランザクションをロールバックし、トランザクション参照カウントを 0 に設定します。 アクティブなトランザクションがない場合 (つまり、現在のセッションのトランザクション参照カウントは既に 0 に設定されています)、 RollbackTransaction
コマンドを実行するとエラーが発生します。