Хочу привести пример создания связанных серверов на примере SQL Server и Firebird.
SQL Server позволяет выполнять команды источников данных OLE DB на удаленных серверах с помощью конфигурации связанных серверов.
Подробнее о конфигурации связанных серверов можно прочитать в BOL .
Из приведенной схемы становиться ясно что нам требуется OLE DB провайдер для соединения с сервером Firebird. Я выбрал бесплатную версию драйвера IBprovider :
Итак, инструкция к действиям:
IBProvider Free Edition - бесплатная версия, основанная на ядре коммерческого провайдера IBProvider v3. В состав дистрибутива включены следующие компоненты: IBProvider v3 Free, примеры кода, справочная документация, а так же библиотека для работы с OLE DB-провайдерами для Visual Studio 2003/2005 и C++ Builder.
- Загружаем и устанавливаем IBProvider Free c сайта http://www.ibprovider.com
- Открываем SSMS и находим установленный провайдер:
В свойствах провайдера отмечаем свойства: Dynamic Parametr и Allow inprocess. - Создаем связанный сервер
USE master
GO
EXEC sp_addlinkedserver
@server = N'MyLinkedServer', --имя сервера (произольное)
@srvproduct=N'FireBird',
@provider=N'LCPI.IBProvider.3.Free', --имя провайдера
@datasrc=N'127.0.0.1:c:\gb\nk.gdb', --DataSource
@provstr=N'
user=SYSDBA;password=masterkey;
ctype=WIN1251;
truncate_char=false;
support_odbc_query=true;
auto_commit=true;'
GO
/* Подробнее о параметрах provider string читать на сайте IBProvider */
EXEC sp_serveroption @server=N'MyLinkedServer', @optname=N'data access', @optvalue=N'true'
EXEC sp_serveroption @server=N'MyLinkedServer', @optname=N'rpc', @optvalue=N'true'
EXEC sp_serveroption @server=N'MyLinkedServer', @optname=N'rpc out', @optvalue=N'true'
EXEC sp_serveroption @server=N'MyLinkedServer', @optname=N'use remote collation', @optvalue=N'true'
EXEC sp_serveroption @server=N'MyLinkedServer', @optname=N'collation compatible', @optvalue=N'true' - Так как бесплатная версия провайдера не поддерживает использование схем в запросах, а для обращения к связанному серверу SQL Server требует наличие схем в запросе, то запрос типа:
SELECT * FROM MyLinkedServer...Documents , приведет к ошибке:
Запрошенная функциональность [IDBSchemaRowset::GetSchemas] доступна только в коммерческой версии IBProvider'а
По этому используем инструкцию OPENQUERY:
SELECT * FROM
OPENQUERY(MyLinkedServer,'select * from documents')
Комментариев нет:
Отправить комментарий