Настройка и устранение неполадок связанного сервера с базой данных Oracle в SQL Server
В этой статье описывается настройка связанного сервера с компьютера под управлением 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
Итоги
В этой статье описывается настройка связанного сервера с компьютера под управлением Microsoft SQL Server в базу данных Oracle и выполнение основных действий по устранению распространенных ошибок, которые могут возникнуть при настройке связанного сервера в Oracle. Большая часть информации в этой статье применима к средам, настроенным для использования поставщика Microsoft OLEDB для Oracle (MSDAORA). Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо этого используйте поставщик OLE DB Oracle.
Дополнительные сведения о настройке связанного сервера с помощью поставщика OLEDB Oracle см. в статье о том, как начать работу с Oracle и связанными серверами.
Внимание
Текущая версия драйвера Microsoft ODBC для Oracle соответствует спецификации ODBC 2.5, а поставщик OLE DB для Oracle является собственным поставщиком API OCI Oracle 7. Драйвер и поставщик используют клиент SQL*Net (или клиент Net8 для Oracle 8x) и библиотеку Интерфейса вызова Oracle (OCI) и другие клиентские компоненты Oracle, чтобы подключиться к базам данных Oracle и получить данные. Клиентские компоненты Oracle важны и должны быть правильно настроены для успешного подключения к базам данных Oracle с помощью драйвера и поставщика.
В компонентах Microsoft Data Access (MDAC) версии 2.5 и более поздних версиях драйвер Microsoft ODBC и поставщик OLE DB поддерживают ТОЛЬКО Oracle 7 и Oracle 8i со следующими ограничениями:
Типы данных Oracle 8.x, такие как CLOB, BLOB, BFILE, NCHAR, NCLOB и NVARCHAR2, не поддерживаются.
Функция Юникода для серверов Oracle 7.x и 8.x не поддерживается.
Несколько экземпляров клиентов Oracle или несколько домов Oracle не поддерживаются, так как они полагаются на первое вхождение дома Oracle в переменной SYSTEM PATH.
Возврат нескольких наборов результатов из хранимой процедуры или пакетной инструкции SQL не поддерживается с помощью ADO или OLEDB.
Вложенные внешние соединения не поддерживаются.
Сохраняемость XML не поддерживается.
Версия больше 8i не поддерживается с помощью этих драйверов.
Примечание.
Сторонние продукты, которые обсуждаются в этой статье, производятся компаниями, независимыми от Microsoft. Корпорация Майкрософт не дает никаких явных, подразумеваемых и прочих гарантий относительно производительности или надежности этих продуктов.
Шаги по настройке связанного сервера в Oracle
Необходимо установить клиентское программное обеспечение Oracle на компьютере под управлением SQL Server, на котором настроен связанный сервер.
Установите драйвер, который требуется установить на компьютере под управлением SQL Server. Корпорация Майкрософт поддерживает только поставщик OLE DB для Oracle (Майкрософт) и Драйвер Microsoft ODBC для Oracle. Если вы используете стороннего поставщика или стороннего драйвера для подключения к Oracle, обратитесь к соответствующему поставщику за любыми проблемами, которые могут возникнуть с помощью своего поставщика или драйвера.
Если вы используете поставщик OLE DB для Oracle (Майкрософт) и Драйвер Microsoft ODBC для Oracle, рассмотрите следующее:
Поставщик OLE DB и драйвер ODBC, включенные в компоненты MICROSOFT Data Access (MDAC), требуют SQL*Net 2.3.x или более поздней версии. На клиентском компьютере необходимо установить клиентское программное обеспечение Oracle 7.3.x или более позднюю версию. Клиентский компьютер — это компьютер под управлением SQL Server.
Убедитесь, что у вас есть MDAC 2.5 или более поздняя версия, установленная на компьютере под управлением SQL Server. При использовании MDAC 2.1 или более ранней версии невозможно подключиться к базам данных, используюющим Oracle 8. x или более поздняя версия.
Чтобы включить MDAC 2.5 или более поздних версий для работы с клиентским программным обеспечением Oracle, реестр необходимо изменить на клиентском компьютере под управлением SQL Server, как указано в следующей таблице.
Oracle Client Microsoft Windows 2000 and later versions -------------------------------------------------------------------------- 7.x [HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\MSDTC\MTxOCI] "OracleXaLib"="xa73.dll" "OracleSqlLib"="SQLLib18.dll" "OracleOciLib"="ociw32.dll" 8.0 [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="xa80.dll" "OracleSqlLib"="sqllib80.dll" "OracleOciLib"="oci.dll" 8.1 [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="oraclient8.dll" "OracleSqlLib"="orasql8.dll" "OracleOciLib"="oci.dll"
Перезапустите компьютер под управлением SQL Server после установки клиентского программного обеспечения Oracle.
На компьютере под управлением SQL Server настройте связанный сервер с помощью следующего скрипта.
-- Adding linked server (from SQL Server Books Online): /* sp_addlinkedserver [@server =] 'server'[, [@srvproduct =] 'product_name'] [, [@provider =] 'provider_name'] [, [@datasrc =] 'data_source'] [, [@location =] 'location'] [, [@provstr =] 'provider_string'] [, [@catalog =] 'catalog'] */ EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817' -- Adding linked server login: /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'[,[@useself =] 'useself'] [,[@locallogin =] 'locallogin'] [,[@rmtuser =] 'rmtuser'] [,[@rmtpassword =] 'rmtpassword'] */ EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger' -- Help on the linked server: EXEC sp_linkedservers EXEC sp_helpserver select * from sysservers
Примечание.
Если вы используете Microsoft ODBC Driver for Oracle, можно использовать
@datasrc
параметр для указания имени DSN. Для подключения, не использующий dsN, строка поставщика предоставляется через параметр @provstr . В поставщик OLE DB для Oracle (Майкрософт) используйте псевдоним сервера Oracle, настроенный в файле TNSNames.Ora для параметра @datasrc. Дополнительные сведения см. в разделе "sp_addlinkedserver" в электронной документации по SQL Server.
Распространенные сообщения об ошибках и способы их устранения
Важно!
В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому убедитесь, что вы внимательно выполните следующие действия. Для дополнительной защиты создайте резервную копию реестра перед его изменением. В этом случае реестр можно восстановить, если возникнет проблема. Дополнительные сведения о резервном копировании и восстановлении реестра щелкните следующий номер статьи, чтобы просмотреть статью в Базе знаний Майкрософт: 322756 Как создать резервную копию и восстановить реестр в Windows.
Вы можете использовать любой из следующих двух методов для получения расширенных сведений о любой ошибке, возникающей при выполнении распределенного запроса.
Метод 1
Подключитесь к SQL Server с помощью SQL Server Management Studio и запустите следующий код, чтобы включить флаг трассировки 7300.
DBCC Traceon(7300)
Метод 2.
Захватить событие OLEDB Errors, которое находится в категории событий "Ошибки и предупреждения" в SQL Profiler. Формат сообщения об ошибке имеет следующий вид:
Интерфейс::Method завершился ошибкой с кодом шестнадцатеричной ошибки.
Вы можете найти шестнадцатеричный код ошибки в файле Oledberr.h, который входит в пакет SDK для MDAC.
Ниже приведен список распространенных сообщений об ошибках, которые могут возникать вместе с информацией об устранении неполадок.
Примечание.
Если вы используете SQL Server 2005 или более поздних версий, эти сообщения об ошибках могут немного отличаться. Однако идентификаторы ошибок этих сообщений об ошибках совпадают с ними в более ранних версиях SQL Server. Поэтому их можно определить по идентификаторам ошибок. Для проблем, связанных с производительностью, выполните поиск в электронной документации ПО SQL Server для раздела "Оптимизация распределенных запросов".
Сообщение 1
Ошибка 7399: поставщик OLE DB "%ls" для связанного сервера "%ls" сообщил об ошибке. %ls
Включите флаг трассировки 7300 или используйте SQL Profiler для записи события ошибок OLEDB для получения расширенных сведений об ошибке OLEDB.
Сообщение 2a
"ORA-12154: TNS:не удалось разрешить имя службы"
Сообщение 2b
"Клиент Oracle(tm) и сетевые компоненты не найдены. Эти компоненты предоставляются Корпорацией Oracle и являются частью клиентского программного обеспечения Oracle версии 7.3.3 (или более поздней версии) "
Эти ошибки возникают при возникновении проблемы с подключением к серверу Oracle. Ознакомьтесь с методами устранения неполадок с подключением к серверу Oracle ниже для получения дополнительных сведений об устранении неполадок.
Сообщение 3
Ошибка 7302. Не удается создать экземпляр поставщика OLE DB MSDAORA для связанного сервера "%ls".
Убедитесь, что файл MSDAORA.dll зарегистрирован правильно. (Файл MSDAORA.dll является поставщиком Microsoft OLE DB для файла Oracle.) Используйте RegSvr32.exe для регистрации поставщик OLE DB для Oracle (Майкрософт).
Примечание.
Если вы используете стороннего поставщика Oracle, а поставщик Oracle не может выполняться за пределами процесса SQL Server, включите его в процессе, изменив параметры поставщика. Чтобы изменить параметры поставщика, используйте один из следующих методов:
Метод 1. Найдите следующий раздел реестра. Затем измените значение записи AllowInProcess (DWORD) на 1. Этот раздел реестра расположен под соответствующим именем поставщика:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName
Метод 2. Выполните следующие действия, чтобы задать параметр Allow inprocess для поставщиков с помощью SQL Server Management Studio (SSMS).
- Откройте SSMS и подключитесь к SQL Server.
- В обозреватель объектов перейдите к поставщикам связанных серверов>объектов>сервера.
- Щелкните правой кнопкой мыши поставщик, который вы хотите настроить, и выберите "Свойства".
- В окне "Параметры поставщика" установите флажок "Включить" для параметра Allow inprocess.
Сообщение 4
Ошибка 7303. Не удается инициализировать объект источника данных поставщика OLE DB "MSDAORA" для связанного сервера "%ls". [Поставщик OLE/DB вернул сообщение: ORA-01017: недопустимое имя пользователя/пароль; вход запрещен] Трассировка ошибок OLE DB [поставщик OLE/DB "MSDAORA" IDBInitialize::Initialize возвращено 0x80040e4d].
Это сообщение об ошибке указывает, что связанный сервер не имеет правильного сопоставления входа. Хранимую
sp_helplinkedsrvlogin
процедуру можно выполнить, чтобы правильно задать сведения для входа. Кроме того, убедитесь, что указаны правильные параметры конфигурации связанного сервера.Сообщение 5
Ошибка 7306: не удается открыть таблицу "%ls" от поставщика OLE DB "MSDAORA" для связанного сервера "%ls". Указанная таблица не существует. [Возвращенное сообщение поставщика OLE/DB: таблица не существует.][Возвращенное сообщение поставщика OLE/DB: ORA-00942: таблица или представление не существует] Трассировка ошибок OLE DB [поставщик OLE/DB "MSDAORA" IOpenRowset::OpenRowset возвращается 0x80040e37: указанная таблица не существует.].
Ошибка 7312: недопустимое использование схемы и /или каталога для поставщика OLE DB "%ls" для связанного сервера "%ls". Было предоставлено четырехкомпонентное имя, но поставщик не предоставляет необходимые интерфейсы для использования каталога и схемы.
Ошибка 7313: указана недопустимая схема или каталог для поставщика "%ls" для связанного сервера "%ls".
Ошибка 7314: поставщик OLE DB "%ls" для связанного сервера "%ls" не содержит таблицу "%ls". Таблица либо не существует, либо текущий пользователь не имеет разрешения на доступ к ней.
Если вы получаете эти сообщения об ошибках, таблица может быть отсутствует в схеме Oracle или у вас могут не быть разрешений на эту таблицу. Убедитесь, что имя схемы введено с помощью верхнего регистра. Алфавитный регистр таблицы и столбцов должен быть указан в системных таблицах Oracle.
На стороне Oracle таблица или столбец, созданный без двойных кавычек, хранится в верхнем регистре. Если таблица или столбец заключены в двойные кавычки, таблица или столбец хранятся как есть.
Следующий вызов показывает, существует ли таблица в схеме Oracle. Этот вызов также показывает точное имя таблицы.
sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
Сообщение 6
Ошибка 7413: не удалось подключиться к связанному серверу "%ls" (поставщик OLE DB "%ls"). Включите делегирование или используйте имя входа текущего пользователя на удаленном SQL Server. Msg 18456, Level 14, State 1, Line 1 Login fail for user '.
Это сообщение об ошибке указывает, что распределенный запрос пытается выполнить для входа, прошедшего проверку подлинности Microsoft Windows, без явного сопоставления входа. В среде операционной системы, в которой делегирование безопасности не поддерживается, для имен входа, прошедших проверку подлинности Windows NT, требуется явное сопоставление с удаленным именем входа и паролем, созданным с помощью
sp_addlinkedsrvlogin
.Сообщение 7
Ошибка 7391. Не удалось выполнить операцию, так как поставщик OLE DB "MSDAORA" для связанного сервера "%ls" не смог начать распределенную транзакцию. Трассировка ошибок OLE DB [поставщик OLE/DB "MSDAORA" ITransactionJoin::JoinTransaction возвращен 0x8004d01b]
Убедитесь, что версии OCI зарегистрированы правильно, как описано ранее в этой статье.
Примечание.
Если все записи реестра верны, загружается файл MtxOCI.dll. Если файл MtxOCI.dll не загружен, вы не можете выполнять распределенные транзакции в Oracle с помощью поставщик OLE DB для Oracle (Майкрософт) или с помощью Microsoft ODBC Driver for Oracle. Если вы используете стороннего поставщика и получаете ошибку 7391, убедитесь, что поставщик OLE DB поддерживает распределенные транзакции. Если поставщик OLE DB поддерживает распределенные транзакции, убедитесь, что координатор распределенных транзакций Майкрософт (MSDTC) работает и имеет доступ к сети.
Сообщение 8
Ошибка 7392. Не удается запустить транзакцию для поставщика OLE DB "MSDAORA" для связанного сервера "%ls". Трассировка ошибок OLE DB [поставщик OLE/DB "MSDAORA" ITransactionLocal::StartTransaction возвращено 0x8004d013: ISOLEVEL=4096].
Поставщик OLE DB вернул ошибку 7392, так как только одна транзакция может быть активной для этого сеанса. Эта ошибка означает, что оператор изменения данных пытается выполнить попытку к поставщику OLE DB, если подключение находится в явной или неявной транзакции, а поставщик OLE DB не поддерживает вложенные транзакции. SQL Server требует такой поддержки, чтобы в определенных условиях ошибки она может завершить действие инструкции изменения данных при продолжении транзакции.
Если
SET XACT_ABORT
задано значение ON, SQL Server не требует поддержки вложенных транзакций от поставщика OLE DB. Таким образом, выполните инструкции перед выполнениемSET XACT_ABORT ON
инструкций изменения данных в удаленных таблицах в неявной или явной транзакции. В этом случае поставщик OLE DB, который используется, не поддерживает вложенные транзакции.
Методы устранения проблем с подключением к серверу Oracle
Чтобы отладить проблемы с подключением Oracle с драйвером Microsoft ODBC для Oracle или поставщик OLE DB для Oracle (Майкрософт), выполните следующие действия.
Используйте служебную программу Oracle SQL Plus (служебную программу запросов на основе командной строки), чтобы убедиться, что вы можете подключиться к Oracle и получить данные.
Примечание.
Если вы не можете подключиться к Oracle и получить данные, при использовании sql*Net Easy Configuration или Oracle Net8 Easy Configuration служебная программа sql*Net Easy Configuration или Oracle Net8 Easy Configuration не удалось подключиться к Oracle и получить данные. Обратитесь к администратору базы данных Oracle (DBA), чтобы убедиться, что необходимые компоненты Oracle установлены и настроены правильно.
Проверьте версию клиента Oracle (версия SQL*Net), установленную на компьютере. Драйвер Microsoft ODBC для Oracle и поставщик OLE DB для Oracle (Майкрософт) требуют установки SQL*Net версии 2.3 или более поздней версии на клиентском компьютере.
Подключение из SQL Plus (средство запроса клиента Oracle) может отображаться как функция, но для правильной работы подключения ODBC/OLE DB необходимо перезапустить компьютер.
Примечание.
При использовании Oracle 8i файл rgs пуст.
Если клиент Oracle установлен, и вы получите сообщение об ошибке, указывающее, что клиентские компоненты Oracle 7.3 или более поздней версии должны быть установлены на компьютере, а затем убедитесь, что ПУТЬ к переменной среды на клиентском компьютере содержит папку, в которой установлен клиент Oracle, например, Oracle_Root\Bin. Если вы не можете найти эту папку, добавьте ее в переменную PATH, чтобы устранить ошибку.
Убедитесь, что файл Ociw32.dll находится в папке Oracle_Root\bin . Этот .dll файл не может существовать в другом расположении на клиентском компьютере. Убедитесь, что библиотеки DLL клиентского компонента Oracle (например, файл Core40.dll и файл Ora*.dll) не существуют вне папки или вложенных папок Oracle_Root .
Убедитесь, что на компьютере установлена одна версия клиента Oracle. Несколько версий SQL*Net не могут существовать на одном клиентском компьютере с помехами и критическими операциями (например, подстановки TNS и псевдонимов).
Корпорация Майкрософт рекомендует установить локальный клиент Oracle, а не сопоставить удаленный клиент Oracle на компьютере, а затем включить его в путь к системе для подключения к Oracle через ODBC/OLE DB. Но поставщик и драйвер тестируются локально установленным клиентом Oracle, а не сетевым ресурсом.