次の方法で共有


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

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

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

トランザクションは暗黙的または明示的です。

暗黙的なトランザクション
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 コマンドを実行するとエラーが発生します。

こちらもご覧ください

Analysis Services での XMLA を使用した開発