Не удалось создать экземпляр поставщика ole db oraoledb oracle для связанного сервера
Создает связанный сервер. Связанные серверы позволяют выполнять распределенные разнородные запросы к источникам данных OLE DB. После создания связанного сервера с помощью sp_addlinkedserver распределенные запросы могут выполняться на этом сервере. Если связанный сервер определен в качестве экземпляра SQL Server, на нем могут выполняться удаленные хранимые процедуры.
Выполнены изменения, требующие перенастройки издателя
Для изменения таблиц метаданных репликации или процедур необходимо удалить и перенастроить издатель. Чтобы перенастроить издатель, необходимо удалить издатель и настроить его вновь при помощи среды SQL Server Management Studio, Transact-SQL или объектов RMO. Дополнительные сведения о настройке издателя см. в разделе Настройка издателя Oracle.
Удаление издателя Oracle (среда SQL Server Management Studio )
Подключитесь к распространителю для издателя Oracle в среде SQL Server Management Studio , а затем раскройте узел сервера.
Щелкните правой кнопкой мыши Репликация, затем щелкните Свойства распространителя.
На странице Издатели диалогового окна Свойства распространителя снимите флажок для издателя Oracle.
Распространителю SQL Server не удается подключиться к экземпляру базы данных Oracle
Если распространителю SQL Server не удается подключиться к издателю Oracle, необходимо убедиться в следующем:
Необходимое программное обеспечение Oracle установлено на распространителе.
База данных Oracle доступна в режиме в «сети» и к ней не удается подключиться при помощи такого средства, как SQL*Plus.
Имя входа, которое репликация использует для подключения к издателю Oracle, имеет достаточно разрешений. Дополнительные сведения см. в статье Настройка издателя Oracle.
Имена TNS, определенные во время настройки издателя Oracle, приводятся в файле tnsnames.ora.
Используются правильные значения Oracle Home и пути. Даже если есть только один набор исполняемых файлов Oracle, установленных на распространителе SQL Server , проверьте, чтобы были правильно установлены переменные среды, относящиеся к Oracle Home. При изменении значений переменных среды необходимо остановить и перезапустить SQL Server , чтобы эти изменения вступили в действие.
Дополнительные сведения о настройке и проверке подключения см. в подразделе "Установка и настройка клиентского сетевого программного обеспечения Oracle на распространителе SQL Server" раздела Настройка издателя Oracle.
Возникает ошибка SQL Server 21684
«Разрешений, связанных с именем входа администратора для издателя Oracle «%s», недостаточно».
Чтобы проверить разрешения, предоставленные пользователю, выполните следующий запрос: SELECT * from session_privs . Результат выполнения должен быть аналогичен следующему:
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM
Проблемы, связанные с разрешениями для пользовательской схемы репликации
Пользовательская схема репликации должна иметь разрешения, описанные в подразделе "Создание пользовательской схемы вручную" раздела Настройка издателя Oracle.
З. Создание связанного сервера с Управляемым экземпляром SQL с помощью аутентификации Azure AD с использованием управляемого удостоверения
Чтобы создать связанный сервер с управляемым удостоверением аутентификации, выполните следующую инструкцию T-SQL. Метод проверки подлинности использует ActiveDirectoryMSI в @provstr параметре. При необходимости можно использовать @locallogin = NULL для разрешения всех локальных имен входа.
если Azure SQL Управляемый экземпляр управляемое удостоверение (прежнее название — управляемое удостоверение службы) добавляется в качестве имени входа в удаленный управляемый экземпляр, проверка подлинности управляемого удостоверения возможна для связанного сервера, созданного как в предыдущем примере. Поддерживаются как назначенные системой, так и управляемые удостоверения, назначенные пользователем.
Если задано Основное удостоверение, оно будет использоваться, в противном случае будет использоваться управляемое удостоверение, назначенное системой. Если управляемое удостоверение создается повторно с тем же именем, необходимо повторно создать имя входа на удаленном экземпляре, так как новый идентификатор приложения управляемого удостоверения и идентификатор безопасности субъекта-службы Управляемый экземпляр больше не совпадают. Чтобы проверить совпадение этих двух значений, преобразуйте SID в идентификатор приложения с помощью следующего запроса.
Е. использование поставщик OLE DB для DB2 (Майкрософт)
В следующем примере показано создание связанного сервера с именем DB2 , который использует Microsoft OLE DB Provider for DB2 .
Возникает ошибка SQL Server 21626 или 21627
- «Невозможно подключиться к серверу базы данных Oracle "%s" с помощью поставщика OLEDB для Oracle (OraOLEDB.Oracle)».
Ж. Добавление в База данных SQL Azure качестве связанного сервера для использования с распределенными запросами в облачных и локальных базах данных
Можно добавить в База данных SQL Azure качестве связанного сервера, а затем использовать его с распределенными запросами, охватывающими локальные и облачные базы данных. Это компонент для гибридных решений баз данных, охватывающих локальные корпоративные сети и облако Azure.
SQL ServerПоле Product содержит функцию распределенных запросов, которая позволяет создавать запросы для объединения данных из локальных источников данных и данных из удаленных источников (включая данные из источников, не являющихся SQL Server источниками данных), определенных в качестве связанных серверов. Каждую База данных SQL Azure (за исключением master базы данных логического сервера) можно добавить в качестве отдельного связанного сервера, а затем использовать непосредственно в приложениях базы данных в качестве любой другой базы данных.
Преимущества использования База данных SQL Azure включают управляемость, высокий уровень доступности, масштабируемость, работу с привычной моделью разработки и реляционную модель данных. Требования приложения базы данных определяют, как она будет использоваться База данных SQL Azure в облаке. Вы можете переместить все данные одновременно в База данных SQL Azure или последовательно перемещать некоторые данные, сохраняя оставшиеся данные в локальной среде. Для такого гибридного приложения базы данных База данных SQL Azure теперь можно добавить в качестве связанных серверов, а приложение базы данных может выдавать распределенные запросы для объединения данных из База данных SQL Azure локальных источников данных.
Ниже приведен простой пример, объясняющий, как подключиться к с База данных SQL Azure помощью распределенных запросов.
сначала добавьте один База данных SQL Azure в качестве связанного сервера с помощью SQL Server Native Client.
Добавьте учетные данные и параметры для этого связанного сервера.
Теперь используйте связанный сервер для выполнения запросов с использованием имен из четырех частей, даже для создания новой таблицы и вставки данных.
Выполните запрос к данным, используя имена из четырех частей:
И. Создание связанного сервера с Управляемым экземпляром SQL с помощью сквозной аутентификации Azure AD
Чтобы создать связанный сервер с сквозной проверкой подлинности, выполните следующую инструкцию T-SQL.
При сквозной проверке подлинности контекст безопасности локального имени входа переносится на удаленный экземпляр. для сквозной проверки подлинности требуется, чтобы участник AAD был добавлен в качестве имени входа как для локального, так и для удаленного Управляемый экземпляр Azure SQL. Оба управляемых экземпляра должны находиться в группе доверия сервера. При соблюдении требований пользователь может войти в локальный экземпляр и запросить удаленный экземпляр через объект связанного сервера.
I was trying to pull data from Oracle to MSSqlserver database using Linked server.
But it was failing with the below error:
The OLE DB provider "OraOLEDB.Oracle" for linked server "LINK_NAME" supplied inconsistent metadata for a column. The column "COLUMN_NAME" (compile-time ordinal 6) of object ""SCHEMA"."TABLE"" was reported to have a "LENGTH" of 100 at compile time and 200 at run time.
I also need to pass argument at run time in where condition. I found OPENQUERY as a solution but it does not support arguments at runtime.
Результирующие наборы
Ошибка Oracle ORA-01555
Следующая ошибка базы данных Oracle относится не к репликации моментального снимка, а к тому, как Oracle строит подходящие для чтения представления данных:
"ORA-01555: слишком старый моментальный снимок"
При помощи объектов, называемых сегментами отката, Oracle создает пригодные для чтения представления данных на момент выдачи инструкции SQL. Ошибка «слишком старый моментальный снимок» может возникнуть, если данные отката переписываются другими, одновременно выполняющими сеансами. До версии Oracle 9i для уменьшения частоты появления этой ошибки рекомендовался метод увеличения размера или количества сегментов отката и назначения больших транзакций для определенных сегментов отката.
В Oracle 9i корпорация Oracle ввела концепцию табличного пространства UNDO, заменяющую сегмент отката. Для предотвращения ошибки «слишком старый моментальный снимок» в Oracle 9i рекомендуется следующее:
Создайте табличное пространство UNDO с достаточным количеством свободного места.
Установите гарантию хранения для табличного пространства (для версий Oracle 10G и выше).
Настройте параметры инициализации Oracle UNDO_MANAGEMENT и UNDO_RETENTION.
Дополнительные сведения об исключении причин ошибки «слишком старый моментальный снимок» см. в документации Oracle.
Ошибка SQL Server 21628
«Не удалось обновить реестр распространителя "%s", чтобы позволить поставщику OLEDB для Oracle (OraOLEDB.Oracle) запускаться в процессе с SQL Server. Убедитесь, что пользователю с текущим именем входа разрешается вносить изменения в разделы реестра, принадлежащие SQL Server ».
Для системы публикации Oracle необходимо, чтобы запись реестра существовала и была установлена в 1 для 64-разрядных распространителей. Если запись не существует, SQL Server будет пытаться создать ее. Если запись существует, но установлена в 0, установка не изменится, и настройка издателя Oracle завершится неудачей.
Для просмотра и изменения установки реестра выполните следующие действия:
В диалоговом окне Выполнить введите regedit, затем нажмите кнопку OK.
Перейдите к папке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\ \Providers.
В папке для поставщиков (Providers) должна находиться папка с именем OraOLEDB.Oracle. В этой папке должна присутствовать DWORD-переменная с именем AllowInProcess, которой присвоено значение 1.
Если обнаружено, что переменная AllowInProcess установлена в 0, обновите запись реестра до 1:
Щелкните правой кнопкой мыши запись, затем щелкните Изменить.
В диалоговом окне Изменение строкового параметра введите 1 в поле Значение поля .
Б. Использование поставщика Microsoft OLE DB для Microsoft Access
Поставщик Microsoft.Jet.OLEDB.4.0 соединяется с базами данных Microsoft Access в формате 2002–2003. В следующем примере показано создание связанного сервера с именем SEATTLE Mktg .
в этом примере предполагается, что Microsoft доступ и образец Northwind базы данных установлены и что Northwind база данных находится в к:\мсоффице\акцесс\самплес на том же сервере, что и экземпляр SQL Server.
Сводка
В этой статье описывается настройка связанного сервера с компьютера, который работает Microsoft SQL Server в базу данных Oracle, и основные действия по устранению неполадок, которые могут возникнуть при настройках связанного сервера с Oracle. Большая часть сведений в этой статье применима к средам, настроенным для использования поставщика OLEDB Microsoft для Oracle (MSDAORA). Избегайте использования этой функции в новых разработках и планируйте изменять приложения, использующие эту функцию в настоящее время. Вместо этого используйте поставщика OLE DB Oracle.
Дополнительные сведения о настройке связанного сервера с помощью olEDB-поставщика Oracle в обзоре How to get up and running with Oracle and Linked Servers.
Текущая версия драйвера Microsoft ODBC для Oracle соответствует спецификации ODBC 2.5, в то время как поставщик OLE DB для Oracle является родным поставщиком API OCI Oracle 7. Драйвер и поставщик используют клиент SQL*Net (или Net8 для Oracle 8x) и библиотеку интерфейса вызовов Oracle и другие клиентские компоненты Oracle для подключения к базам данных Oracle и получения данных. Клиентские компоненты Oracle важны и должны быть правильно настроены для успешного подключения к базам данных Oracle с помощью драйвера и поставщика.
Из microsoft Data Access Components (MDAC) версии 2.5 и более поздних версий драйвер Microsoft ODBC и поставщик OLE DB поддерживают только Oracle 7 и Oracle 8i с следующими ограничениями:
Типы данных для Oracle 8.x, такие как CLOB, BLOB, BFILE, NCHAR, NCLOB и NVARCHAR2, не поддерживаются.
Функция Unicode на серверах Oracle 7.x и 8.x не поддерживается.
Несколько экземпляров клиентов Oracle или несколько домов Oracle не поддерживаются, поскольку они зависят от первого появления дома Oracle в переменной SYSTEM PATH.
Возвращение нескольких результатов из сохраненной процедуры или пакета SQL не поддерживается с помощью ADO или OLEDB.
Вложенные внешние соединители не поддерживаются.
Сохранение XML не поддерживается.
Версия с более чем 8i не поддерживается с помощью этих драйверов.
Сторонние продукты, которые обсуждаются в этой статье, производятся компаниями, независимыми от Microsoft. Корпорация Майкрософт не дает никаких явных, подразумеваемых и прочих гарантий относительно производительности или надежности этих продуктов.
Значения кода возврата
0 (успешное завершение) или 1 (неуспешное завершение)
Ошибка SQL Server 21624 или 21629
Если используется клиентское программное обеспечение Oracle версии 10g, поставщиком является OraOLEDB10.dll, для версии 9i — это OraOLEDB.dll. Поставщик устанавливается в каталог %ORACLE_HOME%\BIN (например, в «C:\oracle\product\10.1.0\Client_1\bin»). Если обнаружено, что поставщик Oracle OLEDB не установлен на распространителе, установите его с установочного диска клиентского программного обеспечения Oracle, предоставляемого корпорацией Oracle. Дополнительные сведения см. в статье Настройка издателя Oracle.
- regsvr32 OraOLEDB10.dll или regsvr32 OraOLEDB.dll .
Remarks
В следующей таблице показаны способы настройки связанного сервера для источников данных, доступных через поставщик OLE DB. Связанный сервер может быть настроен несколькими способами для конкретного источника данных; для одного типа источника данных возможны несколько строк. В этой таблице также показаны sp_addlinkedserver значения параметров, которые будут использоваться для настройки связанного сервера.
Удаленный источник данных OLE DB | Поставщик OLE DB | product_name | provider_name | data_source | расположение | provider_string | catalog |
---|---|---|---|---|---|---|---|
SQL Server | MicrosoftSQL ServerПоставщик собственного клиента OLE DB | SQL Server 1 (по умолчанию) | |||||
SQL Server | MicrosoftSQL ServerПоставщик собственного клиента OLE DB | SQLNCLI | Сетевое имя SQL Server (для экземпляра по умолчанию) | Имя базы данных (необязательно) | |||
SQL Server | MicrosoftSQL ServerПоставщик собственного клиента OLE DB | SQLNCLI | имя сервера \ instanceName (для конкретного экземпляра) | Имя базы данных (необязательно) | |||
Oracle, версия 8 или более поздняя | Поставщик Oracle для OLE DB | Любой | OraOLEDB.Oracle | Псевдоним для базы данных Oracle | |||
Access/Jet | Поставщик OLE DB для Jet (Майкрософт) | Любой | Microsoft.Jet.OLEDB.4.0 | Полный путь к файлу базы данных Jet | |||
Источник данных ODBC | Поставщик Microsoft OLE DB для ODBC | Любой | MSDASQL | Системный DSN источника данных ODBC | |||
Источник данных ODBC | Поставщик Microsoft OLE DB для ODBC | Любой | MSDASQL | Строка подключения ODBC | |||
Файловая система | Поставщик Microsoft OLE DB для службы индексирования | Любой | MSIDXS | Имя каталога службы индексирования | |||
Электронная таблица Microsoft Excel | Поставщик Microsoft OLE DB для Jet | Любой | Microsoft.Jet.OLEDB.4.0 | Полный путь к файлу Excel | Excel 5,0 | ||
База данных IBM DB2 | Поставщик Microsoft OLE DB для DB2 | Любой | DB2OLEDB | См Microsoft . документацию по поставщику OLE DB для DB2. | Имя каталога базы данных DB2 |
1 такой способ настройки связанного сервера приводит к тому, что имя связанного сервера будет совпадать с сетевым именем удаленного экземпляра SQL Server . Укажите сервер с помощью data_source .
2 "Any" означает, что название продукта может быть любым.
Microsoft SQL Server Поставщик OLE DB собственного клиента — это поставщик, который используется с, SQL Server Если имя поставщика не указано или указано в SQL Server качестве имени продукта. Даже если указано имя предыдущего поставщика (SQLOLEDB), оно все равно будет изменено на SQLNCLI при сохранении в каталог.
Параметры data_source, Location, provider_string и Catalog указывают на базу данных или базы данных, на которые указывает связанный сервер. Если значение одного из этих аргументов равно NULL, то соответствующее свойство инициализации поставщика OLE DB не установлено.
В кластеризованной среде при указании имен файлов для указания источников данных OLE DB используйте формат UNC или общие диски для указания расположения.
Хранимая процедура sp_addlinkedserver не может быть выполнена в пользовательской транзакции.
Azure SQL Управляемый экземпляр в настоящее время поддерживает только SQL Server, База данных SQL и другие SQL в качестве удаленных источников данных.
Когда связанный сервер создается с помощью sp_addlinkedserver , для всех локальных имен входа добавляется автоматическое сопоставление по умолчанию. Для пользователей, не являющихся SQL Server поставщиками, SQL Server проверенные имена входа могут иметь возможность получить доступ к поставщику в SQL Server учетной записи службы. Администраторам нужно рассмотреть применение процедуры sp_droplinkedsrvlogin , NULL для удаления глобального сопоставления.
Д. Доступ к текстовому файлу с помощью поставщика Microsoft OLE DB для Jet
Данный пример показывает, как создать связанный сервер для прямого доступа к текстовым файлам без соединения с ними как с таблицами MDB-файла СУБД Access. Поставщик Microsoft.Jet.OLEDB.4.0 и строка поставщика Text .
Источник данных — это полный путь к каталогу, который содержит тестовые файлы. Файл schema.ini, который описывает структуру текстовых файлов, должен находиться в том же каталоге, что и текстовые файлы. дополнительные сведения о создании schema.iniного файла см. в документации по Jet ядро СУБД.
Сначала создайте связанный сервер.
Настройка сопоставлений имен входа.
Перечислите таблицы на связанном сервере.
Ошибка Oracle ORA-22285
Если в таблице имеется столбец BFILE, данные для столбца хранятся в файловой системе. Административной учетной записи репликации должно быть предоставлено право доступа в каталог, в котором хранятся данные. С этой целью должно использоваться следующее синтаксическое выражение:
GRANT READ ON DIRECTORY TO
«ORA-22285: несуществующий каталог или файл для операции FILEOPEN»
В. Использование поставщика OLE DB Майкрософт для ODBC с параметром data_source
В следующем примере создается связанный сервер с именем SEATTLE Payroll , который использует Microsoft поставщик OLE DB для ODBC ( MSDASQL ) и параметр data_source .
Указанный источник данных ODBC должен быть определен как системный DSN на сервере до того, как будет использоваться связанный сервер.
Разрешения
sp_addlinkedserver Инструкции требуется разрешение ALTER ANY Linked Server . (Элемент SQL Server Management Studio Диалоговое окно Создание связанного сервера реализуется таким образом, что требует членства в sysadmin предопределенной роли сервера.)
Методы устранения неполадок с подключением к серверу Oracle
Чтобы отлукать проблемы с подключением Oracle с драйвером Microsoft ODBC для Oracle или поставщик OLE DB для Oracle (Майкрософт), выполните следующие действия:
Используйте утилиту Oracle SQL Plus (утилиту запросов на основе командной строки) для проверки возможности подключения к Oracle и получения данных.
Если вы не можете подключиться к Oracle и получить данные, у вас либо плохая установка или конфигурация компонентов клиента Oracle, либо вы неправильно создали псевдоним службы прозрачной сети (TNS) для сервера Oracle, когда вы использовали SQL*Net Easy Configuration или Oracle Net8 Easy Configuration utility. Обратитесь к администратору базы данных Oracle (DBA), чтобы убедиться, что компоненты Oracle, которые должны быть правильно установлены и настроены.
Проверьте версию клиента Oracle (SQL чистая версия), установленного * на компьютере. Для драйвера Microsoft ODBC для Oracle поставщик OLE DB для Oracle (Майкрософт) требуется установка SQL*Net версии 2.3 или более поздней версии на клиентский компьютер.
Подключение из SQL Плюс (средство клиентского запроса Oracle) может появиться, но необходимо перезапустить компьютер, чтобы подключение ODBC/OLE DB функционировало правильно.
При использовании Oracle 8i файл .rgs пуст.
Если клиент Oracle установлен, и вы получите ошибку, которая указывает на то, что компоненты клиента Oracle 7.3 или более поздней части должны быть установлены на компьютере, убедитесь, что экологическая переменная PATH на клиентский компьютер содержит папку, в которой был установлен клиент Oracle, например, Oracle_Root\Bin. Если вы не можете найти эту папку, добавьте папку в переменную PATH, чтобы устранить ошибку.
Убедитесь, что Ociw32.dll находится в папке Oracle_Root\bin. Этот .dll не может существовать в любом другом расположении на клиентский компьютер. Убедитесь, что DLLs клиентского компонента Oracle (например, файл Core40.dll и файл ora.dll) не существуют вне Oracle_Root папки или * подмостков.
Убедитесь, что на компьютере установлена одна клиентская версия Oracle. Несколько версий SQL*Net не могут существовать на одном клиентском компьютере с помехами и критическими операциями (например, TNS и alias lookups).
Корпорация Майкрософт рекомендует установить локальный клиент Oracle, а не делать это путем сопоставления удаленного клиента Oracle на компьютере, а затем включить его в путь системы для подключения к Oracle через ODBC/OLE DB. Но поставщик и драйвер проверяются с локально установленным клиентом Oracle, а не на сетевой совместной основе.
В этой теме рассматривается ряд вопросов, которые могут возникнуть при настройке и использовании издателя Oracle.
Действия по настройкам связанного сервера с Oracle
Необходимо установить клиентскую программу Oracle на компьютере, SQL Server на котором установлен связанный сервер.
Установите нужный драйвер на компьютере с SQL Server. Microsoft поддерживает только драйвер поставщик OLE DB для Oracle (Майкрософт) Microsoft ODBC для Oracle. Если вы используете стороннего поставщика или стороннего драйвера для подключения к Oracle, необходимо связаться с соответствующим поставщиком для любых проблем, которые могут возникнуть с помощью поставщика или драйвера.
Если вы используете драйвер поставщик OLE DB для Oracle (Майкрософт) и Microsoft ODBC для Oracle, рассмотрите следующие вопросы:
Как поставщик OLE DB, так и драйвер ODBC, включенный в компоненты доступа к данным Майкрософт (MDAC), требуют SQL*Net 2.3.x или более поздней версии. Необходимо установить клиентское программное обеспечение Oracle 7.3.x или более поздний вариант на клиентский компьютер. Клиентский компьютер — это компьютер, на который SQL Server.
Убедитесь, что на компьютере с SQL Server установленА версия MDAC 2.5 или более поздней версии. С помощью MDAC 2.1 или более ранней версии невозможно подключиться к базам данных, в которые используется Oracle 8. x или более поздней версии.
Чтобы включить MDAC 2.5 или более поздние версии для работы с клиентской программой Oracle, реестр необходимо изменить на клиентном компьютере, который работает SQL Server, как указано в следующей таблице.
Перезапустите компьютер, который SQL Server после установки клиентского программного обеспечения Oracle.
На компьютере, который SQL Server, установите связанный сервер с помощью следующего сценария.
Если для Oracle используется драйвер Microsoft ODBC, параметр можно указать @datasrc имя DSN. Для подключения без DSN строка поставщика поставляется через @provstr параметр. С поставщик OLE DB для Oracle (Майкрософт) используйте псевдоним сервера Oracle, настроенный в файле TNSNames.Ora для @datasrc параметра. Дополнительные сведения см. в разделе "sp_addlinkedserver" в SQL Server Books Online.
В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует в точности выполнять приведенные инструкции. Для дополнительной защиты создайте резервную копию реестра, прежде чем редактировать его. Так вы сможете восстановить реестр, если возникнет проблема. Дополнительные сведения о том, как создать и восстановить реестр, щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт: 322756 Как создать и восстановить реестр в Windows
Для получения расширенных сведений о любой ошибке при выполнении распределенного запроса можно использовать любой из следующих двух методов.
Подключение SQL Server использовать SQL Server Management Studio и запустить следующий код, чтобы включить флаг трассировки 7300.
Интерфейс::Метод не справился с кодом hex-error.
Код hex-error можно найти в файле Oledberr.h, который включен в набор разработки программного обеспечения MDAC (SDK).
Ошибка 7399. Поставщик OLE DB "%ls" для связанного сервера "%ls" сообщил об ошибке. %ls
Включай флаг трассировки 7300 или SQL profiler для захвата события ошибок OLEDB для получения расширенных сведений об ошибках OLEDB.
"ORA-12154: TNS:не удалось разрешить имя службы"
"Клиентские и сетевые компоненты Oracle (tm) не найдены. Эти компоненты поставляются корпорацией Oracle и являются частью установки клиентского программного обеспечения Oracle Version 7.3.3 (или больше) ".
Эти ошибки возникают при проблеме подключения к серверу Oracle. Просмотрите методы устранения неполадок с подключением в разделе Сервер Oracle ниже для дополнительных устранений неполадок.
Ошибка 7302. Не удается создать экземпляр поставщика OLE DB "MSDAORA" для связанного сервера "%ls".
Если вы используете стороннего поставщика Oracle, а поставщик Oracle не может работать вне процесса SQL Server, в результате изменения параметров поставщика включить его в процессе. Чтобы изменить параметры поставщика, используйте один из следующих методов.
Метод 1 Найдите следующий ключ реестра. Затем измените значение записи AllowInProcess (DWORD) на 1. Этот ключ реестра расположен под соответствующим именем поставщика: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName .
Ошибка 7312. Недопустимое использование схемы и/или каталога для поставщика OLE DB "%ls" для связанного сервера "%ls". Было предоставлено имя из четырех части, но поставщик не предоставляет необходимые интерфейсы для использования каталога и/или схемы.
Ошибка 7313. Для поставщика "%ls" для связанного сервера была указана недействительный схема или каталог.
Ошибка 7314. Поставщик OLE DB "%ls" для связанного сервера "%ls" не содержит таблицу "%ls". Таблица либо не существует, либо у текущего пользователя нет разрешений на эту таблицу.
На стороне Oracle в верхнем шкафу хранится таблица или столбец, созданный без двойных кавычках. Если таблица или столбец заключены в двойные кавычка, таблица или столбец хранятся как есть.
В следующем вызове показано, существует ли таблица в схеме Oracle. В этом вызове также указывается точное имя таблицы.
Ошибка 7413. Не удалось подключиться к связанному серверу "%ls" (OLE DB Provider '%ls'). Включить делегирования или использовать удаленный SQL Server для текущего пользователя. Msg 18456, Level 14, State 1, Line 1 Login failed for user ' ' .
Ошибка 7391. Операция не может быть выполнена, так как поставщик OLE DB "MSDAORA" для связанного сервера "%ls" не смог начать распределенную транзакцию. След ошибки OLE DB [OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]
Если все записи реестра верны, MtxOCI.dll файл загружается. Если файл MtxOCI.dll не загружен, нельзя выполнять распределенные транзакции с Oracle с помощью поставщик OLE DB для Oracle (Майкрософт) или с помощью драйвера Microsoft ODBC для Oracle. Если вы используете сторонного поставщика и получаете ошибку 7391, убедитесь, что поставщик OLE DB, который вы используете, поддерживает распределенные транзакции. Если поставщик OLE DB поддерживает распределенные транзакции, убедитесь, что координатор распределенных транзакций Майкрософт (MSDTC) запущен и имеет доступ к сети.
Ошибка 7392. Невозможно запустить транзакцию для поставщика OLE DB "MSDAORA" для связанного сервера "%ls". Трассировка ошибки OLE DB [OLE/DB Provider 'MSDAORA' ITransactionLocal::StartTransaction возвращена 0x8004d013: ISOLEVEL=4096].
Поставщик OLE DB вернул ошибку 7392, так как для этого сеанса может быть активна только одна транзакция. Эта ошибка указывает на то, что при явной или неявной транзакции поставщик OLE DB пытается сделать заявление об изменении данных, а поставщик OLE DB не поддерживает вложенные транзакции. SQL Server требуется эта поддержка, чтобы при определенных условиях ошибки можно было прекратить действие заявления об изменении данных при продолжении транзакции.
Если он on, SQL Server не требует вложенной поддержки транзакций SET XACT_ABORT от поставщика OLE DB. Поэтому выполните перед выполнением заявлений об изменении данных в удаленных таблицах в SET XACT_ABORT ON неявной или явной транзакции. Делайте это в том случае, если поставщик OLE DB, который вы используете, не поддерживает вложенные транзакции.
Ошибка SQL Server 21617
«Не удается запустить SQL*PLUS. Убедитесь, что на распространителе установлена текущая версия клиентской программы Oracle».
Попытайтесь найти SQL*PLUS на распространителе. Для установки клиента Oracle 10g имя этого исполняемого файла — sqlplus.exe. Обычно данная программа устанавливается в каталог %ORACLE_HOME%/bin. Чтобы убедиться, что путь SQL*PLUS содержится в системном пути, проверьте значение системной переменной Path:
Щелкните правой кнопкой мыши Мой компьютер, затем выберите Свойства.
Перейдите на вкладку Дополнительно , затем щелкните Переменные среды.
В диалоговом окне Переменные среды , в списке Системные переменные выберите переменную Path и щелкните Изменить.
В диалоговом окне Изменение системной переменной выполните следующие действия: если в текстовом поле Значение переменной путь к папке, содержащей sqlplus.exe, отсутствует, измените строку, чтобы она содержала этот путь.
Если на распространителе не удается найти sqlplus.exe, установите на распространителе текущую версию клиентского программного обеспечения Oracle. Дополнительные сведения см. в статье Настройка издателя Oracle.
3 Answers 3
Try using the OPENQUERY Syntax to see whether that helps..
Sorry, I forgot to mention but I need to pass arguments in where clause . but OPENQUERY does not support arguments.
I found solution:
The error was coming due to database column type mismatch. ORACLE was using NVARCHAR for datatype but in case of SQLSERVER it was VARCHAR .
As NVARCHAR is double the size of VARCHAR that is why it was showing size mismatch error.
Changing the data type to same worked for me.
I have found a solution posted by this blogger. Try it out!
This tool from Sysinternals/Mark Russinovich is the best, and my only regret that day was not launching it earlier instead of scouring Google and going insane. I’ve limited Procmon to just sqlservr.exe, as it’s the SQL Service itself that loads/handles the providers and not the ssms.exe. Also of note is that the sqlservr.exe is a 64bit process while the management studio is still just 32bit. As the server service is loading the provider, and the service process is 64bit, the provider must also be available in 64 bit format.
The ODAC112021Xcopy_x64.zip was installed to C:\Oracle. What Procmon showed me however is that sqlservr is attempting to find the oci.dll in any folder but his! (It iterates through the %Path% sysvariable). When it finally gives up on find the dll, the SQL Service is in a unstable shape and the only way to stop the service was to kill it via taskmgr/procexp. Clearly I can see that the “xcopy” deployment – while not giving me any error messages – it also did not set the PATH variable! And this is what this post is really about… adding C:\Oracle and C:\Oracle\Bin to the Path variable or maybe it’s about employing investigative tools earlier in the process instead of relying on your search engine skills.
sqlservr.exe can now find the relevant DLL’s. The OCI.DLL in the root and the OraOLEDB11.DLL in the Bin subfolder. At this point I could query the database! If you did my steps as above and you still get the same error, I strongly suggest using Procmon.exe as I have instead of jumping to the next search result.
I am trying to run openrowset from MS SQL Server on an Oracle server.
When i execute the following command:
the following error occurs
Can anyone tell me how I can use openrowset with OraOLEDB.Oracle ?
I am using 64 bit version of MS SQL Server and Oracle OLEDB driver.
I have tried this on two machines running Windows 7 x64 & Windows Server 2008 x64 with MS SQL Server 2008 x64. Both showed the same error message.
I am trying to run OpenQuery against my linked server and getting same error. My linked server is using OraOLEDB.Oracle provider and I have already enabled the allow In Process option. The funny part is I have been using this linked server without any issue since last week, I did sql server reboot and it suddenly started to give error.
Издатель Oracle связан с другим распространителем
«Экземпляр "OraclePublisherName>" сервера Oracle ранее использовал "SQLServerDistributorName>" в качестве распространителя. Чтобы использовать "NewSQLServerDistributorName>" в качестве его распространителя, необходимо удалить текущую конфигурацию репликации на экземпляре сервера Oracle, в результате чего будут удалены все публикации на этом экземпляре сервера».
«Сервер Oracle "OracleServerName>" уже определен в качестве издателя "OraclePublisherName>" на распространителе "SQLServerDistributorName>. ". Для повторного создания удалите издатель или открытый синоним " "».
При удалении издателя Oracle объекты репликации в базе данных Oracle автоматически очищаются. Однако в некоторых случаях необходима ручная очистка объектов репликации Oracle. Для ручной очистки объектов репликации Oracle, созданных при репликации, выполните следующее:
Подключитесь к издателю Oracle с разрешениями администратора базы данных.
Выполните команду SQL DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR; .
Синтаксис
8 Answers 8
In SQL Server Enterprise Manager, open \Server Objects\Linked Servers\Providers , right click on the OraOLEDB.Oracle provider, select properties and check the "Allow inprocess" option. Recreate your linked server and test again.
You can also execute the following query if you don't have access to SQL Server Management Studio :
In my experience, it is necessary to restart the MSSQL Service in order for the "allow inprocess" option to take effect.
Ran into this issue where the linked server would work for users who were local admins on the server, but not for anyone else. After many hours of messing around, I managed to fix the problem using the following steps:
Giles - This a little late, but within Permissions, select Advanced, then the Owner tab. Select the Replace owner. checkbook to change it to the administrator.
When connecting to SQL Server with Windows Authentication (as opposed to a local SQL Server account), attempting to use a linked server may result in the error message:
The most direct answer to this problem is provided by Microsoft KB 2647989, because "Security settings for the MSDAINITIALIZE DCOM class are incorrect."
The solution is to fix the security settings for MSDAINITIALIZE. In Windows Vista and later, the class is owned by TrustedInstaller, so the ownership of MSDAINITIALIZE must be changed before the security can be adjusted. The KB above has detailed instructions for doing so.
MSDAINITIALIZE is a COM class that is provided by OLE DB. This class can parse OLE DB connection strings and load/initialize the provider based on property values in the connection string. MSDAINITILIAZE is initiated by users connected to SQL Server. If Windows Authentication is used to connect to SQL Server, then the provider is initialized under the logged in user account. If the logged in user is a SQL login, then provider is initialized under SQL Server service account. Based on the type of login used, permissions on MSDAINITIALIZE have to be provided accordingly.
The issue dates back at least to SQL Server 2000; KB 280106 from Microsoft describes the error (see "Message 3") and has the suggested fix of setting the In Process flag for the OLEDB provider.
While setting In Process can solve the immediate problem, it may not be what you want. According to Microsoft,
Instantiating the provider outside the SQL Server process protects the SQL Server process from errors in the provider. When the provider is instantiated outside the SQL Server process, updates or inserts referencing long columns (text, ntext, or image) are not allowed. -- Linked Server Properties doc for SQL Server 2008 R2.
The better answer is to go with the Microsoft guidance and adjust the MSDAINITIALIZE security.
В этой статье описывается настройка связанного сервера с компьютера, на Microsoft SQL Server запущенного в базу данных Oracle, а также основные действия по устранению ошибок, которые могут возникнуть при настройках связанного сервера с базой данных Oracle.
Оригинальная версия продукта: Microsoft SQL Server 2005 выпуск Standard, Microsoft SQL Server 2005 developer Edition, Microsoft SQL Server 2005 выпуск Enterprise, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition
Исходный номер КБ: 280106
Г. использование поставщика OLE DB майкрософт для Excel электронной таблицы
чтобы создать определение связанного сервера с помощью Microsoft поставщика OLE DB для Jet для доступа к электронной таблице Excel в формате 1997-2003, сначала создайте именованный диапазон в Excel, указав столбцы и строки листа Excel, которые нужно выбрать. Затем на имя диапазона можно будет ссылаться в распределенном запросе как на имя таблицы.
Для доступа к данным в электронной таблице Excel требуется указать имя для диапазона ячеек. Следующий запрос используется для получения доступа к указанному диапазону ячеек SalesData как к таблице с помощью предварительно настроенного связанного сервера.
Если SQL Server выполняется под учетной записью домена, имеющего доступ к удаленной общей папке, то вместо сопоставленного диска может использоваться путь в формате UNC.
Ошибка SQL Server 21620
При соединении с базой данных Oracle, версия которой предшествует версии 8.1, для публикации Oracle необходимо, чтобы версия клиентского программного обеспечения Oracle, установленного на распространителе, была не ниже 9. При соединении с базой данных Oracle 8.1 или более поздней версии рекомендуется, чтобы версия клиентского программного обеспечения Oracle была не ниже 10.
«Версия SQL*PLUS, доступная через переменную системного пути, в настоящее время недостаточна для поддержки публикации Oracle. Убедитесь, что на распространителе установлена текущая версия клиентской программы Oracle».
Если на распространителе установлено несколько версий клиентского программного обеспечения Oracle, убедитесь, что самая последняя версия не ниже 9, и что переменная системного пути ссылается вначале на эту версию (ссылки на другие версии могут использоваться, если самая последняя версия располагается первой). Дополнительные сведения о редактировании переменной системного пути см. в приводимом выше разделе «Ошибка SQL Server 21617».
Ошибка, касающаяся клиентского и сетевого программного обеспечения Oracle
«Не удалось подключиться к серверу с помощью [поставщика Microsoft OLE DB для Oracle]. Клиентские и сетевые компоненты Oracle не найдены. Эти компоненты поставляются корпорацией Oracle и являются частью установочного пакета клиентского программного обеспечения Oracle 7.3.3 или более поздней версии. Поставщик не может функционировать, пока эти компоненты не будут установлены».
Если на распространителе устанавливается подходящее клиентское программное обеспечение Oracle, то убедитесь в том, что SQL Server остановлен, а затем перезапустите его после завершения установки клиентского ПО. Это необходимо SQL Server для распознавания клиентских компонентов.
Если проверено, что эти разрешения предоставлены и что компоненты установлены должным образом, но эта ошибка продолжает возникать, убедитесь в правильности значений настроек в разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI.
Для Oracle 10g правильными являются следующие значения настроек:
Для Oracle 9i правильными являются следующие значения настроек:
Ошибка SQL Server 21642, связанная с повторяющимся именем входа связанного сервера
«Для разнородных издателей необходим связанный сервер. Связанный сервер с именем " " уже существует. Удалите связанный сервер или выберите другое имя издателя».
Эта ошибка может возникнуть при попытке непосредственно создать связанный сервер, или если ранее была удалена связь между издателем Oracle и распространителем SQL Server , и теперь предпринимается попытка перенастроить издатель. Если эта ошибка возникает при попытке перенастроить издатель, удалите связанный сервер с помощью sp_dropserver (Transact-SQL).
Если вам нужно подключиться к издателю Oracle через подключение связанного сервера, создайте другое имя службы TNS и используйте это имя при вызове процедуры sp_addlinkedserver (Transact-SQL). Сведения о создании имен службы TNS см. в документации Oracle.
Ошибка SQL Server 21663 возникает из-за отсутствия первичного ключа
«Не найден правильный первичный ключ для исходной таблицы [TableOwner>].[TableName>]»
Сведения о требованиях для первичных ключей см. в подразделе «Уникальные индексы и ограничения» раздела Design Considerations and Limitations for Oracle Publishers.
A. использование поставщика Microsoft SQL Server OLE DB
В следующем примере показано создание связанного сервера с именем SEATTLESales . Название продукта — SQL Server , имя поставщика не используется.
В следующем примере создается связанный сервер S1_instance1 на экземпляре с SQL Server помощью SQL Server драйвера OLE DB.
В следующем примере создается связанный сервер S1_instance1 на экземпляре с SQL Server помощью SQL Server собственного клиента OLE DB Provider.
Собственный клиент OLE DB для SQL Server (SQLNCLI) объявляется нерекомендуемым для новых разработок. Вместо этого используйте новый драйвер Microsoft OLE DB для SQL Server (MSOLEDBSQL), который будет обновлен с самыми последними серверными компонентами.
Примеры
Ошибка Oracle ORA-01000
Репликация использует курсоры в издателе Oracle в процессе добавления статей в публикацию. Во время этого процесса возможно превышение максимально допустимого количества курсоров, доступных на издателе. Если это происходит, возникает следующая ошибка:
«ORA-01000: превышение максимального числа открытых курсоров»
Для исключения этой проблемы необходимо убедиться, что для параметра max_open_cursors в базах данных Oracle установлено достаточно большое число (по меньшей мере, 1 000). Дополнительные сведения об этой установке приводятся в документации Oracle.
Аргументы
[ @server =] ' сервер '
Имя создаваемого связанного сервера. Аргумент Server имеет тип sysname и не имеет значения по умолчанию.
[ @srvproduct =] ' product_name '
Введите название продукта для источника данных OLE DB, который добавляется в качестве связанного сервера. Значение product_name имеет тип nvarchar (128) и значение по умолчанию NULL. если значение равно SQL Server, то provider_name, data_source, расположение, provider_string и каталог не должны быть указаны.
[ @provider =] ' provider_name '
Введите уникальный программный идентификатор (PROGID) поставщика OLE DB, соответствующий этому источнику данных. Provider_name должны быть уникальными для указанного поставщика OLE DB, установленного на текущем компьютере. Значение provider_name имеет тип nvarchar (128) и значение по умолчанию NULL. Однако если provider_name опущен, используется sqlncli.
Предыдущие поставщики Microsoft OLE DB для SQL Server (SQLOLEDB) и собственный клиент OLE DB для SQL Server (SQLNCLI) объявляются нерекомендуемыми для новых разработок. Вместо этого используйте новый драйвер Microsoft OLE DB для SQL Server (MSOLEDBSQL), который будет обновлен с самыми последними серверными компонентами.
[ @datasrc =] ' data_source '
Имя источника данных, как оно интерпретируется поставщиком OLE DB. Значение data_source равно nvarchar ( 4000 ). data_source передается как свойство DBPROP_INIT_DATASOURCE для инициализации поставщика OLE DB.
[ @location =] ' расположение '
Введите местонахождение базы данных, понятное поставщику OLE DB. Значение Location имеет тип nvarchar ( 4000 ) и значение по умолчанию NULL. Расположение аргумента передается как свойство DBPROP_INIT_LOCATION для инициализации поставщика OLE DB.
[ @provstr =] ' provider_string '
Строка подключения для конкретного поставщика OLE DB, указывающая уникальный источник данных. Значение provider_string имеет тип nvarchar ( 4000 ) и значение по умолчанию NULL. Аргумент provstr либо передается в IDataInitialize, либо устанавливается в качестве свойства DBPROP_INIT_PROVIDERSTRING для инициализации поставщика OLE DB.
При создании связанного сервера для SQL Server поставщика OLE DB собственного клиента экземпляр можно указать с помощью ключевого слова Server как SERVER=servername\\instancename для указания конкретного экземпляра SQL Server . ServerName — это имя компьютера, на котором SQL Server выполняется, а instanceName — имя конкретного экземпляра, SQL Server к которому будет подключен пользователь.
Чтобы получить доступ к зеркальной базе данных, строка соединения должна содержать имя базы данных. Это имя необходимо, чтобы предоставить поставщику доступа к данным возможность пытаться отработать отказ. База данных может быть указана в параметре @ provstr или @ Catalog . Кроме того, строка соединения может содержать имя партнера по обеспечению отработки отказа.
[ @catalog =] ' каталог '
Каталог, который должен использоваться при подключении к поставщику OLE DB. Параметр Catalog имеет тип sysname и значение по умолчанию NULL. Каталог аргументов передается как свойство DBPROP_INIT_CATALOG для инициализации поставщика OLE DB. Если связанный сервер определен для экземпляра SQL Server, то каталог ссылается на базу данных по умолчанию, с которой сопоставлен связанный сервер.
Читайте также: