KB4092554 – LØSNING: Fejl 627 eller 12324 opstår, når transaktioner på tværs af databaser opgraderes til distribuerede transaktioner i SQL Server tilgængelighedsgruppe

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, får du en af følgende fejlmeddelelser:

Bemærk

Msg 627, Level 16, State 0, Line LineNumber
Kan ikke bruge SAVE TRANSACTION i en distribueret transaktion.
Msg 12324, niveau 16, stat 100, linjenummer
Distribuerede transaktioner (DTC) understøttes ikke med hukommelsesoptimerede tabeller.
Fejl: 3933, Alvorsgrad: 16, Tilstand: 1.
Kan ikke hæve transaktionen til en distribueret transaktion, fordi der er et aktivt lagringspunkt i denne transaktion.

Årsag

Når en database i AlwaysOn-tilgængelighedsgruppen er aktiveret for WITH DTC_SUPPORT = PER_DB, opgraderes transaktionen til MSDTC-transaktionen i SQL Server 2016 SP2 og SQL Server 2017, så længe en transaktion involverer flere databaser. Der er begrænsninger i MSDTC-transaktioner, f.eks. kan lagringspunkter 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 hæve til MSDTC-transaktion, hvis en transaktion på tværs af en database involverer en systemressourcedatabase, men ikke andre systemdatabaser.

Løsning

Den rettelse, der er introduceret i denne KB, springer forfremmelsen til MSDTC-transaktionen over, hvis systemressourcedatabasen og en brugerdatabase, som er en del af en tilgængelighedsgruppe, der er aktiveret for PER_DB DTC, er involveret i en transaktion på tværs af en database inden for den samme SQL Server forekomst.

Så hvis den oprindelige årsag til de fejl, der er angivet ovenfor, er transaktioner på tværs af databaser, der involverer systemressourcedatabase, vil denne rettelse løse problemet. Nogle gange kan brugeren få vist de fejl, der er angivet ovenfor, med samme underliggende årsag. Følgende angiver de betingelser, som denne rettelse gælder under:

  • En database er en del af en Always On-tilgængelighedsgruppe, der er aktiveret MED DTC_SUPPORT = PER_DB.
  • En transaktion på tværs af en database involverer denne database og systemressourcedatabasen i den samme SQL Server-forekomst.
  • I transaktionen på tværs af databaser bruges SAVE TRANSACTION, eller hukommelsesoptimerede tabeller er involveret.

En sådan transaktion ville mislykkes med de fejl, der er angivet ovenfor, uden denne rettelse. Med denne rettelse skulle 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:

Om kumulative opdateringer til SQL Server:

Hver ny kumulativ opdatering til SQL Server indeholder alle de hotfixes og alle de sikkerhedsrettelser, der fulgte med den forrige kumulative opdatering. Se de seneste kumulative opdateringer til SQL Server:

Flere oplysninger

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

Databasetransaktioner inden for samme SQL Server forekomst knytter denne del til 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
Hukommelsesoptimerede 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#limitations
GEM TRANSAKTION sammenkæd denne del for at 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 dette er et problem i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".

Referencer

Læs mere om den terminologi , Microsoft bruger til at beskrive softwareopdateringer.