Sümptomid
Oletagem, et luua kättesaadavus rühma, kasutades DTC_SUPPORT = PER_DB klausel Microsoft SQL Server. Kui proovite salvestada tehingu lauset tehingus või süsteemis talletatud protseduurides (nt sp_executesql),you receive one of the following error messages:kuvatakse üks järgmistest tõrketeadetest.
MSG 627, tase 16, olek 0, rea LineNumber Ei saa kasutada Distributed transactions salvestatud TEHINGUt. MSG 12324, tase 16, olek 100, rea LineNumber Distributed transactions (DTC) pole mälu optimeeritud tabelite abil toetatud. Tõrge: 3933; raskusaste: 16; olek: 1. Tehingut ei saa liigendatud tehinguks edendada, kuna selles tehingus on aktiivne salvestuskoht.
Põhjus
Kui jaotises kättesaadavus on alati lubatud andmebaas DTC_SUPPORT = PER_DB, kui tehinguga kaasneb mitu andmebaasi, edutatakse tehing SQL Server 2016 SP2 ja SQL Server 2017 tehingute MSDTC. MSDTC tehingutes on piiranguid (nt punkte ei saa kasutada), ei saa mälu optimeeritud tabeleid kasutada.
Mõnes olukorras võib juhtuda, et andmebaasi tehingud ei juhtu, sest kasutajatel on kahe kasutaja andmebaasidega seotud tehingud, kuid kuna tehingud hõlmavad praegust andmebaasi ja süsteemi andmebaase (juhtslaid, tempdb, mudel, süsteemi ressurssi andmebaas). Kuna süsteemi ressurssi andmebaas on tegelikult kirjutuskaitstud, pole vaja MSDTC tehingut edendada, kui piiriülese andmebaasi tehing hõlmab süsteemi ressursside andmebaasi, kuid mitte muid süsteemi andmebaase.
Lahendus
Selles TEABEBAASis toodud parandus jätab vahele MSDTC tehingu, kui süsteemi ressurssi andmebaas ja kasutaja andmebaas, mis on osa PER_DB DTC jaoks lubatud kättesaadavuse rühmast, on kaasatud sama SQL serveri eksemplaris olevasse risti andmebaasi tehingusse.
Seega, kui eespool loetletud vigade algne põhjus on piiriülese andmebaasi tehing, mis hõlmab süsteemi ressursside andmebaasi, lahendab see lahendus selle. Mõnikord võib kasutaja näha ülaltoodud tõrkeid sama põhjuse alusel. Järgmises loendis on tingimused, mille alusel see parandus kehtib.
-
Andmebaas on osa DTC_SUPPORT = PER_DB lubatud alati kättesaadavuse grupist.
-
Piiriülese andmebaasi tehing hõlmab seda andmebaasi ja süsteemi ressurssi andmebaasi sama SQL serveri eksemplaris.
-
Piiriülese andmebaasi tehingus kasutatakse TEHINGUt, SALVESTAtakse tehing või on kaasatud mälu optimeeritud tabeleid.
Sellist tehingut ei saa lahendada ülaltoodud vigadega. Selle parandusega tuleks tehing jätkata.
Märkus: see lahendus kõrvaldab andmebaasi kanded, mis hõlmavad süsteemi ressursside andmebaasi, kuid mis tahes andmebaasiga seotud tehingut, mis sisaldab kasutajate andmebaase ja sisaldab salvestamisega seotud kannet , jääb alles ja see tuleb uuesti kirjutada.
See probleem on lahendatud järgmises SQL serveri koondvärskenduses:
Iga uus koondvärskenduses SQL Server sisaldab kõiki käigultparandused ja kõik turvaparandusi, mis kuulusid eelmise koondvärskenduse. Vaadake SQL serveri kumulatiivseid värskendusi.
Lisateave
Lisateavet DTC_SUPPORT = PER_DB, mälu optimeeritud tabelite kohta leiate järgmistest linkidest.
Sama SQL serveri eksemplaris olevad andmebaasi kanded lingivadselle osahttps://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-instancemälu optimeeritud tabelitega , mis seovad selle osa https://docs.microsoft.com/en-US/SQL/relational-Databases/In-Memory-OLTP/transactions-with-Memory-Optimized-Tables?View=SQL-Server-2017#limitationsselle osa https://docs.microsoft.com/en-US/SQL/t-SQL/Language-Elements/Save-Transaction-Transact-SQL?View=SQL-Server-2017#remarks
Olek
Microsoft on kinnitanud, et see probleem esineb jaotises "kehtib järgmiste toodete kohta" loetletud Microsofti toodetes.
Viited
Siit saate teada, Kuidas Microsoft kasutab tarkvaravärskenduste kirjeldamiseks.