Настройка сервера, связанного с базой данных Oracle, на сервере SQL Server и устранение связанных с ним неполадок

Переводы статьи Переводы статьи
Код статьи: 280106 - Vizualiza?i produsele pentru care se aplic? acest articol.
Внимание! Статья содержит сведения о внесении изменений в системный реестр. Перед внесением изменений рекомендуется создать резервную копию системного реестра и изучить процедуру его восстановления. Дополнительные сведения о создании резервной копии, восстановлении и изменении реестра см. в следующей статье базы знаний Майкрософт:
256986 Описание реестра Microsoft Windows
Развернуть все | Свернуть все

В этой статье

Аннотация

В статье подробно рассмотрены вопросы настройки сервера, связывающего компьютер, на котором установлен сервер Microsoft SQL Server, с базой данных Oracle, а также описаны некоторые основные процедуры решения наиболее распространенных проблем, возникающих при настройке сервера, связанного с базой данных Oracle.

Действия по настройке связанного сервера с базой данных Oracle

  1. Необходимо установить клиентское программное обеспечение Oracle на компьютер с установленным сервером Microsoft SQL Server, на котором настраивается связанный сервер.
  2. Установите требуемый драйвер на компьютер с установленным сервером SQL Server. Корпорация Майкрософт поддерживает только драйвер Microsoft ODBC для баз данных Oracle и поставщик OLE DB для Oracle. В случае возникновения проблем с драйвером или поставщиком, разработанным сторонним производителем и используемым для подключения к базе данных Oracle, необходимо обратиться к соответствующему разработчику.
  3. При использовании поставщика Microsoft OLE DB для баз данных Oracle и драйвера Microsoft ODBC для баз данных Oracle примите во внимание следующее.
    • Для работы поставщика OLE DB и драйвера ODBC, входящих в состав компонентов доступа к данным Microsoft (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) так, как показано в следующей таблице:
                 Microsoft Windows NT,
      Oracle     Microsoft Windows 95,
      Клиент    Windows 98 и Windows 98, второе издание    Microsoft Windows 2000 
      --------------------------------------------------------------------------
      
      7.x        [HKEY_LOCAL_MACHINE\SOFTWARE     [HKEY_LOCAL_MACHINE\SOFTWARE
                 \Microsoft\TransactionServer     Microsoft\MSDTC\MTxOCI]
                 \Local Computer\My Computer]     "OracleXaLib"="xa73.dll"
                 "OracleXaLib"="xa73.dll"         "OracleSqlLib"="SQLLib18.dll"
                 "OracleSqlLib"="SQLLib18.dll"    "OracleOciLib"="ociw32.dll"
                 "OracleOciLib"="ociw32.dll"
      
      8,0        [HKEY_LOCAL_MACHINE\SOFTWARE     [HKEY_LOCAL_MACHINE\SOFTWARE
                 \Microsoft\Transaction Server    \Microsoft\MSDTC\MTxOCI]
                 \Local Computer\My Computer]     "OracleXaLib"="xa80.dll"
                 "OracleXaLib"="xa80.dll"         "OracleSqlLib"="sqllib80.dll"
                 "OracleSqlLib"="sqllib80.dll"    "OracleOciLib"="oci.dll"
                 "OracleOciLib"="oci.dll"
      
      8.1        [HKEY_LOCAL_MACHINE\SOFTWARE     [HKEY_LOCAL_MACHINE\SOFTWARE
                 \Microsoft\Transaction Server    \Microsoft\MSDTC\MTxOCI]
                 \Local Computer\My Computer]     "OracleXaLib"="oraclient8.dll"
                 "OracleXaLib"="oraclient8.dll"   "OracleSqlLib"="orasql8.dll"
                 "OracleSqlLib"="orasql8.dll"     "OracleOciLib"="oci.dll"
                 "OracleOciLib"="oci.dll"
  4. Перезапустите компьютер с сервером SQL Server после установки клиентского программного обеспечения Oracle.
  5. В компьютере с сервером SQL Server настройте связанный сервер, используя следующий сценарий.
    -- Добавление связанного сервера (руководство SQL Server Books Online)
    /* sp_addlinkedserver [@server =] 'сервер' 
        [, [@srvproduct =] 'название_продукта']
        [, [@provider =] 'имя_поставщика'] 
        [, [@datasrc =] 'источник_данных'] 
        [, [@location =] 'размещение'] [, [@provstr =] 'строка_поставщика'] 
        [, [@catalog =] 'каталог']
    */ 
    
     EXEC sp_addlinkedserver   'Ora817Link',  'Oracle',  'MSDAORA',  'oracle817'
    
    -- Добавление подключения к связанному серверу:
    /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'
        [,[@useself =] 'useself']
        [,[@locallogin =] 'locallogin']
        [,[@rmtuser =] 'rmtuser']
        [,[@rmtpassword =] 'rmtpassword']
    */ 
    
    EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger'
    
    -- Справка по связанному серверу:
    EXEC sp_linkedservers
    EXEC sp_helpserver
    select * from sysservers
Примечание. При использовании драйвера Microsoft ODBC для баз данных Oracle можно использовать параметр @datasrc для указания DSN-имени. При использовании подключения без DSN-имени строка поставщика добавляется с помощью параметра @provstr. При использовании поставщика Microsoft OLE DB для баз данных Oracle используйте псевдоним сервера Oracle, который настраивается в файле TNSNames.Ora для параметра @datasrc. Дополнительные сведения см. в разделе «sp_addlinkedserver» библиотеки SQL Server Books Online.

Типичные сообщения об ошибках и способы их устранения

Предупреждение. Неправильное изменение параметров системного реестра с помощью редактора реестра или любым иным путем может привести к серьезным неполадкам и к необходимости переустановки операционной системы. Корпорация Майкрософт не гарантирует устранения этих неполадок. Ответственность за изменение реестра несет пользователь.

Чтобы получать расширенные сведения о любой ошибке, которая появляется во время выполнения распределенного запроса, можно использовать один из следующих способов.
  • Способ 1
    В анализаторе запросов для включения флага трассировки 7300 активируйте выполнение этого кода:
    DBCC Traceon(7300)
  • Способ 2
    Запишите событие «OLEDB Errors», расположенное в категории «Errors and Warnings» в приложении SQL Profiler. Формат сообщения:
    Интерфейс::Ошибка в методе, код ошибки шестнадцатеричный.
    Шестнадцатеричный код ошибки можно посмотреть в файле Oledberr.h, который находится в пакете MDAC Software Development Kit (набор разработчика SDK).
Ниже представлен список десяти типичных сообщений об ошибках и способы устранения соответствующих проблем.

Примечание. При использовании SQL Server 2005 сообщения об ошибках могут несколько отличаться. Однако, коды (ID) этих сообщений об ошибках такие же, как и в SQL Server 2000. Поэтому ошибки можно идентифицировать по кодам (ID).

Примечание.По вопросам, связанным с производительностью, найдите раздел «Optimizing Distributed Queries» в книге SQL Server Books Online.
  • Сообщение 1
    Ошибка 7399: Поставщик OLE DB '%ls' сообщил об ошибке. %ls
    Включите флаг трассировки 7300 или используйте приложение SQL Profiler для записи события «OLEDB Errors», чтобы получить расширенные сведения об ошибке OLEDB.
  • Сообщение 2а
    «ORA-12154: TNS: не удается разрешить имя сервера»
    Сообщение 2б
    «Не найден клиент Oracle и сетевые компоненты. Компоненты предоставляются корпорацией Oracle и входят в клиентское программное обеспечение Oracle версии 7.3.3 или более поздней»
    Дополнительные сведения об устранении ошибок подключения к базе данных Oracle см. в следующей статье базы знаний Майкрософт:
    259959 Отладка ошибок подключения к серверу Oracle с помощью драйвера ODBC и поставщика OLE DB (эта ссылка может указывать на содержимое полностью или частично на английском языке)
  • Сообщение 3
    Ошибка 7302: Не удалось создать экземпляр поставщика OLE DB 'MSDAORA'
    Убедитесь в правильности регистрации файла MSDAORA.dll. (Файл MSDAORA.dll – это поставщик Microsoft OLE DB для баз данных Oracle.) Используйте программу RegSvr32.exe для регистрации поставщика Microsoft OLE DB для баз данных Oracle. Если выполнить регистрацию не удалось, переустановите компоненты MDAC. Для получения дополнительных сведений о компонентах MDAC обратитесь на следующий веб-узел корпорации Майкрософт:
    http://msdn.microsoft.com/data/Default.aspx
    Примечание. Если используется поставщик Oracle стороннего производителя, но он не может выполняться вне процесса SQL Server, разрешите этому поставщику выполняться внутри процесса посредством изменения параметров поставщика. Для решения этой проблемы воспользуйтесь одним из следующих способов.
    • Способ 1
      Найдите следующий раздел реестра. Затем измените значение параметра AllowInProcess (DWORD) на 1. Этот раздел реестра расположен ниже соответствующего имени поставщика
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName
    • Способ 2
      Задайте значение параметра Allow InProcess напрямую через диспетчер SQL Server Enterprise Manager при добавлении нового связанного сервера. Выберите команду Параметры поставщика, а затем установите флажок Allow InProcess.
  • Сообщение 4
    Ошибка 7303: Не удалось инициализировать объект-источник данных поставщика OLE DB 'MSDAORA'. [Поставщик OLE/DB возвратил сообщение: ORA-01017: Неправильное имя пользователя /пароль; вход запрещен] OLE DB трассировка ошибки [OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80040e4d].
    Это сообщение об ошибке свидетельствует о том, что связанный сервер имеет неправильное сопоставление имени пользователя. Чтобы задать правильные сведения, связанные с входом в систему, можно запустить сохраненную процедуру sp_helplinkedsrvlogin. Кроме того, убедитесь, что для связанного сервера указаны правильные параметры.
  • Сообщение 5
    Ошибка 7306: Не удалось открыть таблицу ' %ls' из поставщика OLE DB 'MSDAORA'. Указанная таблица не существует. [Поставщик OLE/DB возвратил сообщение: Таблица не существует.][Поставщик OLE/DB возвратил сообщение: ORA-00942: таблица или представление не существуют] OLE DB трассировка ошибки [OLE/DB Provider 'MSDAORA' IOpenRowset::OpenRowset returned 0x80040e37: Указанная таблица не существует].
    Ошибка 7312: Неправильное использование схемы и/или каталога для поставщика OLE DB '%ls'. Было представлено имя из четырех частей. Поставщик не содержит необходимые интерфейсы для использования каталога и/или схемы.
    Ошибка 7313: Поставщику указаны неправильная схема или каталог '%ls'.
    Ошибка 7314: Поставщик OLE DB '%ls' не содержит таблицу '%ls'
    Если появились такие сообщения об ошибках, в схеме Oracle может отсутствовать таблица, либо у пользователя отсутствуют разрешения на доступ к этой таблице. Убедитесь, что имя схемы было введено с использованием символов верхнего регистра. Регистр в именах таблиц и столбцов должен быть идентичен указанному в системных таблицах Oracle.

    На стороне базы данных Oracle имя таблицы или столбца, которое создано без использования двойных кавычек, хранится написанным строчными буквами. Если имя таблицы или столбца заключено в двойные кавычки, оно хранится в том виде, в котором было написано.

    Следующий вызов показывает, существует ли таблица в схеме Oracle и точное имя таблицы.
    sp_tables_ex  @table_server=Ora817Link, @table_schema='имя_вашей_схемы'
    Дополнительные сведения о сообщении об ошибке 7306 см. в следующей статье базы знаний Майкрософт:
    240340 Распределенный запрос SQL с Oracle вызывает сообщение об ошибке «Не удается открыть таблицу» (эта ссылка может указывать на содержимое полностью или частично на английском языке)
  • Сообщение 6
    Ошибка 7413: Не удалось выполнить проверку подлинности Windows NT, поскольку делегирование недоступно.
    Сообщение об ошибке 18456, Уровень 14, Состояние 1, Линия 1 Ошибка входа пользователя '\'.
    Эти сведения получены из книги SQL Server Books Online:
    Это сообщение об ошибке показывает, что распределенный запрос выполнялся для зарегистрированного имени пользователя Microsoft Windows без явного сопоставления имен. В операционной системе, которая не поддерживает делегирование безопасности, требуется явное сопоставление зарегистрированных имен пользователей Windows NT с удаленным именем пользователя и паролем, которые были созданы с помощью процедуры sp_addlinkedsrvlogin.
  • Сообщение 7
    Ошибка 7354: Поставщик OLE DB 'MSDAORA' предоставил неправильные метаданные для столбца '%ls'. Тип данных не поддерживается.
    Если получено данное сообщение, возможно, существует ошибка, описанная в следующей статье базы знаний Майкрософт:
    243027 Исправление: Цифровая колонка базы данных Oracle вызывает ошибку 7354 (эта ссылка может указывать на содержимое полностью или частично на английском языке)
  • Сообщение 8
    Ошибка 7356: Поставщик OLE DB 'MSDAORA' предоставил противоречивые данные для столбца. Метаданные были изменены во время выполнения.
    Если в запросе связанного сервера используется представление Oracle, может возникнуть проблема, описанная в следующей статье базы знаний Майкрософт:
    251238 Распределенные запросы поставщика MSDAORA возвращают ошибку 7356 (эта ссылка может указывать на содержимое полностью или частично на английском языке)
  • Сообщение 9
    Ошибка 7391: Операция не может быть выполнена, поскольку поставщик OLE DB 'MSDAORA' не поддерживает распределенные транзакции. OLE DB трассировка ошибки [OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]
    Проверьте, правильно ли зарегистрированы версии OCI, как было описано ранее в этой статье.

    Примечание. Если все записи системного реестра правильны, загружается файл MtxOCI.dll. Если файл MtxOCI.dll не загружен, невозможно выполнить распределенные транзакции в отношении базы данных Oracle, используя поставщик Microsoft OLE DB для баз данных Oracle или драйвер Microsoft ODBC для баз данных Oracle. Если используется поставщик стороннего производителя и появляется ошибка 7391, убедитесь, что используемый поставщик OLE DB поддерживает распределенные транзакции. Если поставщик OLE DB поддерживает распределенные транзакции, убедитесь, что запущен координатор распределенных транзакций Microsoft (Microsoft Distributed Transaction Coordinator, MSDTC).
  • Сообщение 10
    Ошибка 7392: Невозможно начать транзакцию для поставщика OLE DB 'MSDAORA'. OLE DB трассировка ошибки [OLE/DB Provider 'MSDAORA' ITransactionLocal::StartTransaction returned 0x8004d013: ISOLEVEL=4096].
    Эти сведения получены из книги SQL Server Books Online:
    Поставщик OLE DB возвратил ошибку 7392, потому что в этом сеансе может быть активна только одна транзакция. Эта ошибка показывает, что в отношении поставщика OLE DB была предпринята попытка выполнить инструкцию изменения данных. Строка подключения находится в явной или неявной транзакции, а поставщик OLE DB не поддерживает вложенные транзакции. Поддержка вложенных транзакций необходима для того, чтобы при определенных условиях возникновения ошибки сервер SQL Server мог ограничить влияние инструкции изменения данных, продолжая выполнение транзакции.
    Если параметр SET XACT_ABORT имеет значение ON, серверу SQL Server не требуется поддержка вложенных транзакций от провайдера OLE DB. Поэтому выполняйте инструкцию SET XACT_ABORT ON перед использованием инструкций изменения данных для удаленных таблиц в явных или неявных транзакциях. Выполните это, если используемый поставщик OLEDB не поддерживает вложенные транзакции.

Ссылки

Дополнительные сведения см. в следующих статьях базы знаний Майкрософт:
244661 Ограничения поставщика Microsoft OLE DB и драйвера Microsoft ODBC для баз данных Oracle (эта ссылка может указывать на содержимое полностью или частично на английском языке)
259959 Отладка ошибок подключения к серверу Oracle с помощью драйвера ODBC и поставщика OLE DB (эта ссылка может указывать на содержимое полностью или частично на английском языке)
239719 Возможность поддержки драйвера Microsoft ODBC/поставщика OLE DB для Oracle со ссылкой на Oracle 8.x (эта ссылка может указывать на содержимое полностью или частично на английском языке)
193893 Сведения об использовании баз данных Oracle с Microsoft Transaction Server и компонентами COM+ (эта ссылка может указывать на содержимое полностью или частично на английском языке)
191168 Ошибка «-2147168246 (8004d00a)» Не выполнена регистрация на вызов транзакции объекта (эта ссылка может указывать на содержимое полностью или частично на английском языке)
За дополнительными сведениями об использовании связанного сервера с базой данных DB2 обратитесь к следующим статьям базы знаний Майкрософт:
218590 Настройка источников данных для поставщика Microsoft OLE DB для базы данных DB2 (эта ссылка может указывать на содержимое полностью или частично на английском языке)
216428 Настройка драйвера Microsoft ODBC для базы данных DB2 (эта ссылка может указывать на содержимое полностью или частично на английском языке)

Свойства

Код статьи: 280106 - Последний отзыв: 15 мая 2011 г. - Revision: 8.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Ключевые слова: 
kbsqlmanagementtools kbhowtomaster KB280106

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com