Как создать Linked Server для удаленного ODBC?

У меня есть источник ODBC WebTrends на сервере server1 и SQL Server 2005 на сервере server2. Я хочу подключиться к этому ODBC с SQL Server на server2. До сих пор мне удалось подключиться к этому ODBC из SQL Server, который находится на том же сервере, используя следующее определение для связанного сервера:

EXEC sp_addlinkedserver 
@server = N'WT_ODBC', 
@provider=N'MSDASQL', 
@datasrc=N'WT_ODBC_test'

EXEC sp_addlinkedsrvlogin 
@rmtsrvname=N'WT_ODBC',
@useself=N'False',
@locallogin=N'sa',
@rmtuser=N'administrator',
@rmtpassword='########'

Я могу запросить этот связанный сервер следующим образом:

SELECT *
FROM OPENQUERY(WT_ODBC, 'SELECT * FROM CompleteViewV85.DownloadedFiles'); 

Кстати, я не могу запросить его с именем из четырех частей, как это:

SELECT *
FROM WT_ODBC.[Complete View V8.5].CompleteViewV85.DownloadedFiles

Я получаю следующую ошибку:

Invalid use of schema or catalog for OLE DB provider "MSDASQL" for linked server   
"WT_ODBC". A four-part name was supplied, but the provider does not expose the  
necessary   interfaces to use a catalog or schema.

... и я проверил, что опция "Только нулевой уровень" не проверена. Но это не так проблематично, так как первый запрос работает.

Моя проблема - как подключиться к этому ODBC, но с другого сервера? Я пошел на server2, и там в SQL Server я создал следующий связанный сервер:

EXEC sp_addlinkedserver 
@server = N'WT_ODBC', 
@srvproduct=N'Microsoft OLE DB Provider for ODBC', 
@provider=N'MSDASQL', 
@datasrc=N'WT_ODBC_test',
@location=N'10.254.251.20'

EXEC sp_addlinkedsrvlogin 
@rmtsrvname=N'WT_ODBC',
@useself=N'False',
@locallogin=N'sa',
@rmtuser=N'administrator',
@rmtpassword='########'

... где я поместил IP-адрес server1 в качестве параметра @location. Связанный сервер, созданный таким образом, не может подключиться к ODBC на сервере server1. Когда я пытаюсь выполнить тот же запрос, который работает на сервере server1, я получаю следующую ошибку:

Cannot get the column information from OLE DB provider "MSDASQL" for linked server  
"WT_ODBC".

Помогите? Кто то? Пожалуйста?:)

Заранее спасибо.

2 ответа

Решение

Работает ли он из источников ODBC в Windows, когда вы тестируете соединение? В Administrative Tools\Data Sources (ODBC)

КСТАТИ, OPENQUERY хороший способ получить данные из "необычных" (из-за отсутствия лучшего слова) источников, потому что запрос является сквозным. Команда запроса отправляется на удаленный сервер, выполняется там и возвращаются только результаты.

Если вы не используете открытый запрос, это зависит от оптимизатора. Если удаленным сервером является SQL-сервер, DB2, Oracle, оптимизатор это выяснит. Если это что-то необычное, он может начать перемещать все данные таблицы, а затем начать фильтрацию столбцов и строк на локальном компьютере - намного медленнее.

Я бы сказал, что не использовать @location параметр, но вместо этого настройте свой WT_ODBC_test Источник данных ODBC правильно. Вам необходимо настроить его на server2, конечно.

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