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


Мне удалось настроить связанный сервер с удаленной базой данных Oracle, что в итоге оказалось многоступенчатым процессом:
Шаг 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, выберите его в качестве значения.е. Нажмите кнопку Проверить соединение. Вам будет предложено ввести {пароль пользователя 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 из сквозного запроса во внешний оператор выбора решило эту проблему для меня.
Вопрос / ответ был опубликован в 2008 году до Oracle 11g. Попытка настроить новый связанный сервер, вероятно, должна быть такой же, но я точно не знаю.
Спасибо за прекрасный ответ. Помог мне настроить и запустить связанный сервер Oracle за пару часов. Чтобы добавить, это, похоже, отлично работает с SQL 2012 и Oracle 11g R2.
Находясь в Швеции, мне пришлось создать еще одну переменную среды, чтобы наши умлауты (åäö) работали: NLS_LANG = SWEDISH_SWEDEN.WE8ISO8859P1
У меня такая же проблема. Я часами разговаривал по телефону с Microsoft, и у них не было решения. Ни одна из настроек "тайм-аута соединения" мне не помогла.
Чтобы решить эту проблему, я создал задание DTS, которое запускает процедуру, которая обновляет время только в одной строке в одном столбце каждые две минуты. Затем я настраиваю репликацию между SQL Server и Oracle, по расписанию репликацию этого единственного изменения ячейки с SQL на Oracle каждые 3 минуты. Поддерживает связь!
Привет, я обнаружил, что [srvproduct] имеет то же значение, что и [datasrc] при вызове sp_addlinkedserver. Также хотел бы спросить вас, если установить Oracle 11g express и ODT с ODAC 11.1, смогу ли я протестировать связанный сервер с Oracle.