KB4092554: fouten 627 of 12324 treden op wanneer meerdere databasetransacties worden gepromoveerd tot Distributed transacties in de beschikbaarheid van SQL Server-groep

Symptomen

Stel dat u een Beschikbaarheidsgroep maakt met behulp van de component WITH DTC_SUPPORT = PER_DB in Microsoft SQL Server. Wanneer u probeert om een transactie op te slaan in een transactie of in een systeem opgeslagen procedure zoals sp_executesql,wordt een van de volgende foutberichten weergegeven:

Msg 627, niveau 16, State 0, regel LineNumber U kunt geen transactie opslaan binnen een gedistribueerde transactie gebruiken. Msg 12324, niveau 16, staat 100, regel LineNumber Distributed Transactions (DTC) worden niet ondersteund met geoptimaliseerde geheugen tabellen. Fout: 3933, Ernst: 16, status: 1. Kan de transactie niet promoten in een gedistribueerde transactie omdat in deze transactie een actief opslagpunt is.

Oorzaak

Wanneer een database in de beschikbaarheid van een database voor DTC_SUPPORT = PER_DBis ingeschakeld, en de transactie meerdere databases omvat, wordt de transactie gepromoveerd tot MSDTC-transactie in SQL Server 2016 SP2 en SQL Server 2017. Er gelden beperkingen voor MSDTC-transacties, bijvoorbeeld punten opslaan, kunnen niet worden gebruikt, niet-geoptimaliseerde geheugen tabellen.

In sommige situaties gebeurt dit niet omdat gebruikers transacties hebben met een database van twee gebruikers, maar omdat voor de transacties de huidige database en de systeemdatabases (Master, tempdb, model en System Resource database) bestaan. Aangezien de systeemresource database eigenlijk alleen-lezen is, is het niet nodig om te promoten voor de MSDTC-transactie als een database voor een andere database systeem bronnen bevat, maar geen andere systeemdatabases.

Oplossing

Met de oplossing die in deze KB is geïntroduceerd, slaat u de aanbieding over naar MSDTC-transactie als systeemresource database en een gebruikersdatabase die deel uitmaakt van een database die is ingeschakeld voor PER_DB DTC bij een transactie van meerdere databases in dezelfde SQL Server-sessie.

Wanneer de oorspronkelijke oorzaak van de fouten die hierboven worden vermeld, een database met systeembronnen bevat, wordt deze oplossing in verband met de systeemresource-database opgelost. Soms zien gebruikers de hierboven vermelde fouten met dezelfde onderliggende oorzaak. Hieronder ziet u een overzicht van de voorwaarden waaronder deze oplossing van toepassing is:

  • Een database maakt deel uit van een beschikbare groep met DTC_SUPPORT = PER_DB.

  • Voor een database voor meerdere databases geldt deze database en de systeemresource database in dezelfde SQL Server-sessie.

  • In de transactie met meerdere databases wordt transactie opslaan gebruikt of tabellen die zijn geoptimaliseerd voor geheugen betrokken.

Deze transactie mislukt bij fouten die hierboven zijn vermeld, zonder deze oplossing. Met deze oplossing wordt de transactie voortgezet.

Opmerking: deze oplossing is bedoeld voor transacties met meerdere databases die de systeemresource database bevatten, maar een trans database-transactie die gebruikersdatabases bevat, en die een instructie voor het opslaan van trans acties bevat, mislukt en moet worden herschreven.

Dit probleem is opgelost in de volgende cumulatieve update voor SQL Server:

Cumulatieve update 7 voor SQL Server 2017       

Cumulatieve update 1 voor SQL Server 2016 SP2

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingsoplossingen die zijn opgenomen in de vorige cumulatieve update. Bekijk de nieuwste cumulatieve updates voor SQL Server:

Nieuwste cumulatieve update voor SQL Server 2017

Nieuwste cumulatieve update voor SQL Server 2016

Meer informatie

Meer informatie over DTC_SUPPORT = PER_DB, tabellen geoptimaliseerd voor geheugen, transactie opslaan vindt u op de volgende koppelingen:

Database transacties binnen hetzelfde SQL Server-exemplaar koppel dit onderdeel aan dehttps://docs.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-instancetabellen https://docs.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 geheugen-geoptimaliseerde tabellenkoppel dit deel aan de https://docs.Microsoft.com/en-US/SQL/relational-databases/in-Memory-OLTP/transactions-with-Memory-Optimized-Tables?View=SQL-Server-2017#limitationstransactie opslaan dit onderdeel in https://docs.Microsoft.com/en-US/SQL/t-SQL/Language-Elements/Save-Transaction-Transact-SQL?View=SQL-Server-2017#remarks

https://docs.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 heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.

Verwijzingen

Informatie over de terminologie die door Microsoft wordt gebruikt om software-updates te beschrijven.

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Bedankt voor uw feedback.

Hartelijk dank voor uw feedback! Het lijkt ons een goed idee om u in contact te brengen met een van onze Office-ondersteuningsagenten.

×