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