Simptomai
Tarkime, kad kuriate pasiekiamumo grupę naudodami DTC_SUPPORT = PER_DB sąlygą "Microsoft SQL Server". Kai bandote atlikti operaciją įrašyti operacijosarba sistemos saugomas procedūras , pvz., sp_executesql,gaunate vieną iš šių klaidos pranešimas:
MSG 627, lygis 16, būsena 0, linijinė LineNumber Paskirstytoje operacijoje negalima naudoti įrašymo operacijos. MSG 12324, lygis 16, būsena 100, eilutės LineNumber Paskirstytos operacijos (DTC) nepalaikomos su optimizuotu atminties lentelėmis. Klaida: 3933, sunkumas: 16, būsena: 1. Negalima reklamuoti operacijos į paskirstytą operaciją, nes šioje operacijoje yra aktyvus įrašymo taškas.
Priežastis
Kai duomenų bazė, esanti visada prieinamumo grupėje, yra įgalinta su DTC_SUPPORT = PER_DB, kol operacija apima kelias duomenų bazes, operacija yra skatinama į MSDTC operaciją "SQL Server" 2016 SP2 ir "SQL Server 2017". Yra apribojimų MSDTC operacijose, pvz., negalima naudoti atminties optimizuotų lentelių.
Kai kuriose situacijose kryžminės duomenų bazės operacijos įvyksta ne todėl, kad vartotojai turi operacijas, susijusias su dviem vartotojų duomenų bazėmis, bet todėl, kad operacijos apima dabartinę duomenų bazę ir sistemos duomenų bazes (Master, tempdb, modelis, sistemos išteklių duomenų bazė). Kadangi sistemos išteklių duomenų bazė iš tikrųjų yra tik skaitoma, nebūtina skatinti MSDTC operacijos, jei kryžminė duomenų bazės operacija apima sistemos išteklių duomenų bazę, bet ne kitas sistemos duomenų bazes.
Sprendimas
Pataisymas, įvestas šiame KB, pereina į MSDTC operaciją, jei sistemos išteklių duomenų bazė ir vartotojų duomenų bazė yra įgalintos prieinamumo grupės, esančios PER_DB DTC, įtraukimas į kryžminę duomenų bazės operaciją tame pačiame SQL serverio egzemplioriuje.
Todėl jei anksčiau nurodytos klaidos priežastis yra kryžminės duomenų bazės operacija su sistemos išteklių duomenų baze, ši pataisa bus išspręsta. Kartais vartotojas gali matyti anksčiau išvardytas klaidas su ta pačia priežastimi. Toliau nurodomos sąlygos, kurioms esant ši pataisa taikoma:
-
Duomenų bazė yra visada prieinamumo grupėje, kuri įgalinta DTC_SUPPORT = PER_DB.
-
Kryžminė duomenų bazės operacija apima šią duomenų bazę ir sistemos išteklių duomenų bazę tame pačiame SQL serverio egzemplioriuje.
-
Atliekant kryžminę duomenų bazės operaciją, naudojama įrašymo operacija arba naudojamos atminties optimizuotos lentelės.
Toks sandoris žlugs aukščiau nurodytose klaidoms be šios pataisos. Naudojant šią pataisą, tokia operacija turėtų būti tęsiama.
Pastaba: šiame pataisyme aptariamos kryžminės duomenų bazės operacijos, kurios apima sistemos išteklių duomenų bazę, tačiau bet koks kryžminis duomenų bazės sandoris, kuriame yra vartotojų duomenų bazės, ir jame yra įrašymo operacijos patvirtinimas, vis tiek bus nesėkmingas ir turi būti parašytas iš naujo.
Ši problema išspręsta šį kaupiamąjį naujinimą SQL Server:
Kiekvienas naujas Kaupiamasis naujinimas, skirtas "SQL Server", yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio kaupiamojo naujinimo. Peržiūrėkite naujausius kaupiamuosius SQL serverio naujinimus:
Naujausias Kaupiamasis naujinimas, skirtas "SQL Server 2017"
Naujausias Kaupiamasis naujinimas, skirtas "SQL Server 2016"
Daugiau informacijos
Papildoma informacija apie DTC_SUPPORT = PER_DB, optimizuotos atminties lenteles, įrašyti operacijas galima rasti toliau pateiktuose saituose.
Duomenų bazės operacijos, esančios tame pačiame SQL serverio egzemplioriuje , susieja šiądalį su "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"atminties optimizuotais lentelėmis , susiekite šią dalį su " https://docs.Microsoft.com/en-us/SQL/Relational-Databases/in-Memory-OLTP/transactions-with-Memory-Optimized-tables?View=SQL-Server-2017#limitations"įrašyti operacijos saitą į https://docs.Microsoft.com/en-us/SQL/t-SQL/Language-Elements/save-Transaction-Transact-SQL?View=SQL-Server-2017#remarks
Statusą
"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.
Nuorodos
Sužinokite apie terminologiją "Microsoft" naudoja programinės įrangos naujinimams apibūdinti.