Соединение Oracle с SQL Server
Я пытаюсь связать SQL Server 2005 с базой данных Oracle 10g. Я установил клиент Oracle на сервере SQL и подтвердил, что могу подключиться к базе данных Oracle, используя tnsping и sqlplus. Когда я пытаюсь выполнить запрос в SQL Server, я получаю следующее:
OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD" returned message "ORA-12154: TNS:could not resolve the connect identifier specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD".
Есть идеи? Я попробовал оба следующих запроса без удачи:
select * from openquery(ORA_CSSA2APD, 'select count(rowid) from eservice_op.agent')
select count(rowid) from ORA_CSSA2APD..eservice_op.agent
5 ответов
Я подозреваю, настройки среды. Таким образом, ваш сеанс получает файл TNSNAMES.ORA, а сеанс, лежащий в основе SQL Server, - нет. Я бы проверил, были ли ORACLE_HOME и, возможно, TNS_ADMIN установлены и указывают на.
Можете ли вы использовать синтаксис easy connect для базы данных с подключением к SQL Server.
IE заменяет ORA_CSSA2APD именем хоста:1521/ имя_службы
ORA:12154 обычно означает, что псевдоним db, к которому вы пытаетесь подключиться, не найден в файле tnsnames.ora. (См. http://ora-12154.ora-code.com/ более подробное объяснение.)
Вы должны убедиться, что источник данных является псевдонимом, о котором знает файл tnsnames (на сервере, где находится SQL Server, независимо от того, откуда вы выполняете запросы); SQL Server будет похож на любой другой клиент Oracle и должен знать, куда подключаться и без файла tnsnames.ora, он не будет знать подробности того, где находится база данных Oracle.
Если у вас нет доступа к серверу SQL Server (он есть у отдела резервирования), вам нужно попросить администратора сервера настроить его для вас.
(Свойство Data Source связанного сервера должно быть псевдонимом в псевдониме tnsnames.ora для базы данных, на которую вы пытаетесь связать.)
НТН...
Сообщения об ошибках TNS обычно означают, что соединение имеет недостатки (например, хост недоступен / тайм-аут на указанном порту или просто не знает, на что должен указывать ORA_CSSA2APD).
Необходимо учитывать, используете ли вы 64-битную Windows и 32-битный или 64-битный клиент Oracle (или, возможно, оба). Если у вас есть 32-битное приложение, работающее в 64-битной ОС, пытающееся вызвать Oracle, ему нужен 32-битный клиент Oracle. Использование 32-разрядного клиента в 64-разрядной ОС может быть сложным, и безопаснее НЕ устанавливать его в папку "Program Files (x86)".
Также имейте в виду следующее
В 64-разрядной версии Windows Server 2003 или Windows XP папка%WinDir%\System32 зарезервирована для 64-разрядных приложений. Когда 32-разрядное приложение пытается получить доступ к папке System32, доступ перенаправляется в следующую папку: %WinDir%\SysWOW64
Таким образом, для 64-битных окон 32-битные файлы находятся в папке SysWOW64, а 64-битные - в папке system32.
Эта проблема случилась и со мной, но только с определенными учетными записями пользователей Windows. Сочетание включения опции поставщика "Разрешить inprocess" для обеспечения OraOLEDB.Oracle (SSMS > Объекты сервера> Связанные серверы> Обеспечивает> OraOLEDB.Oracle), перезапуска службы Windows SQL Server и, наконец, настройки разрешений для файла TNSNAMES.ora непосредственно.
Мы обнаружили, что SQL Server по неизвестной причине начал искать файл TNSNAMES.ORA в расположениях Oracle по умолчанию.
Мы смогли разместить файлы TNSNAMES.ORA в следующих местах с успешными результатами:
Для SQL Server 32-разрядная в 32-разрядной ОС или 64-разрядная в 64-разрядной ОС
%ProgramFiles%\Oracle
%ProgramFiles%\Oracle\network\admin
Для SQL Server 32-разрядная на 64-разрядной ОС
%ProgramFiles% (x86)\Oracle
%ProgramFiles% (x86)\Oracle\network\admin
Мы тоже смогли подключиться, используя SQL*Plus, но SQL Server не смог. Важно отметить, что SQL * Plus не использовал тот же файл TNSNAMES.ORA. Вот почему один работал.