Gælder for
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows

Symptomer

Antag, at du opretter en tilgængelighedsgruppe ved hjælp af delsætningen WITH DTC_SUPPORT = PER_DB i Microsoft SQL Server. Når du forsøger at udføre en SAVE TRANSACTION-sætning i en transaktion eller systemlagrede procedurer, f.eks . sp_executesql, modtager du en af følgende fejlmeddelelser:

Msg 627, niveau 16, tilstand 0, linjelinjenummer Save TRANSACTION kan ikke bruges i en distribueret transaktion.Msg 12324, niveau 16, tilstand 100, linjelinjenummer DTC (Distributed Transactions) understøttes ikke med hukommelsesoptimerede tabeller.Fejl: 3933, Alvorsgrad: 16, Tilstand: 1.Transaktionen kan ikke hæves til en distribueret transaktion, fordi der er et aktivt lagringspunkt i denne transaktion.

Årsag

Når en database i gruppen Altid tilgængelig er aktiveret for WITH DTC_SUPPORT = PER_DB, så længe en transaktion involverer flere databaser, overføres transaktionen til MSDTC-transaktion i SQL Server 2016 SP2 og SQL Server 2017. Der er begrænsninger i MSDTC-transaktioner, for eksempel kan save points ikke bruges, hukommelsesoptimerede tabeller kan ikke bruges.

I nogle situationer sker transaktioner på tværs af databaser ikke, fordi brugerne har transaktioner, der involverer to brugerdatabaser, men fordi transaktionerne involverer den aktuelle database og systemdatabaser (master, tempdb, model, systemressourcedatabase). Da systemressourcedatabasen faktisk er skrivebeskyttet, er det ikke nødvendigt at opgradere til MSDTC-transaktion, hvis en krydsdatabasetransaktion involverer systemressourcedatabase, men ikke andre systemdatabaser. 

Løsning

Den rettelse, der blev introduceret i denne KB, springer kampagnen over til MSDTC-transaktionen, hvis systemressourcedatabasen og en brugerdatabase, der er en del af en tilgængelighedsgruppe, der er aktiveret for PER_DB DTC, er involveret i en krydsdatabasetransaktion inden for samme SQL Server forekomst.

Hvis den oprindelige årsag til fejl, der er angivet ovenfor, er krydsdatabasetransaktion, der involverer systemressourcedatabase, løser denne rettelse den. Nogle gange kan brugeren få vist de fejl, der er angivet ovenfor, med den samme underliggende årsag. Følgende viser de betingelser, som denne rettelse gælder under:

  • En database er en del af en altid tilgængelig gruppe, der er aktiveret MED DTC_SUPPORT = PER_DB.

  • En krydsdatabasetransaktion omfatter denne database og systemressourcedatabasen i samme SQL Server forekomst.

  • Inden for krydsdatabasetransaktionen bruges SAVE TRANSACTION, eller hukommelsesoptimerede tabeller er involveret.

En sådan transaktion vil mislykkes med fejl, der er angivet ovenfor uden denne rettelse. Med denne rettelse bør en sådan transaktion fortsætte.

Bemærk! Denne rettelse løser transaktioner på tværs af databaser, der involverer systemressourcedatabasen, men enhver transaktion på tværs af databaser, der involverer brugerdatabaser og indeholder en SAVE TRANSACTION-sætning , vil stadig mislykkes og skal omskrives.

Dette problem er rettet i følgende kumulative opdatering til SQL Server:

Hver ny samlet opdatering til SQL Server indeholder alle hotfixes og alle de sikkerhedsrettelser, der var inkluderet i den tidligere akkumulerede opdatering. Se de seneste kumulative opdateringer til SQL Server:

Flere oplysninger

Du kan finde flere oplysninger om DTC_SUPPORT = PER_DB, hukommelsesoptimerede tabeller, SAVE TRANSACTION på følgende links.

Databasetransaktioner inden for samme SQL Server forekomst sammenkæder denne del med 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-instanceHukommelsesoptimerede tabeller sammenkæder denne del med https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsSAVE TRANSACTION sammenkæder denne del med 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 har bekræftet, at problemet findes i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".

Referencer

Få mere at vide om den terminologi , som Microsoft bruger til at beskrive softwareopdateringer.

Har du brug for mere hjælp?

Vil du have flere indstillinger?

Udforsk abonnementsfordele, gennemse kurser, få mere at vide om, hvordan du sikrer din enhed og meget mere.