Мне удалось настроить связанный сервер для удаленной базы данных Oracle, которая в итоге стала многошаговой:
- Установка драйверов Oracle ODBC на SQL Server.
- Создание системного DSN для базы данных Oracle на SQL Server.
- Создание связанного сервера на сервере SQL с использованием System DSN.
Шаг 1. Установите драйверы Oracle ODBC на сервер
а. Загрузите необходимые Oracle Instant Client пакеты: Basic, ODBC и SQL * Plus (необязательно)
б. Распакуйте пакеты в локальный каталог на сервере SQL, обычно C:\Oracle
. Это должно привести к [каталогу], подобному C:\Oracle\instantclient_10_2
, который будет значением [каталога], на который есть ссылка в остальной части этого ответа.
с. Создайте текстовый файл с именем tnsnames.ora
в клиенте мгновенного доступа [каталог], который содержит следующее:
OracleTnsName =
(
DESCRIPTION=
(
ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
)
(
CONNECT_DATA = (SERVICE_NAME=acc)
)
)
Примечание. Фактические значения HOST
, PORT
и SERVICE_NAME
зависят от сервера Oracle, к которому вы устанавливаете соединение. Эту информацию часто можно найти с помощью инструментов сетевого клиента Oracle в разделе listeners .
OracleTnsName
может быть любым именем, которое вы хотите назначить источнику данных Oracle, и будет использоваться при настройке системного DSN. Вы также можете использовать приведенный выше синтаксис для определения нескольких имен TNS в одном и том же tnsnames.ora файле, если это необходимо.
d. Добавьте [каталог] в системную PATH
переменную среды.
е. Создайте новую системную переменную среды с именем TNS_Admin
, которая имеет значение [каталог]
ф. Выполните утилиту [directory]\odbc_install.exe
для установки драйверов Oracle ODBC.
г. Рекомендуется перезагрузить сервер SQL, но в этом нет необходимости. Также может потребоваться предоставить разрешения безопасности для этого каталога для идентификаторов пользователей сервера SQL и агента SQL.
Шаг 2. Создание системного DNS, использующего драйвер Oracle ODBC
а. Откройте инструмент ODBC Data Source Administrator . [Администрирование -> Источники данных (ODBC)]
б. Выберите вкладку System DSN, а затем нажмите кнопку Добавить.
с. В списке драйверов выберите Oracle in instantclient {версия} . (например, «Oracle in instantclient 10_2»), а затем нажмите кнопку «Готово».
* * +1071 д. Укажите следующее:
Data Source Name
: {Имя DSN системы}
Description
: {оставить пустым / пустым}
TNS Service Name
: в списке должен быть указан OracleTnsName
, определенный вами в файле tnsnames.ora
, выберите его в качестве значения.
- ID пользователя : {имя пользователя Oracle}
е. Нажмите кнопку «Проверить соединение». Вам будет предложено ввести {пароль пользователя Oracle}. Если все пройдет хорошо, тест пройдёт успешно.
Шаг 3: Создание связанного сервера в SQL с базой данных Oracle
Откройте окно запроса на SQL-сервере и выполните следующее:
EXEC sp_addlinkedserver
@server = '{Linked Server Name}'
,@srvproduct = '{System DSN Name}'
,@provider = 'MSDASQL'
,@datasrc = '{System DSN Name}'
EXEC sp_addlinkedsrvlogin
@rmtsrvname = '{Linked Server Name}'
,@useself = 'False'
,@locallogin = NULL
,@rmtuser = '{Oracle User Name}'
,@rmtpassword = '{Oracle User Password}'
Примечание: {Linked Server Name}
может быть любым, что вы хотите использовать при обращении к серверу Oracle, но {System DNS Name}
должно соответствовать имени системного DSN, которое вы создали ранее.
{Oracle User Name}
должен совпадать с идентификатором пользователя, используемым системным DSN, а {Oracle User Password}
должен совпадать с тем, который вы использовали для успешного тестирования соединения ODBC. См. KB 280106 для получения информации об устранении проблем, связанных с сервером Oracle.
Запрос к связанному серверу Oracle
Вы можете использовать OPENQUERY для выполнения сквозных запросов на связанном сервере Oracle, но помните, что для очень больших наборов записей вы можете получить сообщение об ошибке ORA-01652
, если вы укажете предложение ORDER BY
в сквозном запросе. Перемещение предложения ORDER BY
из сквозного запроса во внешний оператор выбора решило эту проблему для меня.