Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Ознаки

Припустімо, що створення групи доступності за допомогою речення WITH DTC_SUPPORT = PER_DB в Microsoft SQL Server. Під час спроби виконати інструкцію SAVE TRANSACTION в транзакції або системи, збережені процедури, наприклад sp_executesql, з'являється одне з таких повідомлень про помилку:

Msg 627, рівень 16, стан 0, номер рядка
Не можна використовувати функцію SAVE TRANSACTION у розподіленій транзакції.
Msg 12324, рівень 16, стан 100, номер рядка
Розподілені транзакції (DTC) не підтримуються з таблицями, оптимізованими пам'яттю.
Помилка: 3933, серйозність: 16, стан: 1.
Не вдалося підвищити рівень транзакції до розподіленої транзакції, оскільки в цій транзакції є активна точка збереження.

Причина

Якщо для функції WITH DTC_SUPPORT = PER_DB увімкнуто базу даних у групі завжди ввімкнуто доступність, якщо транзакція включає кілька баз даних, транзакція сприяє транзакції MSDTC у SQL Server 2016 із пакетом оновлень 2 (SP2) і SQL Server 2017. У транзакціях MSDTC є обмеження, наприклад, не можна використовувати точки збереження, не можна використовувати таблиці з оптимізованою пам'яттю.

У деяких випадках перехресні транзакції бази даних відбуваються не тому, що користувачі мають транзакції, пов'язані з двома базами даних користувачів, а тому, що в транзакціях використовується поточна база даних і системні бази даних (головний, tempdb, модель, база даних системних ресурсів). Оскільки база даних системних ресурсів насправді доступна лише для читання, не потрібно рекламувати транзакцію MSDTC, якщо транзакція між базами даних включає базу даних ресурсів системи, але не інші системні бази даних. 

Спосіб вирішення

Виправлення, введене в цьому KB, пропускає підвищення до транзакції MSDTC, якщо системна база даних ресурсів і база даних користувачів, яка входить до групи доступності, увімкнутої для PER_DB DTC беруть участь у транзакції між базами даних у тому ж екземплярі SQL Server.

Таким чином, якщо вихідною причиною помилок, наведених вище, є перехресна транзакція бази даних із базою даних системних ресурсів, це виправлення буде вирішено. Іноді в наведених вище помилках можуть виникати помилки з тією ж основною причиною. Нижче наведено умови, за яких застосовується це виправлення:

  • База даних входить до групи завжди ввімкнутої доступності, увімкнутої with 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#limitationsзберегти транзакцію зв'яжіть цю частину з 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. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×