Не удалось создать экземпляр поставщика ole db oraoledb oracle для связанного сервера

Обновлено: 03.07.2024


Как настроить ODBC для доступа к Microsoft SQL Server

Я пытаюсь запустить openrowset с MS SQL Server на сервере Oracle.

Когда я выполняю следующую команду:

возникает следующая ошибка

Может ли кто-нибудь сказать мне, как я могу использовать openrowset с OraOLEDB.Oracle ?

Я использую 64-битную версию MS SQL Server и драйвера Oracle OLEDB.

редактировать

В SQL Server Enterprise Manager откройте \Server Objects\Linked Servers\Providers щелкните правой кнопкой мыши OraOLEDB.Oracle поставщика, выберите свойства и проверьте 'Allow inprocess' вариант. Восстановите свой связанный сервер и повторите попытку.

Вы также можете выполнить следующий запрос, если у вас нет доступа к SQL Server Management Studio:

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

MSDAINITIALIZE - это COM-класс, предоставляемый OLE DB. Этот класс может анализировать строки подключения OLE DB и загружать / инициализировать поставщика на основе значений свойств в строке подключения. MSDAINITILIAZE инициируется пользователями, подключенными к SQL Server. Если для подключения к SQL Server используется проверка подлинности Windows, то поставщик инициализируется под учетной записью пользователя, вошедшего в систему. Если вошедший в систему пользователь является логином SQL, то поставщик инициализируется под учетной записью службы SQL Server. В зависимости от типа используемого входа в систему необходимо предоставить соответствующие разрешения для MSDAINITIALIZE.

Хотя настройка In Process может решить немедленную проблему, это может быть не то, что вам нужно. Согласно Microsoft,

Создание экземпляра поставщика вне процесса SQL Server защищает процесс SQL Server от ошибок в поставщике. Когда поставщик создается вне процесса SQL Server, обновления или вставки, ссылающиеся на длинные столбцы (текст, ntext или изображение), не допускаются. - Документ свойств связанного сервера для SQL Server 2008 R2.

Лучший ответ - следовать руководству Microsoft и настроить безопасность MSDAINITIALIZE.

В частности, для ошибки 7302 я обнаружил в своем реестре при поиске OraOLEDB.Oracle, что расположение InprocServer32 неверно.

Если это так или вы не можете найти эту строку в реестре, вам придется установить или повторно зарегистрировать компонент.

Мне пришлось удалить ключ с уровня GUID, а затем найти ключ ProgID (OraOLEDB.Oracle) и удалить его тоже. (ProgID связывается с CLSID как пара).

Затем я повторно зарегистрировал OraOLEDB.Oracle, вызвав regsvr32.exe в ORAOLEDB * .dll.

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

Теперь у меня ошибка 7308, насчет однопоточных квартир; катится!

Аналогичная ситуация для следующей конфигурации:

  • Windows Server 2012 R2 Стандартный
  • MS SQL server 2008 (проверено также SQL 2012)
  • Клиент Oracle 10g (OracleDB v8.1.7)
  • Провайдер MSDAORA
  • Идентификатор ошибки: 7302

Мое решение:

  • Установить 32 бит MS SQL Server (64-битный MSDAORA не существует)
  • Установить 32 бит Патч Oracle 10g 10.2.0.5 (набор Совместимость с W7 на setup.exe)
  • Перезапустите службы SQL
  • Проверьте Разрешить в процессе у провайдера MSDAORA
  • Проверить подключение к связанному серверу Oracle

Получена та же ошибка на SQL Server 2017 при попытке установить связь с Oracle 12c. Мы смогли использовать Oracle SQL Developer для подключения к исходной базе данных, но связанный сервер продолжал выдавать ошибку 7302.

В конце концов, мы остановил все службы SQL, тогда переустановил компоненты ODAC. Запустили резервное копирование служб SQL и вуаля!

Читайте также: