Bei Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

Problembeschreibung

Gehen Sie davon aus, dass Sie eine Verfügbarkeitsgruppe mithilfe der WITH DTC_SUPPORT = PER_DB-Klausel in Microsoft SQL Server erstellen. Wenn Sie versuchen, eine SAVE TRANSACTION-Anweisung in einer transaktions- oder systemgespeicherten Prozedur wie sp_executesql auszuführen, wird eine der folgenden Fehlermeldungen angezeigt:

Msg 627, Level 16, State 0, Line LineNumber
SAVE TRANSACTION kann nicht in einer verteilten Transaktion verwendet werden.
Msg 12324, Level 16, State 100, Line LineNumber
Verteilte Transaktionen (DTC) werden bei speicheroptimierter Tabellen nicht unterstützt.
Fehler: 3933, Schweregrad: 16, Zustand: 1.
Die Transaktion kann nicht zu einer verteilten Transaktion heraufgestuft werden, da in dieser Transaktion ein aktiver Speicherpunkt vorhanden ist.

Ursache

Wenn eine Datenbank in Always On Verfügbarkeitsgruppe für WITH DTC_SUPPORT = PER_DB aktiviert ist, solange eine Transaktion mehrere Datenbanken umfasst, wird die Transaktion in SQL Server 2016 SP2 und SQL Server 2017 zu MSDTC-Transaktion heraufgestuft. Es gibt Einschränkungen bei MSDTC-Transaktionen, z. B. können keine Speicherpunkte verwendet werden, speicheroptimierte Tabellen können nicht verwendet werden.

In einigen Situationen erfolgen datenbankübergreifende Transaktionen nicht, weil Benutzer Transaktionen mit zwei Benutzerdatenbanken haben, sondern weil die Transaktionen die aktuelle Datenbank und Systemdatenbanken (Master, Tempdb, Modell, Systemressourcendatenbank) betreffen. Da die Systemressourcendatenbank tatsächlich schreibgeschützt ist, ist es nicht erforderlich, die MSDTC-Transaktion höher zu stufen, wenn eine datenbankübergreifende Transaktion eine Systemressourcendatenbank, aber keine anderen Systemdatenbanken umfasst. 

Lösung

Der in diesem KB eingeführte Fix überspringt die Heraufstufung zu MSDTC-Transaktion, wenn die Systemressourcendatenbank und eine Benutzerdatenbank, die Teil einer Verfügbarkeitsgruppe ist, die für PER_DB DTC aktiviert ist, an einer datenbankübergreifenden Transaktion innerhalb derselben SQL Server Instanz beteiligt sind.

Wenn es sich bei der ursprünglichen Fehlerursache, die oben aufgeführt ist, um eine datenbankübergreifende Transaktion handelt, die die Systemressourcendatenbank einbezieht, wird diese Lösung behoben. Manchmal sehen Benutzer möglicherweise die oben aufgeführten Fehler mit derselben zugrunde liegenden Ursache. Im Folgenden sind die Bedingungen aufgeführt, unter denen dieser Fix angewendet wird:

  • Eine Datenbank ist Teil einer Always On Verfügbarkeitsgruppe, die MIT DTC_SUPPORT = PER_DB aktiviert ist.

  • Eine datenbankübergreifende Transaktion umfasst diese Datenbank und die Systemressourcendatenbank in derselben SQL Server Instanz.

  • Innerhalb der datenbankübergreifenden Transaktion wird SAVE TRANSACTION verwendet, oder speicheroptimierte Tabellen sind beteiligt.

Eine solche Transaktion würde bei oben aufgeführten Fehlern ohne diesen Fix fehlschlagen. Mit diesem Fix sollte eine solche Transaktion fortgesetzt werden.

Hinweis: Dieser Fix behebt datenbankübergreifende Transaktionen, die die Systemressourcendatenbank betreffen, aber jede datenbankübergreifende Transaktion, die Benutzerdatenbanken umfasst und eine SAVE TRANSACTION-Anweisung enthält, schlägt weiterhin fehl und muss neu geschrieben werden.

Dieses Problem wurde im folgenden kumulativen Update für SQL Server behoben:

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:

Weitere Informationen

Weitere Informationen zu DTC_SUPPORT = PER_DB, speicheroptimierter Tabellen, SAVE TRANSACTION finden Sie unter den folgenden Links.

Datenbanktransaktionen innerhalb derselben SQL Server Instanz verknüpfen diesen Teil mit https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instance
speicheroptimierte Tabellen verknüpfen diesen Teil mit
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsTRANSAKTION SPEICHERN verknüpfen Sie diesen Teil mit https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks

https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.

Informationsquellen

Erfahren Sie mehr über die Terminologie , die Microsoft zum Beschreiben von Softwareupdates verwendet.

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×