Freigeben über


Verwalten von Transaktionen (XMLA)

Jeder XML for Analysis (XMLA)-Befehl, der an eine Instanz von Microsoft SQL Server SQL Server Analysis Services gesendet wird, wird im Kontext einer Transaktion in der aktuellen impliziten oder expliziten Sitzung ausgeführt. Um jede dieser Transaktionen zu verwalten, verwenden Sie die Befehle "BeginTransaction", " CommitTransaction" und "RollbackTransaction ". 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
SQL Server Analysis Services erstellt eine implizite Transaktion für einen XMLA-Befehl, wenn der BeginTransaction-Befehl den Start einer Transaktion nicht angibt. SQL Server Analysis Services setzt immer eine implizite Transaktion fest, wenn der Befehl erfolgreich ist, und rollt 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 beginnt. SQL Server Analysis Services setzt jedoch nur eine explizite Transaktion fest, wenn ein CommitTransaction-Befehl gesendet wird und eine explizite Transaktion zurückgesetzt wird, wenn ein RollbackTransaction-Befehl gesendet wird.

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

Transaktionen und Verweiszähler

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

Mit anderen Worten, jeder BeginTransaction-Befehl erhöht die Referenzanzahl nach einem, während jeder CommitTransaction-Befehl die Referenzanzahl von einem bezieht. Wenn ein CommitTransaction-Befehl die Transaktionsanzahl auf Null legt, SQL Server Analysis Services die Transaktion fest.

Der RollbackTransaction-Befehl rollt die aktive Transaktion jedoch unabhängig vom aktuellen Wert der Transaktionsreferenzanzahl zurück. Mit anderen Worten, 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 Transaktionsreferenzanzahl auf Null fest.

Beginnen einer Transaktion

Der Befehl "BeginTransaction" beginnt eine explizite Transaktion auf der aktuellen 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 gesendet wird, um die aktive Transaktion zurückzurollen.

Commitausführung für eine Transaktion

Der CommitTransaction-Befehl setzt die Ergebnisse von Befehlen fest, die ausgeführt werden, nachdem der BeginTransaction-Befehl auf der aktuellen Sitzung ausgeführt wurde. Jeder CommitTransaction-Befehl dekrementiert die Referenzanzahl für aktive Transaktionen in einer Sitzung. Wenn ein CommitTransaction-Befehl die Referenzanzahl auf Null festlegt, SQL Server Analysis Services die aktive Transaktion commits. 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.

Ausführen von Rollbacks für eine Transaktion

Der RollbackTransaction-Befehl rollt die Ergebnisse von Befehlen zurück, die ausgeführt werden, nachdem der BeginTransaction-Befehl auf der aktuellen Sitzung ausgeführt wurde. Der RollbackTransaction-Befehl rollt die aktive Transaktion zurück, unabhängig von der aktuellen Transaktionsreferenzanzahl und legt die Transaktionsreferenzanzahl 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.

Weitere Informationen

Entwickeln mit XMLA in Analysis Services