Replication Management Objects Concepts

Объекты RMO представляют собой сборку управляемого кода, которая инкапсулирует функциональные средства репликации для SQL Server. Объекты RMO реализованы в пространстве имен Microsoft.SqlServer.Replication.

Следующие разделы описывают использование объектов RMO для программного управления задачами репликации.

Настройка распространения
В подразделах этого раздела показано, как использовать объекты RMO для настройки публикации и распределения.

Create a Publication
В подразделах этого раздела показано, как использовать объекты RMO для создания, удаления и изменения публикаций и статей.

Подписка на публикации
В подразделах этого раздела показано, как использовать объекты RMO для создания, удаления и изменения подписок.

Защита топологии репликации
В подразделах этого раздела показано, как использовать объекты RMO для просмотра и изменения параметров безопасности.

Синхронизация подписок (репликация)
В подразделах этого раздела показано, как синхронизировать подписки.

Наблюдение за репликацией
В подразделах этого раздела показано, как программным путем осуществлять наблюдение за топологией репликации.

Введение в программирование объектов RMO

Объекты RMO предназначены для программирования всех аспектов репликации SQL Server. Пространством имен объекта RMO является Microsoft.SqlServer.Replication, а для его реализации применяется библиотека Microsoft.SqlServer.Rmo.dll, представляющая собой сборку Microsoft .NET Framework. Сборка Microsoft.SqlServer.Replication.dll, которая также принадлежит пространству имен Microsoft.SqlServer.Replication, реализует интерфейс управляемого кода для программирования различных агентов репликации (агента моментальных снимков, агента распространителя и агента слияния). Доступ к ее классам может быть получен из объектов RMO для синхронизации подписок. Классы в пространстве имен Microsoft.SqlServer.Replication.BusinessLogicSupport, реализованном с помощью сборки Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, используются для создания пользовательской бизнес-логики для репликации слиянием. Эта сборка является независимой от объектов RMO.

Развертывание приложений на основе объектов RMO

Функционирование объектов RMO зависит от компонентов репликации и компонентов обмена данными с клиентом, которые включены во все версии SQL Server, кроме SQL Server Compact. Чтобы иметь возможность развернуть приложение на основе объектов RMO, необходимо установить на компьютере, предназначенном для эксплуатации приложения, версию SQL Server, которая включает компоненты репликации и компоненты обмена данными с клиентом.

Приступая к работе с объектами RMO

В настоящем разделе приведено описание того, как создать простой проект объекта RMO с использованием Microsoft Visual Studio.

Создание нового проекта Microsoft Visual C#

  1. Запустите среду Visual Studio.

  2. В меню Файл выберите Пункт СоздатьПроект. Откроется диалоговое окно Новый проект .

  3. В диалоговом окне Типы проектов выберите Проекты Visual C#. На панели Шаблоны выберите пункт Приложение Windows.

  4. В поле Имя введите имя нового приложения (необязательно).

  5. Нажмите кнопку ОК, чтобы загрузить шаблон Visual C# Windows.

  6. В меню Проект выберите пункт Добавить ссылку. Откроется диалоговое окно Добавление ссылки.

  7. Выберите следующие сборки из списка на вкладке .NET, а затем нажмите кнопку ОК.

    • Microsoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfo

    • Библиотека агента репликации

    Примечание

    Чтобы выбрать несколько файлов, удерживайте клавишу CTRL.

  8. (Необязательно) Повторите шаг 6. Откройте вкладку Обзор, перейдите в папку C:\Program Files\Microsoft SQL Server\120\COM, выберите Microsoft.SqlServer.Replication.BusinessLogicSupport.dll и нажмите кнопку ОК.

  9. В меню Вид выберите пункт Код.

  10. В коде перед инструкцией пространства имен введите следующие инструкции using для определения типов в пространстве имен RMO:

    // These namespaces are required.  
    using Microsoft.SqlServer.Replication;  
    using Microsoft.SqlServer.Management.Common;  
    // This namespace is only used when creating custom business  
    // logic for merge replication.  
    using Microsoft.SqlServer.Replication.BusinessLogicSupport;   
    

Создание нового проекта Microsoft Visual Basic .NET

  1. Запустите среду Visual Studio.

  2. В меню Файл выберите пункт Создать проект. Откроется диалоговое окно Создание проекта .

  3. На панели типов проекта выберите Visual Basic. На панели "Шаблоны" выберите пункт Приложение Windows.

  4. (Необязательно.) В поле Имя введите имя нового приложения.

  5. Нажмите кнопку ОК, чтобы загрузить шаблон Visual Basic Windows.

  6. В меню Проект выберите пункт Добавить ссылку. Откроется диалоговое окно Добавление ссылки.

  7. Выберите следующие сборки из списка на вкладке .NET, а затем нажмите кнопку ОК.

    • Microsoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfo

    • Библиотека агента репликации

    Примечание

    Чтобы выбрать несколько файлов, удерживайте клавишу CTRL.

  8. (Необязательно) Повторите шаг 6. Откройте вкладку Обзор, перейдите в папку C:\Program Files\Microsoft SQL Server\120\COM, выберите Microsoft.SqlServer.Replication.BusinessLogicSupport.dll и нажмите кнопку ОК.

  9. В меню Вид выберите пункт Код.

  10. В коде перед декларациями введите следующие инструкции Imports для определения типов в пространстве имен RMO.

    ' These namespaces are required.  
    Imports Microsoft.SqlServer.Replication  
    Imports Microsoft.SqlServer.Management.Common  
    ' This namespace is only used when creating custom business  
    ' logic for merge replication.  
    Imports Microsoft.SqlServer.Replication.BusinessLogicSupport   
    

Соединение с сервером репликации

Для программных объектов RMO требуется, чтобы соединение с экземпляром SQL Server было выполнено с использованием экземпляра класса ServerConnection. Это соединение с сервером выполняется независимо от каких-либо программных объектов RMO. После этого соединение передается объекту RMO либо во время создания экземпляра, либо в результате присваивания свойства ConnectionContext объекту. Это позволяет создать экземпляр объекта программирования RMO независимо от объекта соединения и разделить задачи их управления. Один объект соединения можно использовать с несколькими объектами программирования RMO. Для соединений с сервером репликации действуют следующие правила.

  • Все свойства соединения определяются применительно к данному конкретному объекту ServerConnection.

  • Соединение с каждым экземпляром SQL Server должно иметь свой собственный объект ServerConnection.

  • Объект ServerConnection назначается свойству ConnectionContext программного объекта RMO, создаваемого или применяемого для доступа на сервере.

  • Метод Connect открывает соединение с сервером. Этот метод должен быть вызван перед вызовом любых методов любых программных объектов RMO, использующих соединение, которые получают доступ к серверу.

  • В объектах RMO и управляющих объектах SQL Server (объектах SMO) используется класс ServerConnection для создания соединений с SQL Server, поэтому одно и то же соединение может использоваться и объектами RMO, и объектами SMO. Дополнительные сведения см. в статье Connecting to an Instance of SQL Server (Соединение с экземпляром SQL Server).

  • Все данные проверки подлинности, необходимые для установления соединения и входа на сервер, передаются в объекте ServerConnection.

  • По умолчанию используется проверка подлинности Windows. Чтобы использовать проверку подлинности SQL Server, LoginSecure необходимо задать значение false и Login , а Password для параметра — допустимые SQL Server входа и пароль. Учетные данные безопасности должны всегда храниться и обрабатываться с учетом требований безопасности и при любой возможности предоставляться только во время выполнения.

  • Для многопоточных приложений в каждом потоке должен использоваться отдельный объект ServerConnection.

Вызовите метод Disconnect объекта ServerConnection, чтобы закрыть активные соединения сервера, используемые объектами RMO.

Задание свойств объектов RMO

Свойства программных объектов RMO представляют свойства этих объектов репликации на сервере. При создании новых объектов репликации на сервере для определения этих объектов используются свойства объектов RMO. Для существующих объектов все свойства объектов RMO представляют свойства существующего объекта, подлежащие изменению только в части тех свойств, которым требуется установка или запись значения. Свойства могут быть заданы для новых объектов или существующих объектов.

Задание свойств для новых объектов репликации

При создании новых объектов репликации на сервере необходимо указывать все обязательные свойства перед вызовом метода Create объекта. Дополнительные сведения о задании свойств для нового объекта репликации см. в статье Настройка публикации и распространения.

Задание свойств для существующих объектов репликации

Применительно к объектам репликации, существующим на сервере (в зависимости от объекта), объекты RMO могут поддерживать возможность изменения некоторых или всех свойств. Могут быть изменены только свойства, предназначенные для записи или доступные для задания. Прежде чем появится возможность изменить свойства, необходимо вызвать метод Load или LoadProperties, чтобы получить текущие значения свойств с сервера. Вызов этих методов становится указанием на то, что существующий объект подлежит изменению.

По умолчанию при изменении свойства объекта в технологии RMO осуществляется фиксация этих изменений на сервере с учетом используемого режима выполнения ServerConnection. Метод IsExistingObject может применяться для проверки того, существует ли объект на сервере, перед осуществлением попытки получения или изменения его свойств. Дополнительные сведения о свойствах объекта репликации см. в статье Просмотр и изменение свойств издателя и распространителя.

Примечание

Если доступ к одному и тому же объекту репликации на сервере осуществляется несколькими клиентами RMO или несколькими экземплярами одного из программных объектов RMO, то может быть вызван метод Refresh объекта RMO для обновления свойств с учетом текущего состояния объекта на сервере.

Кэширование изменений свойств

Если свойству SqlExecutionModes присвоено значение CaptureSql , все инструкции Transact-SQL, созданные RMO, записываются, чтобы их можно было выполнить вручную в одном пакете с помощью одного из методов выполнения. Технология RMO позволяет кэшировать изменения свойств и фиксировать их вместе в одном пакете с использованием метода CommitPropertyChanges объекта. Чтобы обеспечить кэширование изменений свойств, необходимо задать свойству CachePropertyChanges объекта значение true. При кэшировании изменений свойств в технологии RMO объект ServerConnection по-прежнему управляет тем, когда происходит передача изменений на сервер. Дополнительные сведения о кэшировании изменений свойств объекта репликации см. в статье Просмотр и изменение свойств издателя и распространителя.

Важно!

Безусловно, класс ServerConnection поддерживает объявление явных транзакций при задании свойств, но такие транзакции могут препятствовать выполнению внутренних транзакций и вырабатывать непредвиденные результаты, поэтому не должны использоваться с объектами RMO.

Пример

В этом примере демонстрируется кэширование изменений свойств. Изменения, внесенные в атрибуты публикации транзакций, кэшируются до тех пор, пока не происходит их явная отправка на сервер.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = true;

    // If we can't get the properties for this publication, 
    // throw an application exception.
    if (publication.LoadProperties())
    {
        // Enable support for push subscriptions and disable support 
        // for pull subscriptions.
        if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
        {
            publication.Attributes ^= PublicationAttributes.AllowPull;
        }
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Send changes to the server.
        publication.CommitPropertyChanges();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}

См. также:

Replication System Stored Procedures Concepts
Основные понятия программирования репликации