Share via


Verwalten von Transaktionen (XMLA)

Jeder an eine Instanz von MicrosoftSQL ServerAnalysis Services gesendete XML for Analysis (XMLA)-Befehl wird im Kontext einer Transaktion auf der aktuellen impliziten oder expliziten Sitzung ausgeführt. Verwenden Sie die Befehle BeginTransaction, CommitTransaction und RollbackTransaction, um alle diese Transaktionen zu verwalten. Durch die Verwendung dieser Befehle können Sie implizite oder explizite Transaktionen erstellen, den Verweiszähler der Transaktion ändern, Transaktionen starten sowie einen Commit oder ein Rollback für diese Transaktionen ausführen.

Implizite und explizite Transaktionen

Eine Transaktion ist entweder implizit oder explizit:

  • Implizite Transaktion
    Analysis Services erstellt eine implizite Transaktion für einen XMLA-Befehl, wenn der BeginTransaction-Befehl den Start einer Transaktion nicht angibt. Analysis Services führt immer einen Commit für eine implizite Transaktion aus, wenn der Befehl erfolgreich ist, und führt ein Rollback für die implizite Transaktion aus, wenn der Befehl fehlschlägt.

  • Explizite Transaktion
    Analysis Services erstellt eine explizite Transaktion, wenn der BeginTransaction-Befehl eine Transaktion startet. Analysis Services führt jedoch einen Commit für eine explizite Transaktion nur aus, wenn ein CommitTransaction-Befehl gesendet wird und führt ein Rollback für eine explizite Transaktion aus, wenn ein RollbackTransaction-Befehl gesendet wird.

Analysis Services führt zudem ein Rollback sowohl für implizite als auch für explizite Transaktionen aus, wenn die aktuelle Sitzung beendet wird, bevor die aktive Transaktion fertiggestellt wird.

Transaktionen und Verweiszähler

Analysis Services verwaltet einen Transaktionsverweiszähler für jede Sitzung. Analysis Services unterstützt jedoch keine geschachtelten Transaktionen, da nur eine aktive Transaktion pro Sitzung verwaltet wird. Wenn die aktuelle Sitzung keine aktive Transaktion besitzt, wird der Transaktionsverweiszähler auf null festgelegt.

Dies bedeutet, dass jeder BeginTransaction-Befehl den Verweiszähler um eins erhöht, während jeder CommitTransaction-Befehl den Verweiszähler um eins verringert. Wenn ein CommitTransaction-Befehl den Transaktionszähler auf null festlegt, führt Analysis Services einen Commit für die Transaktion aus.

Der RollbackTransaction-Befehl führt jedoch unabhängig vom aktuellen Wert des Transaktionsverweiszählers ein Rollback für die aktive Transaktion aus. Das heißt, ein einzelner RollbackTransaction-Befehl führt ein Rollback für die aktive Transaktion aus, unabhängig davon, wie viele BeginTransaction- oder CommitTransaction-Befehle gesendet wurden, und legt den Transaktionsverweiszähler auf null fest.

Beginnen einer Transaktion

Der BeginTransaction-Befehl beginnt eine explizite Transaktion für die aktuelle Sitzung und erhöht den Transaktionsverweiszähler für die aktuelle Sitzung um eins. Alle nachfolgenden Befehle werden als innerhalb der aktiven Transaktion befindlich betrachtet, bis entweder genug CommitTransaction-Befehle gesendet wurden, um einen Commit für die aktive Transaktion auszuführen, oder ein einzelner RollbackTransaction-Befehl gesendet wird, um ein Rollback für die aktive Transaktion auszuführen.

Commitausführung für eine Transaktion

Der CommitTransaction -Befehl führt einen Commit für die Ergebnisse von Befehlen aus, die ausgeführt werden, nachdem der BeginTransaction-Befehl für die aktuelle Sitzung ausgeführt wurde. Jeder CommitTransaction-Befehl verringert den Verweiszähler für aktive Transaktionen für eine Sitzung. Wenn ein CommitTransaction-Befehl den Verweiszähler auf null festlegt, führt Analysis Services einen Commit für die aktive Transaktion aus. Wenn keine aktive Transaktion vorhanden ist (das heißt, wenn der Transaktionsverweiszähler für die aktuelle Sitzung bereits auf null festgelegt ist), führt ein CommitTransaction-Befehl zu einem Fehler.

Ausführen von Rollbacks für eine Transaktion

Der RollbackTransaction -Befehl führt ein Rollback für die Ergebnisse von Befehlen aus, die ausgeführt werden, nachdem der BeginTransaction-Befehl für die aktuelle Sitzung ausgeführt wurde. Der RollbackTransaction-Befehl führt unabhängig von dem aktuellen Transaktionsverweiszähler ein Rollback für die aktive Transaktion aus und legt den Transaktionsverweiszähler auf null fest. Wenn keine aktive Transaktion vorhanden ist (das heißt, wenn der Transaktionsverweiszähler für die aktuelle Sitzung bereits auf null festgelegt ist), führt ein RollbackTransaction-Befehl zu einem Fehler.