Как настроить связанный сервер с базой данных Oracle на SQL 2000/2005? - PullRequest
21 голосов
/ 21 ноября 2008

Я могу создать и выполнить пакет DTS, который копирует таблицы из удаленной базы данных Oracle на локальный сервер SQL, но я хочу настроить соединение с базой данных Oracle как связанный сервер.

В пакете DTS в настоящее время используется поставщик Microsoft OLE DB для Oracle со следующими свойствами:

  • Источник данных: SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=acc)));uid=*UserName*;pwd=*UserPassword*;
  • Пароль: Пароль пользователя
  • ID пользователя: Имя пользователя
  • Разрешить сохранение пароля: true

Как мне настроить подключенный сервер к базе данных Oracle, используя источник данных, определенный выше?

Ответы [ 2 ]

36 голосов
/ 26 ноября 2008

Мне удалось настроить связанный сервер для удаленной базы данных Oracle, которая в итоге стала многошаговой:

  1. Установка драйверов Oracle ODBC на SQL Server.
  2. Создание системного DSN для базы данных Oracle на SQL Server.
  3. Создание связанного сервера на сервере 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 из сквозного запроса во внешний оператор выбора решило эту проблему для меня.

1 голос
/ 13 июля 2009

У меня была такая же проблема. Я часами разговаривал с Microsoft по телефону, и у них не было решения. Ни одна из этих настроек «тайм-аут соединения» мне не помогла.

Чтобы решить эту проблему, я создал задание DTS, которое запускает процедуру, которая обновляет время только в одной строке, в одном столбце, каждые две минуты. Затем я установил репликацию между SQL Server и Oracle, по расписанию для репликации этого изменения одной ячейки с SQL на Oracle каждые 3 минуты. Он поддерживает связь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...