Konfigurieren von verteilten Transaktionen für Always On-VerfügbarkeitsgruppenConfigure distributed transactions for an Always On availability group

GILT FÜR: JaSQL Server NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: YesSQL Server NoAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

SQL Server 2017 (14.x)SQL Server 2017 (14.x) unterstützt alle verteilten Transaktionen, einschließlich Datenbanken in einer Verfügbarkeitsgruppe.supports all distributed transactions including databases in an availability group. In diesem Artikel erfahren Sie, wie Sie eine Verfügbarkeitsgruppe für verteilte Transaktionen konfigurieren.This article explains how to configure an availability group for distributed transactions

Um verteilte Transaktionen gewährleisten zu können, muss die Verfügbarkeitsgruppe so konfiguriert sein, dass Datenbanken als Ressourcenmanager verteilter Transaktionen registriert werden.In order to guarantee distributed transactions, the availability group must be configured to register databases as distributed transaction resource managers.

Hinweis

SQL Server 2016 (13.x)SQL Server 2016 (13.x) Service Pack 2 und höher stellt die vollständige Unterstützung für verteilte Transaktionen in Verfügbarkeitsgruppen bereit.Service Pack 2 and later provides full support for distributed transactions in availability groups. In früheren SQL Server 2016 (13.x)SQL Server 2016 (13.x)-Versionen vor Service Pack 2 werden datenbankübergreifende verteilte Transaktionen nicht unterstützt, wenn sie eine Datenbank in einer Verfügbarkeitsgruppe enthalten. Bei diesen Transaktionen werden nur Datenbanken auf der gleichen SQL Server-Instanz verwendet.In SQL Server 2016 (13.x)SQL Server 2016 (13.x) versions prior to Service Pack 2, cross-database distributed transactions (i.e. transaction using databases on the same SQL Server instance) involving a database in an availability group are not supported. Diese Einschränkung besteht in SQL Server 2017 (14.x)SQL Server 2017 (14.x) nicht.SQL Server 2017 (14.x)SQL Server 2017 (14.x) does not have this limitation.

Die Einrichtungsschritte für SQL Server 2016 (13.x)SQL Server 2016 (13.x) sind identisch mit denen für SQL Server 2017 (14.x)SQL Server 2017 (14.x).In SQL Server 2016 (13.x)SQL Server 2016 (13.x) the configuration steps are the same as in SQL Server 2017 (14.x)SQL Server 2017 (14.x).

Bei einer verteilten Transaktion arbeiten Clientanwendungen mit dem Microsoft Distributed Transaction Coordinator (MS DTC oder auch DTC) zusammen, um Transaktionskonsistenz über mehrere Datenquellen hinweg zu gewährleisten.In a distributed transaction, client applications work with Microsoft Distributed Transaction Coordinator (MS DTC or DTC) to guarantee transactional consistency across multiple data sources. Der DTC ist ein Dienst für Betriebssysteme, die auf Windows Server basieren.DTC is a service available on supported Windows Server-based operating systems. Bei einer verteilten Transaktion agiert der DTC als Transaktionskoordinator.For a distributed transaction, DTC is the transaction coordinator. Normalerweise agiert eine SQL Server-Instanz als Ressourcenmanager.Normally, a SQL Server instance is the resource manager. Wenn sich eine Datenbank in einer Verfügbarkeitsgruppe befindet, benötigt sie ihren eigenen Ressourcenmanager.When a database is in an availability group, each database needs to be its own resource manager.

In SQL ServerSQL Server werden verteilte Transaktionen für Datenbanken in einer Verfügbarkeitsgruppe nicht verhindert – selbst wenn die Verfügbarkeitsgruppe nicht für verteilte Transaktionen konfiguriert ist.SQL ServerSQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. Wenn eine Verfügbarkeitsgruppe jedoch nicht für verteilte Transaktionen konfiguriert ist, kann es vorkommen, dass das Failover in manchen Situationen fehlschlägt.However when an availability group is not configured for distributed transactions, failover may not succeed in some situations. Insbesondere neue SQL ServerSQL Server-Instanz des primären Replikats ist möglicherweise nicht in der Lage, Transaktionsergebnisse vom DTC abzurufen.Specifically the new primary replica SQL ServerSQL Server instance may not be able to get the transaction outcome from DTC. Um der SQL ServerSQL Server-Instanz nach einem Failover das Abrufen der Ergebnisse unsicherer Transaktionen vom DTC zu ermöglichen, konfigurieren Sie die Verfügbarkeitsgruppe für verteilte Transaktionen.To enable the SQL ServerSQL Server instance to get the outcome of in-doubt transactions from the DTC after failover, configure the availability group for distributed transactions.

DTC ist nicht an der Verarbeitung von Verfügbarkeitsgruppen beteiligt, es sei denn, eine Datenbank ist auch Mitglied eines Failoverclusters.DTC is not involved in availability group processing unless a database is also a member of a Failover Cluster. Innerhalb einer Verfügbarkeitsgruppe wird die Konsistenz zwischen Replikaten von der Verfügbarkeitsgruppenlogik verwaltet: Das primäre Replikat schließt den Commit nicht ab und bestätigt den Commit an die aufrufende Funktion, bis das sekundäre Replikat bestätigt hat, dass die Protokolldatensätze im permanenten Speicher dauerhaft gespeichert wurden.Within an availability group, the consistency between replicas is maintained by the availability group logic: The primary will not complete the commit and acknowledge the commit to the caller until the secondary has acknowledged that it has persisted the log records in durable storage. Erst dann deklariert das primäre Replikat die Transaktion als abgeschlossen.Only then does the Primary declare the transaction complete. Im asynchronen Modus wird nicht gewartet, bis das sekundäre Replikat die Bestätigung durchführt, und es besteht explizit die Wahrscheinlichkeit, dass eine geringe Datenmenge verloren geht.In async mode, we do not wait for the secondary to ack, and there is explicitly the chance of the loss of a small amount of data.

VoraussetzungenPrerequisites

Bevor Sie eine Verfügbarkeitsgruppe so konfigurieren, dass verteilte Transaktionen unterstützt werden, müssen die folgenden Voraussetzungen erfüllt sein:Before you configure an availability group to support distributed transactions, you must meet the following prerequisites:

  • Alle Instanzen von SQL ServerSQL Server, die an verteilten Transaktionen teilnehmen, müssen unter SQL Server 2016 (13.x)SQL Server 2016 (13.x) oder höher laufen.All instances of SQL ServerSQL Server that participate in the distributed transaction must be SQL Server 2016 (13.x)SQL Server 2016 (13.x) or later.

  • Verfügbarkeitsgruppen müssen auf Windows Server 2016 oder Windows Server 2012 R2 ausgeführt werden.Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. Für Windows Server 2012 R2 müssen Sie das Update in KB3090973 installieren, das unter https://support.microsoft.com/kb/3090973 verfügbar ist.For Windows Server 2012 R2, you must install the update in KB3090973 available at https://support.microsoft.com/kb/3090973.

Erstellen einer Verfügbarkeitsgruppe für verteilte TransaktionenCreate an availability group for distributed transactions

Konfigurieren Sie eine Verfügbarkeitsgruppe so, dass sie verteilte Transaktionen unterstützt.Configure an availability group to support distributed transactions. Legen Sie für die Verfügbarkeitsgruppe fest, dass sich jede Datenbank als Ressourcenmanager registrieren kann.Set the availability group to allow each database to register as a resource manager. In diesem Artikel wird erläutert, wie Sie eine Verfügbarkeitsgruppe so konfiguriert werden kann, dass jede Datenbank im DTC Ressourcenmanager sein kann.This article explains how to configure an availability group so that each database can be a resource manager in DTC.

Die Erstellung von Verfügbarkeitsgruppen für verteilte Transaktionen ist ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) möglich.You can create an availability group for distributed transactions on SQL Server 2016 (13.x)SQL Server 2016 (13.x) or later. Um eine Verfügbarkeitsgruppe für verteilte Transaktionen zu erstellen, müssen Sie DTC_SUPPORT = PER_DB in die Definition einer Verfügbarkeitsgruppe einschließen.To create an availability group for distributed transactions, include DTC_SUPPORT = PER_DB in the availability group definition. Das folgende Skript erstellt eine Verfügbarkeitsgruppe für verteilte Transaktionen.The following script creates an availability group for distributed transactions.

CREATE AVAILABILITY GROUP MyAG
   WITH (
      DTC_SUPPORT = PER_DB  
      )
   FOR DATABASE DB1, DB2
   REPLICA ON
      'Server1' WITH (
         ENDPOINT_URL = 'TCP://SERVER1.corp.com:5022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = AUTOMATIC  
         ),
      'Server2' WITH (
         ENDPOINT_URL = 'TCP://SERVER2.corp.com:5022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = AUTOMATIC  
         )

Hinweis

Dieses Skript ist ein einfaches Beispiel für eine Verfügbarkeitsgruppe und nicht für eine bestimmte Produktionsumgebung gedacht.The preceding script is a simple example of an availability group and is not designed for any specific production environment.

Anpassen einer Verfügbarkeitsgruppe für verteilte TransaktionenAlter an availability group for distributed transactions

Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) lasen sich Verfügbarkeitsgruppen für verteilte Transaktionen ändern.You can alter an availability group for distributed transactions on SQL Server 2017 (14.x)SQL Server 2017 (14.x) or later. Um eine Verfügbarkeitsgruppe für verteilte Transaktionen zu ändern, nehmen Sie DTC_SUPPORT = PER_DB in das Skript ALTER AVAILABILITY GROUP auf.To alter an availability group for distributed transactions, include DTC_SUPPORT = PER_DB in the ALTER AVAILABILITY GROUP script. Das Beispielskript aktiviert für eine Verfügbarkeitsgruppe die Unterstützung verteilter Transaktionen.The example script changes the availability group to support distributed transactions.

ALTER AVAILABILITY GROUP MyaAG
   SET (
      DTC_SUPPORT = PER_DB  
      );

Hinweis

Ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) Service Pack 2 können Sie Verfügbarkeitsgruppen für verteilte Transaktionen ändern.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) Service Pack 2 you can alter an availability group for distributed transactions. Für SQL Server 2016 (13.x)SQL Server 2016 (13.x)-Versionen vor Service Pack 2 müssen Sie die Verfügbarkeitsgruppe löschen und dann mit der Einstellung DTC_SUPPORT = PER_DB erneut erstellen.For SQL Server 2016 (13.x)SQL Server 2016 (13.x) versions before Service Pack 2, you need to drop, and recreate the availability group with the DTC_SUPPORT = PER_DB setting.

Um verteilte Transaktionen zu deaktivieren, verwenden Sie den folgenden Transact-SQL-Befehl:To disable distributed transactions, use the following Transact-SQL command:

ALTER AVAILABILITY GROUP MyaAG
   SET (
      DTC_SUPPORT = NONE  
      );

Verteilte Transaktionen – Technisches PrinzipDistributed transactions - technical concepts

Bei einer verteilten Transaktion sind mindestens zwei Datenbanken beteiligt.A distributed transaction spans two or more databases. Der DTC als Transaktionsmanager koordiniert die Transaktion zwischen SQL Server-Instanzen und anderen Datenquellen.As the transaction manager, DTC coordinates the transaction between SQL Server instances, and other data sources. Jeder Instanz der SQL ServerSQL Server-Datenbank-Engine kann als Ressourcenmanager operieren.Each instance of the SQL ServerSQL Server database engine can operate as a resource manager. Wenn bei einer Verfügbarkeitsgruppe die Einstellung DTC_SUPPORT = PER_DB verwendet wird, können die Datenbanken als Ressourcenmanager operieren.When an availability group is configured with DTC_SUPPORT = PER_DB, the databases can operate as resource managers. Weitere Informationen finden Sie in der MS DTC-Dokumentation.For more information, see the MS DTC documentation.

Bei einer Transaktion mit zwei oder mehr Datenbanken in einer einzelnen Instanz der Datenbank-Engine handelt es sich eigentlich um eine verteilte Transaktion.A transaction with two or more databases in a single instance of the database engine is actually a distributed transaction. Die Instanz verwaltet die verteilte Transaktion jedoch intern; für den Benutzer entsteht der Eindruck, es handele sich um eine lokale Transaktion.The instance manages the distributed transaction internally; to the user, it operates as a local transaction. SQL Server 2017 (14.x)SQL Server 2017 (14.x) leitet alle datenbankübergreifenden Transaktionen an den DTC weiter, wenn die Datenbanken sich in einer Verfügbarkeitsgruppe mit der Einstellung DTC_SUPPORT = PER_DB befinden. Dies gilt auch, innerhalb einer einzelnen SQL Server-Instanz.promotes all cross-database transactions to DTC when databases are in an availability group configured with DTC_SUPPORT = PER_DB - even within a single instance of SQL Server.

Auf der Anwendungsebene wird eine verteilte Transaktion beinahe so wie eine lokale Transaktion verwaltet.At the application, a distributed transaction is managed much the same as a local transaction. Am Ende der Transaktion fordert die Anwendung die Transaktion auf, entweder einen Commit oder Rollback auszuführen.At the end of the transaction, the application requests the transaction to be either committed or rolled back. Ein verteilter Commit darf vom Transaktions-Manager nicht auf dieselbe Art verwaltet werden, um das Risiko zu minimieren, dass einige Ressourcen-Manager bei einem Netzwerkfehler den Commit erfolgreich ausführen, während andere für die Transaktion einen Rollback ausführen.A distributed commit must be managed differently by the transaction manager to minimize the risk that a network failure may result in some resource managers successfully committing while others roll back the transaction. Dies wird dadurch erreicht, dass der Commitvorgang in zwei Phasen verläuft (die Vorbereitungsphase und die Commitphase), bekannt als Zweiphasencommit.This is achieved by managing the commit process in two phases (the prepare phase and the commit phase), which is known as a two-phase commit.

  • VorbereitungsphasePrepare phase

    Wenn der Transaktions-Manager eine Anforderung für ein Commit erhält, sendet er einen Vorbereitungsbefehl an alle Ressourcen-Manager, die an der Transaktion beteiligt sind.When the transaction manager receives a commit request, it sends a prepare command to all of the resource managers involved in the transaction. Jeder Ressourcen-Manager trifft dann die notwendigen Vorbereitungen, um die Transaktion beständig zu machen, und alle Puffer, die Images von Protokollen für die Transaktion enthalten, werden auf den Datenträger geleert.Each resource manager then does everything required to make the transaction durable, and all buffers holding log images for the transaction are flushed to disk. Wenn die Ressourcen-Manager die Vorbereitungsphase beenden, geben sie jeweils eine Information über den Erfolg oder das Fehlschlagen der Vorbereitung an den Transaktions-Manager zurück.As each resource manager completes the prepare phase, it returns success or failure of the prepare to the transaction manager.

  • CommitphaseCommit phase

    Wenn der Transaktions-Manager von der erfolgreichen Vorbereitung aller Ressourcen-Manager in Kenntnis gesetzt wird, sendet er Commitbefehle an alle Ressourcen-Manager.If the transaction manager receives successful prepares from all of the resource managers, it sends commit commands to each resource manager. Die Ressourcen-Manager können dann den Commit beenden.The resource managers can then complete the commit. Wenn alle Ressourcen-Manager eine erfolgreiche Ausführung des Commits melden, sendet der Transaktions-Manager eine Benachrichtigung über die erfolgreiche Ausführung an die Anwendung.If all of the resource managers report a successful commit, the transaction manager then sends a success notification to the application. Wenn einer der Ressourcen-Manager einen Fehler bei der Vorbereitung ausgibt, sendet der Transaktions-Manager einen Rollbackbefehl an alle Ressourcen-Manager und benachrichtigt die Anwendung über die fehlgeschlagene Ausführung des Commits.If any resource manager reported a failure to prepare, the transaction manager sends a rollback command to each resource manager and indicates the failure of the commit to the application.

Ausführliche SchritteDetailed steps

In den nachfolgenden Schritten wird erläutert, wie die Anwendung mit dem DTC zusammenarbeitet, um verteilte Transaktionen abzuschließen.The following list explains how the application works with DTC to complete distributed transactions.

  1. Die SQL Server-Instanz trägt sich bei der DTC-Transaktion ein.The SQL Server instance enlists in the DTC transaction. Dies kann passieren, wenn es für eine Transaktion mehr als einen Ressourcenmanager gibt oder wenn ein Client fordert, dass eine Transaktion zu einer DTC-Transaktion hochgestuft wird.This can happen when there is more than one resource manager in the transaction or if the client requests a transaction be promoted to DTC transaction.
  2. Der Client führt in der SQL Server-Instanz im Rahmen der DTC-Transaktion mehrere Aufgaben aus.The client does some work in the SQL Server instance under the DTC transaction.
  3. Der Client gibt vor, dass die DTC-Transaktion committet oder abgebrochen werden soll.The client issues commit or abort for the DTC transaction.
    • Wenn der Client den Abbruch vorgibt, wird die Transaktion sofort abgebrochen.If the client issues abort, the transaction is aborted immediately.
    • Wenn der Client den Commit vorgibt, startet der DTC mit dem Zweiphasencommit, indem alle Ressourcenmanager in der Transaktion gebeten werden, sie vorzubereiten.If the client issues commit, DTC begins the two-phase commit protocol by asking all the resource managers in the transaction to prepare the transaction.
  4. Der DTC bittet alle Ressourcenmanager, die Transaktion zu committen, nachdem sie den Abschluss der Vorbereitungsphase erfolgreich bestätigt haben.DTC informs all resource managers to commit the transaction after all resource managers successfully acknowledge the prepare phase. Wenn die Bestätigung aus welchem Grund auch immer nicht erfolgen kann, bricht der DTC die Transaktion ab.If anything prevents successful acknowledgement, DTC aborts the transaction.

Auswirkungen des Konfigurierens einer Verfügbarkeitsgruppe für verteilte TransaktionenEffects of configuring an availability group for distributed transactions

Jede an einer verteilten Transaktion teilnehmende Entität wird als Ressourcenmanager bezeichnet.Each entity participating in a distributed transaction is called a resource manager. Beispiele für Ressourcen-Manager:Examples of resource managers include:

  • Eine SQL ServerSQL Server-Instanz.A SQL ServerSQL Server instance.
  • Eine Datenbank in einer Verfügbarkeitsgruppe, die für verteilte Transaktionen konfiguriert wurde.A database in an availability group that has been configured for distributed transactions.
  • Der DTC-Dienst – auch dieser kann ein Transaktionsmanager sein.DTC service - can also be a transaction manager.
  • Andere DatenquellenOther data sources.

Um an einer verteilten Transaktion teilzunehmen, trägt sich eine SQL ServerSQL Server-Instanz beim DTC ein.In order to participate in distributed transactions, an instance of SQL ServerSQL Server enlists with a DTC. Normalerweise trägt sich die SQL ServerSQL Server-Instanz beim DTC auf dem lokalen Server ein.Normally the instance of SQL ServerSQL Server enlists with DTC on the local server. Jede SQL ServerSQL Server-Instanz erstellt einen Ressourcenmanager mit einer eindeutigen Ressourcenmanager-ID (RMID) und registriert sie beim DTC.Each instance of SQL ServerSQL Server creates a resource manager with a unique resource manager identifier (RMID) and registers it with DTC. Standardmäßig verwenden alle Datenbanken in einer SQL ServerSQL Server-Instanz dieselbe RMID.In the default configuration, all databases on an instance of SQL ServerSQL Server use the same RMID.

Wenn sich eine Datenbank in einer Verfügbarkeitsgruppe befindet, wird die Lese-/Schreibkopie einer Verfügbarkeitsdatenbank, auch als primäres Replikat bezeichnet, möglicherweise in eine andere SQL ServerSQL Server-Instanz verschoben.When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL ServerSQL Server. Damit während dieses Verschiebevorgangs verteilte Transaktionen unterstützt werden, sollte jede Datenbank als separater Ressourcenmanager agieren und benötigt eine einmalige RMID.To support distributed transactions during this movement, each database should act as a separate resource manager and must have a unique RMID. Wenn für eine Verfügbarkeitsgruppe die Einstellung DTC_SUPPORT = PER_DB gewählt wurde, erstellt SQL ServerSQL Server einen Ressourcenmanager für jede Datenbank und führt die DTC-Registrierung mit der eindeutigen RMID durch.When an availability group has DTC_SUPPORT = PER_DB, SQL ServerSQL Server creates a resource manager for each database and registers with DTC using a unique RMID. In dieser Konfiguration fungiert die Datenbank als Ressourcenmanager für DTC-Transaktionen.In this configuration, the database is a resource manager for DTC transactions.

Weitere Informationen zu verteilten Transaktionen in SQL ServerSQL Server, finden Sie unter verteilte TransaktionenFor more detail on distributed transactions in SQL ServerSQL Server, see Distributed transactions

Verwalten nicht aufgelöster TransaktionenManage unresolved transactions

Das Ergebnis aktiver Transaktion, das während eines RMID-Wechsels besteht, kann nach einem Failover nicht wiederhergestellt werden.The outcome for the active transactions that exists during RMID change cannot be recovered after a failover. Dies liegt daran, dass der für die Eintragung verwendete RMID-SQL-Server und der für die Wiederherstellung verwendete RMID-SQL-Server nicht identisch sind.This is because the RMID SQL Server used to enlist and RMID SQL Server used to recover are different. Zu einem RMID-Wechsel kann es in folgenden Fällen kommen:The RMID change can happen in following cases:

  • Änderung an der Einstellung DTC_SUPPORT einer VerfügbarkeitsgruppeChange DTC_SUPPORT for an availability group.
  • Hinzufügen oder Entfernen einer Datenbank aus einer VerfügbarkeitsgruppeAdd or remove a database from an availability group.
  • Verwerfen einer VerfügbarkeitsgruppeDrop an availability group.

In diesen Fällen versucht die Instanz, den DTC zu kontaktieren und das Transaktionsergebnis zu identifizieren, wenn ein Failover vom primären Replikat auf eine neue SQL ServerSQL Server-Instanz ausgeführt wird.In the preceding cases, if the primary replica fails over to a new instance of SQL ServerSQL Server, the instance tries to contact DTC to identify the transaction result. Der DTC kann das Ergebnis nicht zurückgeben, da die RMID, die die Datenbank während der Wiederherstellung bei unsicheren Transaktionen für den Ergebnisabruf verwendet, bisher nicht in der Liste eingetragen war.DTC cannot return the outcome because the RMID that the database is using to get the outcome for in-doubt transactions during recovery was not enlisted before. Deshalb gilt für die Datenbank der Status SUSPECT.Therefore the database goes into SUSPECT state.

Im neuen SQL ServerSQL Server-Fehlerprotokoll wird ein Eintrag ähnlich diesem Beispiel angezeigt:The new SQL ServerSQL Server error log has an entry like the following example:

Microsoft Distributed Transaction Coordinator (MS DTC) 
failed to reenlist citing that the database RMID does 
not match the RMID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx] 
associated with the transaction.  Please manually resolve
the transaction.
    
SQL Server detected a DTC/KTM in-doubt transaction with UOW 
{yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy}.Please resolve it 
following the guideline for Troubleshooting DTC Transactions.

Das vorstehende Beispiel zeigt, dass der DTC die Datenbank aus dem neuen primären Replikat nicht wieder in die Transaktion aufnehmen konnte, die nach dem Failover erstellt worden war.The preceding example shows that DTC could not re-enlist the database from the new primary replica in the transaction that was created after failover. Da die SQL ServerSQL Server-Instanz das Ergebnis der verteilten Transaktion nicht mehr bestimmten kann, wird die Datenbank als verdächtig markiert.The SQL ServerSQL Server instance cannot determine the result of the distributed transaction so it marks the database as suspect. Die Transaktion wird als eine Arbeitseinheit (Unit of Work – UOW) markiert und erhält einen GUI.The transaction is marked as a unit of work (UOW) and referred to by a GUID. Um die Datenbank wiederherzustellen, müssen Sie entweder einen Commit oder einen manuellen Rollback ausführen.In order to recover the database, either commit or rollback the transaction manually.

Warnung

Dies kann sich auf eine Anwendung auswirken.When you manually commit or rollback a transaction it can affect an application. Vergewissern Sie sich, dass der Commit oder Rollback den Anforderungen Ihrer Anwendung entspricht.Verify that the action of commit or rollback is consistent with your application requirements.

Führen Sie nur eines der folgenden Skripte aus:Run only one of the following scripts:

  • Um Transaktionen zu committen, aktualisieren Sie das folgende Skript, indem Sie yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy durch die UOW der unsicheren Transaktion aus der vorherigen Fehlermeldung ersetzen, und führen Sie es aus:To commit the transaction, update and run the following script - replace the yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy with the in-doubt transaction UOW from the previous error message, and run:
KILL 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' WITH COMMIT
  • Um einen Rollback für die Transaktion durchzuführen, aktualisieren Sie das folgende Skript, indem Sie yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy durch UOW der unsicheren Transaktion aus der vorherigen Fehlermeldung ersetzen, und führen Sie es aus:To roll back the transaction, update and run the following script - replace the yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy with the in-doubt transaction UOW from the previous error message, and run:
KILL 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' WITH ROLLBACK

Nach dem Rollback oder Commit der Transaktion können Sie die Datenbank mit ALTER DATABASE online schalten.After you commit or roll back the transaction, you can use ALTER DATABASE to set the database online. Aktualisieren Sie das folgende Skript, indem Sie als Datenbankname den Namen der verdächtigen Datenbank angeben:Update and run the following script - set the database name for the name of the suspect database:

ALTER DATABASE [DB1] SET ONLINE

Weitere Informationen zum Auflösen unsicherer Transaktionen finden Sie unter Resolve Transactions manually (Transaktionen manuell auflösen).For more information about resolving in-doubt transactions, see Resolve Transactions Manually.

Nächste SchritteNext Steps

Distributed Transactions (Verteilte Transaktionen)Distributed Transactions

Always On-Verfügbarkeitsgruppen: Interoperabilität (SQL Server)Always On availability groups: Interoperability (SQL Server)

Transactions - Always On availability groups and Database Mirroring (Transaktionen – Always On-Verfügbarkeitsgruppen und DatenbankspiegelungTransactions - Always On availability groups and Database Mirroring

Supporting XA Transactions (Unterstützung von XA-Transaktionen)Supporting XA Transactions

How It Works: Session/SPID (–2) for DTC Transactions (Funktionsweise: Session/SPID (–2) für DTC-Transaktionen)How It Works: Session/SPID (-2) for DTC Transactions