Applies ToSQL 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

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:

Kaupiamasis naujinimas 7 SQL serverio 2017       

Kaupiamasis naujinimas 1 SQL serverio 2016 SP2

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

https://docs.microsoft.com/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

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.

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.