Преминаване към основното съдържание
Поддръжка
Влизане с Microsoft
Влезте или създайте акаунт.
Здравейте,
Изберете друг акаунт.
Имате няколко акаунта
Изберете акаунта, с който искате да влезете.

Симптоми

Да предположим, че създавате група за достъпност с помощта на клаузата WITH DTC_SUPPORT = PER_DB в Microsoft SQL Server. Когато се опитате да изпълните команда SAVE TRANSACTION в транзакция или система съхранени процедури като sp_executesql, получавате едно от следните съобщения за грешка:

Msg 627, ниво 16, състояние 0, lineNumber
Не може да се използва SAVE TRANSACTION в рамките на разпределена транзакция.
Msg 12324, ниво 16, състояние 100, lineNumber
Разпределени транзакции (DTC) не се поддържат с оптимизирани в паметта таблици.
Грешка: 3933, тежест: 16 състояние: 1.
Транзакцията не може да се повиши в разпределена транзакция, защото има активна точка на записване в тази транзакция.

Причина

Когато дадена база данни в групата за наличност "Винаги включена" е разрешена за С DTC_SUPPORT = PER_DB, докато една транзакция включва множество бази данни, транзакцията се повишава до транзакция на MSDTC в SQL Server 2016 SP2 и SQL Server 2017 г. Има ограничения в транзакциите на MSDTC, например не могат да се използват точки за записване, оптимизирани за паметта таблици не могат да се използват.

В някои случаи кръстосаните транзакции на бази данни не се случват, защото потребителите имат транзакции, включващи две потребителски бази данни, а защото транзакциите включват текущата база данни и системните бази данни (главна, tempdb, модел, база данни за системни ресурси). Тъй като базата данни за системни ресурси всъщност е само за четене, не е необходимо да се повишава до транзакция в MSDTC, ако кръстосаната транзакция с база данни включва системна ресурсна база данни, но не и други системни бази данни. 

Решение

Корекцията, въведена в тази KB, пропуска повишението на MSDTC транзакция, ако системната база данни за ресурси и потребителска база данни, която е част от група за достъпност, разрешена за PER_DB DTC, са включени в транзакция между бази данни в рамките на една и съща SQL Server екземпляр.

Следователно, ако първоначалната причина за грешките, изброени по-горе, е кръстосана транзакция в базата данни, включваща база данни със системни ресурси, тази корекция ще я адресира. Понякога потребителят може да види грешките, изброени по-горе, със същата основна причина. По-долу са изброени условията, при които се прилага тази корекция:

  • Базата данни е част от група за наличност винаги включена, разрешена с DTC_SUPPORT = PER_DB.

  • Кръстосаната транзакция в база данни включва тази база данни и базата данни със системни ресурси в един и същ екземпляр на SQL Server.

  • Вътре в транзакцията между базите данни се използва SAVE TRANSACTION или са включени оптимизирани за паметта таблици.

Тази транзакция ще бъде неуспешна с грешките, изброени по-горе без тази корекция. С тази корекция такава транзакция трябва да продължи.

Забележка: Тази корекция адресира транзакции между бази данни, които включват базата данни със системни ресурси, но всяка транзакция между бази данни, която включва потребителски бази данни и съдържа команда SAVE TRANSACTION , все още ще бъде неуспешна и трябва да бъде пренаписана.

Този проблем е коригиран в следната кумулативна актуализация за SQL Server:

Всяка нова кумулативна актуализация за SQL Server съдържа всички горещи поправки и всички корекции на защитата, които са били включени в предишната кумулативна актуализация. Прегледайте най-новите кумулативни актуализации за SQL Server:

Повече информация

Допълнителна информация за DTC_SUPPORT = PER_DB, оптимизирани за паметта таблици, SAVE TRANSACTION може да бъде намерена в следващите връзки.

Транзакциите на бази данни в рамките на един и същ екземпляр на SQL Server свързват тази част с 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 Таблици,
оптимизирани за паметта, свързват тази част към
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsSAVE TRANSACTION свържете тази част към 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

Статут

Microsoft потвърди, че това е проблем в продуктите на Microsoft, които са изброени в раздела "Отнася се за".

Препратки

Научете повече за терминологията , която Microsoft използва за описване на актуализациите на софтуера.

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.

Беше ли полезна тази информация?

Доколко сте доволни от качеството на езика?
Какво е повлияло на вашия потребителски опит?
Като натиснете „Подаване“, вашата обратна връзка ще се използва за подобряване на продуктите и услугите на Microsoft. Вашият ИТ администратор ще може да събира тези данни. Декларация за поверителност.

Благодарим ви за обратната връзка!

×