Conectați-vă cu Microsoft
Conectați-vă sau creați un cont
Salut,
Selectați un alt cont.
Aveți mai multe conturi
Alegeți contul cu care doriți să vă conectați.

Simptome

Să presupunem că creați un Grup de disponibilitate utilizând clauza WITH DTC_SUPPORT = PER_DB în Microsoft SQL Server. Atunci când încercați să executați o instrucțiune SAVE TRANSACTION într-o tranzacție sau proceduri stocate în sistem, cum ar fi sp_executesql, primiți unul dintre următoarele mesaje de eroare:

Msg 627, Nivel 16, Stare 0, Număr
Linie Imposibil de utilizat SAVE TRANSACTION într-o tranzacție distribuită.
Msg 12324, Nivel 16, Stare 100, Număr
Linie Tranzacțiile distribuite (DTC) nu sunt acceptate cu tabele optimizate pentru memorie.
Eroare: 3933, Severitate: 16, Stare: 1.
Imposibil de promovat tranzacția ca tranzacție distribuită, deoarece există un punct de salvare activ în această tranzacție.

Cauză

Atunci când o bază de date din grupul Disponibilitate permanentă este activată pentru WITH DTC_SUPPORT = PER_DB, atât timp cât o tranzacție implică mai multe baze de date, tranzacția este promovată la tranzacție MSDTC în SQL Server 2016 SP2 și SQL Server 2017. Există limitări în tranzacțiile MSDTC, de exemplu, punctele de salvare nu pot fi utilizate, tabelele optimizate de memorie nu pot fi utilizate.

În unele situații, tranzacțiile inter-baze de date au loc nu pentru că utilizatorii au tranzacții care implică două baze de date de utilizator, ci pentru că tranzacțiile implică baza de date curentă și bazele de date de sistem (principal, tempdb, model, bază de date de resurse de sistem). Deoarece baza de date de resurse de sistem este de fapt doar în citire, nu este necesar să promovați la tranzacția MSDTC dacă o tranzacție inter-bază de date implică baza de date de resurse de sistem, dar nu și alte baze de date de sistem. 

Rezolvare

Remedierea introdusă în acest KB omite promovarea la tranzacția MSDTC dacă baza de date de resurse de sistem și o bază de date de utilizator care face parte dintr-un grup de disponibilitate activat pentru PER_DB DTC sunt implicate într-o tranzacție inter-bază de date în aceeași instanță de SQL Server.

Prin urmare, dacă cauza inițială a erorilor listate mai sus este tranzacția încrucișată a bazei de date care implică baza de date de resurse de sistem, această remediere o va rezolva. Uneori, utilizatorul poate vedea erorile listate mai sus cu aceeași cauză subiacentă. Următoarele listează condițiile în care se aplică această remediere:

  • O bază de date face parte dintr-un grup de disponibilitate Always On activat cu DTC_SUPPORT = PER_DB.

  • O tranzacție inter-bază de date implică această bază de date și baza de date de resurse de sistem în aceeași instanță SQL Server.

  • În interiorul tranzacției inter-baze de date, este utilizată SAVE TRANSACTION sau sunt implicate tabele optimizate din memorie.

O astfel de tranzacție ar eșua, cu erorile listate mai sus fără această remediere. Cu această remediere, o astfel de tranzacție ar trebui să continue.

Notă: Această remediere tratează tranzacțiile între baze de date care implică baza de date de resurse de sistem, dar orice tranzacție între baze de date care implică baze de date de utilizator și conține o instrucțiune SAVE TRANSACTION tot nu va reuși și trebuie rescrisă.

Această problemă este remediată în următoarea actualizare cumulativă pentru SQL Server:

Fiecare actualizare cumulativă nouă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în actualizarea cumulativă anterioară. Consultați cele mai recente actualizări cumulative pentru SQL Server:

Mai multe informații

Informații suplimentare despre DTC_SUPPORT = PER_DB, tabele optimizate pentru memorie, SAVE TRANSACTION se găsesc la următoarele linkuri.

Tranzacțiile bazei de date din aceeași instanță SQL Server leagă această parte la 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
Tabele optimizate pentru memorie leagă această parte la
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsSAVE TRANSACTION leagă această parte la 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

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.

Referințe

Aflați despre terminologia pe care o utilizează Microsoft pentru a descrie actualizările de software.

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.

Comunitățile vă ajută să adresați întrebări și să răspundeți la întrebări, să oferiți feedback și să primiți feedback de la experți cu cunoștințe bogate.

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?
Apăsând pe Trimitere, feedbackul dvs. va fi utilizat pentru a îmbunătăți produsele și serviciile Microsoft. Administratorul dvs. IT va avea posibilitatea să colecteze aceste date. Angajamentul de respectare a confidențialității.

Vă mulțumim pentru feedback!

×