Связанный SQL-сервер Azure из локального SQL Server — исключение MSDTC

  1. У меня есть база данных SQL в Azure.
  2. Затем создал связанный сервер для базы данных SQL из локального SQL Server.
  3. Я использую таблицу, присутствующую в базе данных SQL Azure в SP в локальной базе данных SQL.

Эта настройка работает нормально, за исключением случаев, когда запущена служба MSDTC.

Когда служба «DTC» запущена, я получаю следующее исключение

Top level exception message : System.ServiceModel.FaultException: The OLE DB provider "SQLNCLI11" for linked server "Azure_SQLDb" reported an error. One or more arguments were reported invalid by the provider. The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "Azure_SQLDb" was unable to begin a distributed transaction. OLE DB provider "SQLNCLI11" for linked server "Azure_SQLDb" returned message "The parameter is incorrect.".

Мне не нужен связанный сервер Azure для какой-либо транзакции DTC, поэтому я попытался отключить эту опцию в свойствах связанного сервера, чтобы посмотреть, поможет ли это, но это не помогло.

Связанный SQL-сервер Azure из локального SQL Server — исключение MSDTC

Я читал, что у нас не может быть подключения MSDTC к лазурной базе данных SQL, что хорошо для меня, поскольку у меня не будет никаких транзакций, связанных между моей локальной базой данных и лазурной базой данных sql.

Я хотел бы иметь решение для запуска службы DTC, работающей на моем сервере, когда есть связанное серверное соединение с azure sql db.

укажите, какой запрос вы выполняете и где. Из базы данных SQL Azure он должен иметь возможность выбирать из базы данных SQL Server (при условии подключения к сети и т. д.). Для SQL Server у вас должна быть возможность иметь «DTC» с SQL Azure в качестве единой точки обновления, если это последний коммиттер. Основное техническое требование заключается в том, чтобы сегодня между ними не осуществлялась координация MSDTC. Какую команду вы выполняете? Вставить/обновить/удалить или выбрать вероятные значения

Conor Cunningham MSFT 30.01.2019 03:38

Я запускаю запрос на выборку в таблице azure db в SP, присутствующем в локальной базе данных SQL.

dks 30.01.2019 03:46

Рассмотрите возможность репликации этой таблицы в локальной среде с помощью SQL Data Sync?

Alberto Morillo 30.01.2019 13:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
1 230
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

База данных SQL Azure не поддерживает распределенные транзакции.

Распределенные транзакции в базе данных SQL

База данных SQL не поддерживает распределенные транзакции, т. е. транзакции с несколькими диспетчерами транзакций (несколько ресурсов). Для получения дополнительной информации см. Распределенные транзакции (ADO.NET) . Это означает, что база данных SQL не позволяет координатору распределенных транзакций Microsoft (MS DTC) делегировать обработку распределенных транзакций. Из-за этого вы не можете использовать ADO.NET или MSDTC для фиксации или отката одной транзакции, которая охватывает несколько баз данных SQL или комбинацию базы данных SQL и локального SQL Server.

Более подробную информацию вы можете увидеть здесь: Обработка транзакций в базе данных Windows Azure SQL. Ссылочный большой двоичный объект: Распределенная транзакция, аналогичная MSDTC, между SQL Server Azure и MSMQ\queue Azure.

Я думаю, что никакое решение не может вам помочь.

Надеюсь, это поможет вам.

Ответ принят как подходящий

@dks Проблема, с которой вы сталкиваетесь, не является нормальной - обычно это происходит, только если ваше приложение пытается запустить распределенную транзакцию для координации изменений состояния. (Иногда приложения используют распределенные транзакции для координации изменения состояния между приложением и уровнем данных, поэтому, возможно, это происходит в вашем случае). Если вы используете EF или аналогичный, убедитесь, что он не запускает DTC от вашего имени.

В любом случае я предлагаю вам перейти на последнюю версию поставщика OLEDB. В прошлом году Microsoft представила обновленный провайдер, и вы можете скачать его здесь:

https://www.microsoft.com/en-us/download/details.aspx?id=56730

Другие вопросы по теме