Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Проблемы

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

Msg 627, Level 16, State 0, LineNumber
Не удается использовать SAVE TRANSACTION в распределенной транзакции.
Msg 12324, Level 16, State 100, LineNumber
Распределенные транзакции (DTC) не поддерживаются в таблицах, оптимизированных для памяти.
Ошибка: 3933, серьезность: 16, состояние: 1.
Не удается повысить уровень транзакции до распределенной транзакции, так как в этой транзакции есть активная точка сохранения.

Причина

Если для базы данных в группе доступности Always On включен параметр WITH DTC_SUPPORT = PER_DB, если транзакция включает несколько баз данных, транзакция повышается до транзакции MSDTC в SQL Server 2016 с пакетом обновления 2 (SP2) и SQL Server 2017. В транзакциях MSDTC существуют ограничения, например нельзя использовать точки сохранения, оптимизированные для памяти таблицы нельзя использовать.

В некоторых случаях транзакции между базами данных происходят не потому, что у пользователей есть транзакции, связанные с двумя пользовательскими базами данных, а потому, что транзакции включают текущую базу данных и системные базы данных (master, tempdb, model, system resource database). Так как база данных системных ресурсов фактически доступна только для чтения, не нужно повышать уровень до транзакции MSDTC, если транзакция между базами данных включает базу данных системных ресурсов, но не другие системные базы данных. 

Решение

Исправление, введенное в этой базе знаний, пропускает повышение до транзакции MSDTC, если база данных системных ресурсов и пользователь, в которую включена группа доступности для PER_DB DTC, участвуют в транзакции между базами данных в одном экземпляре SQL Server.

Таким образом, если исходной причиной ошибок, перечисленных выше, является транзакция между базами данных, включающими базу данных системных ресурсов, это исправление исправит ее. Иногда пользователь может видеть перечисленные выше ошибки с той же базовой причиной. Ниже перечислены условия, при которых применяется данное исправление.

  • База данных входит в группу доступности Always On с включенной функцией 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#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

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".

Ссылки

Сведения о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×