Невозможно начать распределенную транзакцию :Связанный сервер -> Доступ к базе данных

Технические характеристики:

  • SQL-сервер 2008
  • Сервер 2008 R2 64 бит
  • База данных MS Access

Что работает:

  • Я настроил подключение связанного сервера к базе данных Access, установив компоненты данных офисного доступа и создав системный DSN и еще много чего. который находится в каталоге на том же сервере.
  • Мне удалось запросить данные через openquery.

    ВЫБЕРИТЕ *ИЗ ОТКРЫТОГО ЗАПРОСА (LINKEDHELL, «ВЫБЕРИТЕ *ИЗ [D :\path\mordor.mdb].Orcs»)

  • Я могу вставлять/обновлять/удалять через openquery (из Sql Management Studio)

Что не работает:

Я создал базу данных, которая предоставляет представление, обертывающее выражение openquery. Это позволяет моим приложениям не обращать внимания на тот факт, что они запрашиваются через соединение со связанным сервером, и позволяет мне использовать ORM. Показательный пример :Entity Framework.

Однако, пока извлечение данных работает, обновление/вставка/удаление не будут. Я потратил довольно много времени на то, чтобы убедиться, что MSDTC настроен правильно, но без кубиков.

Что я пробовал

МСДТК

  • Разрешен доступ к сети DTC
  • Разрешить входящие/исходящие
  • Настроенный брандмауэр
  • Включенные транзакции XA
  • Дал аккаунту под которым работает DTC доступ к.mdb
  • Перезапустил Sql Server после внесения этих настроек

Другое

  • Настроена безопасность связанного сервера :Создано сопоставление между пользователем sql и учетной записью локального администратора, поэтому, когда я вхожу в систему с этим пользователем sql, он использует учетную запись локального администратора для подключения к базе данных доступа.
  • Включить продвижение распределенных транзакций для RPC :False

Ошибка, которую я получаю:

OLE DB provider "MSDASQL" for linked server "LINKEDHELL" returned message "[Microsoft][ODBC Microsoft Access Driver]Invalid attribute/option identifier ".
Msg 7391, Level 16, State 2, Line 4
The operation could not be performed because OLE DB provider "MSDASQL" for linked server "LINKEDHELL" was unable to begin a distributed transaction.

Я могу просто воссоздать это, выполнив это из Sql Management Studio

begin distributed transaction

//anything that queries the linked server

commit transaction

Так что я пропустил? Я читал, что распределенные транзакции поддерживаются драйвером ODBC, но не уверен, поддерживает ли это база данных ACCESS. Так что если кто-то может хотя бы подтвердить это. Это поможет.

6
задан Danthar 20 July 2012 в 08:21
поделиться