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

Я могу создать и выполнить пакет 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 с использованием источника данных, определенного выше?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
21
0
81 108
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

  1. Установите драйверы Oracle ODBC на SQL Server.
  2. Создайте системный DSN для базы данных Oracle на SQL Server.
  3. Создайте связанный сервер на сервере SQL с помощью системного DSN.

Шаг 1. Установите драйверы Oracle ODBC на сервер

а. Загрузите необходимые пакеты Мгновенный клиент Oracle: Basic, ODBC и SQL * Plus (необязательно)

б. Разархивируйте пакеты в локальный каталог на сервере 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.

е. Создайте новую системную переменную среды с именем TNS_Admin, которая имеет значение [каталог]

f. Запустите служебную программу [directory]\odbc_install.exe, чтобы установить драйверы Oracle ODBC.

грамм. Рекомендуется перезагрузить сервер SQL, но это может быть необязательно. Кроме того, вы можете захотеть предоставить этому каталогу разрешения безопасности для удостоверений пользователей SQL-сервера и агента SQL.

Шаг 2. Создайте системный DNS, использующий драйвер Oracle ODBC

а. Откройте инструмент Администратор источника данных ODBC. [Администрирование -> Источники данных (ODBC)]

б. Выберите вкладку Системный DSN и нажмите кнопку Добавить.

c. В списке драйверов выберите Oracle в Instantclient {версия}. (например, «Oracle в Instantclient 10_2»), а затем нажмите кнопку «Готово».

d. Укажите следующее:

  • 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. См. КБ 280106 для получения информации об устранении проблем, связанных с сервером Oracle.

Запрос связанного сервера Oracle

Вы можете использовать ОТКРЫТЫЙ ЗАПРОС для выполнения сквозных запросов на связанном сервере Oracle, но имейте в виду, что для очень больших наборов записей вы можете получить сообщение об ошибке ORA-01652, если вы укажете предложение ORDER BY в сквозном запросе. Перемещение предложения ORDER BY из сквозного запроса во внешний оператор выбора решило эту проблему для меня.

Привет, я обнаружил, что [srvproduct] имеет то же значение, что и [datasrc] при вызове sp_addlinkedserver. Также хотел бы спросить вас, если установить Oracle 11g express и ODT с ODAC 11.1, смогу ли я протестировать связанный сервер с Oracle.

Sujit Prabhakaran 16.07.2012 08:36

Вопрос / ответ был опубликован в 2008 году до Oracle 11g. Попытка настроить новый связанный сервер, вероятно, должна быть такой же, но я точно не знаю.

Oppositional 22.07.2012 04:17

Спасибо за прекрасный ответ. Помог мне настроить и запустить связанный сервер Oracle за пару часов. Чтобы добавить, это, похоже, отлично работает с SQL 2012 и Oracle 11g R2.

Cashley 07.03.2013 20:12

Находясь в Швеции, мне пришлось создать еще одну переменную среды, чтобы наши умлауты (åäö) работали: NLS_LANG = SWEDISH_SWEDEN.WE8ISO8859P1

idstam 31.03.2014 10:51

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

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

Другие вопросы по теме