Freigeben über


Verwalten von Transaktionen (XMLA)

Jeder xml for Analysis (XMLA)-Befehl, der an eine Instanz von Microsoft SQL Server SQL Server SQL Server Analysis Services gesendet wird, wird im Kontext einer Transaktion für die aktuelle implizite oder explizite Sitzung ausgeführt. Um jede dieser Transaktionen zu verwalten, verwenden Sie die Befehle "BeginTransaction", "CommitTransaction" und "RollbackTransaction" . Mithilfe dieser Befehle können Sie implizite oder explizite Transaktionen erstellen, die Transaktionsreferenzanzahl ändern sowie Transaktionen starten, übernehmen oder zurücksetzen.

Implizite und explizite Transaktionen

Eine Transaktion ist implizit oder explizit:

Implizite Transaktion
SQL Server Analysis Services erstellt eine implizite Transaktion für einen XMLA-Befehl, wenn der BeginTransaction-Befehl nicht den Start einer Transaktion angibt. SQL Server Analysis Services übernimmt immer eine implizite Transaktion, wenn der Befehl erfolgreich ist, und setzt eine implizite Transaktion zurück, wenn der Befehl fehlschlägt.

Explizite Transaktion
SQL Server Analysis Services erstellt eine explizite Transaktion, wenn der BeginTransaction-Befehl eine Transaktion startet. SQL Server Analysis Services führt jedoch nur einen Commit für eine explizite Transaktion durch, wenn ein CommitTransaction-Befehl gesendet wird, und setzt eine explizite Transaktion zurück, wenn ein RollbackTransaction-Befehl gesendet wird.

Darüber hinaus setzt SQL Server Analysis Services implizite und explizite Transaktionen zurück, wenn die aktuelle Sitzung endet, bevor die aktive Transaktion abgeschlossen ist.

Transaktionen und Referenzanzahlen

SQL Server Analysis Services verwaltet für jede Sitzung eine Transaktionsreferenzanzahl. SQL Server Analysis Services unterstützt jedoch keine geschachtelten Transaktionen, in denen pro Sitzung nur eine aktive Transaktion verwaltet wird. Wenn die aktuelle Sitzung nicht über eine aktive Transaktion verfügt, wird die Transaktionsreferenzanzahl auf Null festgelegt.

Mit anderen Worten: Jeder BeginTransaction-Befehl erhöht die Referenzanzahl um eins, während jeder CommitTransaction-Befehl die Referenzanzahl um eins verringert. Wenn ein CommitTransaction-Befehl die Transaktionsanzahl auf Null festlegt, wird die Transaktion von SQL Server Analysis Services ausgeführt.

Der RollbackTransaction-Befehl setzt die aktive Transaktion jedoch unabhängig vom aktuellen Wert der Transaktionsreferenzanzahl zurück. Anders ausgedrückt: Ein einzelner RollbackTransaction-Befehl rollt die aktive Transaktion zurück, unabhängig davon, wie viele BeginTransaction-Befehle oder CommitTransaction-Befehle gesendet wurden, und legt die Transaktionsverweisanzahl auf Null fest.

Beginnen einer Transaktion

Der Befehl "BeginTransaction " beginnt eine explizite Transaktion für die aktuelle Sitzung und erhöht die Transaktionsreferenzanzahl für die aktuelle Sitzung um eine. Alle nachfolgenden Befehle werden als innerhalb der aktiven Transaktion betrachtet, bis entweder genügend CommitTransaction-Befehle gesendet werden, um die aktive Transaktion zu übernehmen, oder ein einzelner RollbackTransaction-Befehl wird gesendet, um die aktive Transaktion rückgängig zu machen.

Durchführung einer Transaktion

Der CommitTransaction-Befehl commitsiert die Ergebnisse von Befehlen, die ausgeführt werden, nachdem der Befehl "BeginTransaction " in der aktuellen Sitzung ausgeführt wurde. Jeder CommitTransaction-Befehl verringert die Referenzanzahl für aktive Transaktionen innerhalb einer Sitzung. Wenn ein CommitTransaction-Befehl die Referenzanzahl auf Null festlegt, wird die aktive Transaktion von SQL Server Analysis Services durchgeführt. Wenn keine aktive Transaktion vorhanden ist (d. h. die Transaktionsreferenzanzahl für die aktuelle Sitzung ist bereits auf Null festgelegt), führt ein CommitTransaction-Befehl zu einem Fehler.

Rollback einer Transaktion

Der RollbackTransaction-Befehl setzt die Ergebnisse von Befehlen zurück, die ausgeführt werden, nachdem der Befehl "BeginTransaction " in der aktuellen Sitzung ausgeführt wurde. Der RollbackTransaction-Befehl setzt die aktive Transaktion unabhängig von der aktuellen Transaktionsreferenzanzahl zurück und legt die Transaktionsverweisanzahl auf Null fest. Wenn keine aktive Transaktion vorhanden ist (d. h. die Transaktionsreferenzanzahl für die aktuelle Sitzung ist bereits auf Null festgelegt), führt ein RollbackTransaction-Befehl zu einem Fehler.

Siehe auch

Entwickeln mit XMLA in Analysis Services