Я смог установить связанный сервер к удаленной базе данных Oracle, которая закончила тем, что была многоступенчатым процессом:
Шаг 1: Установите драйверы ODBC Oracle на сервере
a. Загрузите необходимое Моментальный Клиент Oracle пакеты: Основной, ODBC и SQL*Plus (дополнительно)
b. Разархивируйте пакеты к локальному каталогу на SQL-сервере, обычно C:\Oracle
. Это должно привести к [каталог] как C:\Oracle\instantclient_10_2
, который будет значением [каталога], на который ссылаются в остальной части этого ответа.
c. Создайте текстовый файл, названный 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 под эти слушатели .
Эти OracleTnsName
может быть любое имя, которое Вы хотите присвоить источнику данных Oracle и будете использоваться при установке системы DSN. Можно также использовать синтаксис выше для определения нескольких имен TNS в том же файл tnsnames.ora при желании.
d. Добавьте [каталог] к системе PATH
переменная среды.
e. Создайте новую системную переменную, названную TNS_Admin
, который имеет значение [каталога]
f. Выполнитесь [directory]\odbc_install.exe
утилита для установки драйверов ODBC Oracle.
г. Рекомендуется, чтобы Вы перезагрузили SQL-сервер, но не могли быть необходимыми. Кроме того, можно хотеть предоставить права доступа этому каталогу для SQL-сервера и пользовательских идентификационных данных агента SQL.
Шаг 2: Создайте Системный DNS, который использует драйвер
a ODBC Oracle. Откройтесь инструмент ODBC Data Source Administrator . [Средства администрирования-> Источники данных (ODBC)]
b. Выберите вкладку System DSN и затем нажмите кнопку Add.
c. В списке драйверов выберите Oracle в instantclient {версия} . (например, 'Oracle в instantclient 10_2'), и затем нажимают кнопку Finish.
d. Определите следующее:
Data Source Name
: {Система Имя DSN} Description
: {оставляют пустыми/пустыми} TNS Service Name
: должен иметь OracleTnsName
, Вы определили в tnsnames.ora
, перечисленный файл, выбирает его как значение. e. Нажмите кнопку Test Connection. Вам нужно предложить обеспечить {пароль пользователя 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. См. КБ 280106 для получения информации о поиске и устранении неисправностей проблем связанного сервера Oracle.
Запросы связанного сервера
Oracle можно использовать OPENQUERY для выполнения запросов к внешнему источнику данных на связанном сервере Oracle, но знать, что для очень большого recordsets можно получить ORA-01652
сообщение об ошибке, если Вы определяете ORDER BY
пункт в запросе к внешнему источнику данных. При перемещении ORDER BY
пункт от запроса к внешнему источнику данных до внешнего избранного оператора решил эту проблему для меня.
У меня была такая же проблема. Я часами разговаривал по телефону с Microsoft, и у них не было решения. Ни одна из настроек "тайм-аута соединения" мне не помогла.
Чтобы решить эту проблему, я создал задание DTS, которое запускает процедуру, которая обновляет время только в одной строке в одном столбце каждые две минуты. Затем я настраиваю репликацию между SQL Server и Oracle, по расписанию репликацию этого единственного изменения ячейки с SQL на Oracle каждые 3 минуты. Поддерживает соединение!