Transaktionen: Always On-Verfügbarkeitsgruppen und DatenbankspiegelungTransactions - availability groups and database mirroring

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

In diesem Artikel wird die Unterstützung für datenbankübergreifende und verteilte Transaktionen für Always On-Verfügbarkeitsgruppen und die Datenbankspiegelung beschrieben.This article describes cross-database and distributed transactions support for Always On availability groups and database mirroring.

Unterstützung für verteilte TransaktionenSupport for distributed transactions

SQL Server 2017 unterstützt verteilte Transaktionen für Datenbanken in Verfügbarkeitsgruppen.SQL Server 2017 supports distributed transactions for databases in availability groups. Diese Unterstützung schließt Datenbanken, die sich auf derselben Instanz von SQL Server befinden, genauso ein wie Datenbanken, die sich auf verschiedenen Instanzen von SQL Server befinden.This support includes databases on the same instance of SQL Server or databases on different instances of SQL Server. Verteilte Transaktionen werden für Datenbanken unterstützt, die für die Datenbankspiegelung konfiguriert sind.Distributed transactions are not supported for databases configured for database mirroring.

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.

Weitere Informationen zum Konfigurieren einer Verfügbarkeitsgruppe für verteilte Transaktionen finden Sie unter Configure Availability Group for Distributed Transactions (Konfigurieren einer Verfügbarkeitsgruppe für verteilte Transaktionen).To configure an availability group for distributed transactions, see Configure Availability Group for Distributed Transactions.

Weitere Informationen finden Sie unter:See more information at:

SQL Server 2016 SP1 und früher: Unterstützung für datenbankübergreifende Transaktionen innerhalb derselben SQL Server-InstanzSQL Server 2016 SP1 and before: Support for cross-database transactions within the same SQL Server instance

In SQL Server 2016 SP1 und früher werden datenbankübergreifende Transaktionen innerhalb derselben SQL Server-Instanz für Verfügbarkeitsgruppen nicht unterstützt.In SQL Server 2016 SP1 and before, cross-database transactions within the same SQL Server instance are not supported for availability groups. Keine zwei Datenbanken, die an einer datenbankübergreifenden Transaktion beteiligt sind, dürfen von derselben SQL Server-Instanz gehostet werden, wenn sich eine oder beide Datenbanken in einer Verfügbarkeitsgruppe befinden.No two databases in a cross-database transaction may be hosted by the same SQL Server instance if either or both databases are in an availability group. Diese Einschränkung gilt auch, wenn diese Datenbanken Teil der gleichen Verfügbarkeitsgruppe sind.This limitation also applies when those databases are part of the same availability group.

Datenbankübergreifende Transaktionen werden für die Datenbankspiegelung ebenfalls nicht unterstützt.Cross-database transactions are also not supported for database mirroring.

SQL Server 2016 SP1 und früher: Unterstützung für verteilte TransaktionenSQL Server 2016 SP1 and before: Support for distributed transactions

Verteilte Transaktion werden von Verfügbarkeitsgruppen unterstützt, wenn Datenbanken von unterschiedlichen SQL Server-Instanzen gehostet werden.Distributed transactions are supported with availability groups when databases are hosted by different SQL Server instances. Dies gilt auch für verteilte Transaktionen zwischen SQL Server-Instanzen und einem anderen DTC-konformen Server.It also applies to distributed transactions between SQL Server instances and other DTC-compliant server.

Microsoft Distributed Transaction Coordinator (MSDTC oder DTC) ist ein Windows-Dienst, der eine Transaktionsinfrastruktur für verteilte Systeme bereitstellt.Microsoft Distributed Transaction Coordinator (MSDTC or DTC) is a Windows service that provides transaction infrastructure for distributed systems. Mit MSDTC können Clientanwendungen mehrere Datenquellen in eine Transaktion aufnehmen. Für diese Transaktion wird dann auf allen Servern, die Teil der Transaktion sind, ein Commit ausgeführt.MSDTC permits client applications to include multiple data sources in one transaction, which then is committed across all servers included in the transaction. Sie können MSDTC beispielsweise dazu nutzen, um Transaktionen zu koordinieren, die mehrere Datenbanken auf verschiedenen Servern umfassen.For example, you can use MSDTC to coordinate transactions that span multiple databases on different servers.

Mit der neuen Funktion von SQL Server 2016 können Sie verteilte Transaktionen selbst dann verwenden, wenn mindestens eine Datenbank in der Transaktion Teil zu einer Verfügbarkeitsgruppe gehören.SQL Server 2016 introduces the capability to use distributed transactions where one or more of the databases in the transaction are in an availability group. Vor SQL Server 2016 wurden verteilte Transaktionen für Datenbanken in Verfügbarkeitsgruppen nicht unterstützt.Prior to SQL Server 2016 distributed transactions were not supported for databases in availability groups. In SQL Server 2016 können Sie einen Ressourcen-Manager pro Datenbank registrieren.SQL Server 2016 can register a resource manager per database. Dank dieser neuen Funktion können verteilte Transaktionen jetzt auch Datenbanken in Verfügbarkeitsgruppen berücksichtigen.This new capability is why distributed transactions can include databases in availability groups.

Die folgenden Anforderungen müssen erfüllt sein:The following requirements must be met:

  • Verfügbarkeitsgruppen müssen auf Windows Server 2012 R2 oder höher ausgeführt werden.Availability groups must be running on Windows Server 2012 R2 or later. 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.

  • Verfügbarkeitsgruppen müssen mit dem Befehl CREATE AVAILABILITY GROUP und der Klausel WITH DTC_SUPPORT = PER_DB erstellt werden.Availability groups must be created with the CREATE AVAILABILITY GROUP command and the WITH DTC_SUPPORT = PER_DB clause. Zurzeit können Sie eine vorhandene Verfügbarkeitsgruppe nicht ändern.You cannot currently alter an existing availability group.

  • Alle SQL Server-Instanzen, die in die Verfügbarkeitsgruppe einbezogen werden, müssen SQL Server 2016 oder höher entsprechen.All instances of SQL Server that participate in the availability group must be SQL Server 2016 or later.

Keine Unterstützung für verteilte TransaktionenNon-support for distributed transactions

Besondere Fälle, in denen verteilte Transaktionen nicht unterstützt werden:Specific cases where distributed transactions are not supported include:

  • Wenn sich in SQL Server 2016 SP1 und früher mehr als eine Datenbank, die an der Transaktion beteiligt ist, in der gleichen Verfügbarkeitsgruppe befindet.In SQL Server 2016 SP1 and prior, where more than one database involved in the transaction is in the same availability group.

  • Wenn sich in SQL Server 2016 SP1 und früher mindestens eine Datenbank in einer Verfügbarkeitsgruppe befindet und sich eine andere Datenbank auf der gleichen SQL Server-Instanz befindet.In SQL Server 2016 SP1 and prior, where at least one database is in an availability group and another database is on the same instance of SQL Server.

  • Wenn die Verfügbarkeitsgruppe nicht mit der Aktivierung von verteilten Transaktionen erstellt wurde.Where the availability group was not created with enable distributed transaction.

  • DatenbankspiegelungDatabase mirroring.

Wichtig

Bestimmen Sie die geeigneten Standardergebnisse von Transaktionen, die für Ihre Umgebung von DTC nicht aufgelöst werden können.Determine the appropriate default outcome of transactions that DTC is unable to resolve for your environment. Informationen zum Konfigurieren des Standardergebnisses finden Sie unter Lösung für unklare Transaktion (Serverkonfigurationsoption).For information on how to configure the default outcome see in-doubt xact resolution Server Configuration Option.

Beispielszenario mit DatenbankspiegelungExample scenario with database mirroring

Im folgenden Beispiel zur Datenbankspiegelung wird verdeutlicht, wie eine logische Inkonsistenz auftreten kann.The following database mirroring example illustrates how a logical inconsistency could occur. In diesem Beispiel fügt eine Anwendung über eine datenbankübergreifende Transaktion zwei Datenzeilen ein: Eine Zeile wird in eine Tabelle in einer gespiegelten Datenbank (A) eingefügt, und die andere Zeile wird in eine Tabelle in einer anderen Datenbank (B) eingefügt. Datenbank A wird im Modus für hohe Sicherheit mit automatischem Failover gespiegelt.In this example, an application uses a cross-database transaction to insert two rows of data: one row is inserted into a table in a mirrored database, A, and the other row is inserted into a table in another database, B. Database A is being mirrored in high-safety mode with automatic failover. Während des Commits der Transaktion fällt Datenbank A aus. Die Spiegelungssitzung führt automatisch ein Failover zum Spiegel von Datenbank A aus.While the transaction is being committed, database A becomes unavailable, and the mirroring session automatically fails over to the mirror of database A.

Nach dem Failover kann ein Commit der datenbankübergreifenden Transaktion möglicherweise erfolgreich für Datenbank B ausgeführt werden, jedoch nicht für die Datenbank, für die der Failover ausgeführt wurde.After the failover, the cross-database transaction might be successfully committed on database B but not on the failed-over database. Dies wäre z.B. der Fall, wenn der ursprüngliche Prinzipalserver für Datenbank A nicht das Protokoll für die datenbankübergreifende Transaktion vor dem Ausfall an den Spiegelserver gesendet hätte.For example, if the original principal server for database A had not sent the log for the cross-database transaction to the mirror server before the failure. Nach dem Failover wäre diese Transaktion auf dem neuen Prinzipalserver nicht vorhanden.After the failover, that transaction would not exist on the new principal server. Datenbanken A und B würden inkonsistent werden, da die in Datenbank B eingefügten Daten erhalten bleiben, während die in Datenbank A eingefügten Daten verloren gingen.Databases A and B would become inconsistent, because the data inserted in database B remains intact, but the data inserted in database A has been lost.

Ein vergleichbares Szenario kann bei einer MS DTC-Transaktion auftreten.A similar scenario can occur while using an MS DTC transaction. Angenommen, der neue Prinzipal setzt sich nach dem Failover mit MS DTC in Verbindung.For example, after failover, the new principal contacts MS DTC. Der neue Prinzipalserver ist MS DTC jedoch nicht bekannt, deshalb beendet er alle Transaktionen, für die "ein Commit vorbereitet wird", für die in anderen Datenbanken jedoch bereits anscheinend ein Commit ausgeführt wurde.But MS DTC has no knowledge of the new principal server, and it terminates any transactions that are "preparing to commit," which are considered committed in other databases.

Hinweis

Es besteht keine Unterstützung für die Verwendung der Datenbankspiegelung mit DTC oder die Verwendung von Verfügbarkeitsgruppen mit DTC auf nicht in diesem Artikel genehmigte Weise.Using Database Mirroring with DTC or using availability groups with DTC in ways not approved in this article is not supported. Dies bedeutet nicht, dass Aspekte des Produkts, die nicht mit DTC in Zusammenhang stehen, nicht unterstützt werden; Probleme die aus der unsachgemäßen Verwendung von verteilten Transaktionen herrühren, werden jedoch nicht unterstützt.This does not imply that aspects of the product unrelated to DTC are unsupported; however, any issues arising from the improper use of distributed transactions are not supported.

Nächste SchritteNext steps

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