15.01.2009

MS SQL Server: Создание Linked Server



Хочу привести пример создания связанных серверов на примере 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.
Итак, инструкция к действиям:
  1. Загружаем и устанавливаем IBProvider Free c сайта http://www.ibprovider.com

  2. Открываем SSMS и находим установленный провайдер:

    В свойствах провайдера отмечаем свойства: Dynamic Parametr и Allow inprocess.

  3. Создаем связанный сервер

    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'

  4. Так как бесплатная версия провайдера не поддерживает использование схем в запросах, а для обращения к связанному серверу SQL Server требует наличие схем в запросе, то запрос типа:

    SELECT * FROM MyLinkedServer...Documents , приведет к ошибке:
    Запрошенная функциональность [IDBSchemaRowset::GetSchemas] доступна только в коммерческой версии IBProvider'а

    По этому используем инструкцию OPENQUERY:

    SELECT * FROM
    OPENQUERY(MyLinkedServer,'select * from documents')


Комментариев нет:

Отправить комментарий