Replication Management Objects Concepts

Область применения: SQL Server Управляемый экземпляр SQL Azure

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

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

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

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

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

Secure a Replication Topology (Защита топологии репликации)
В подразделах этого раздела показано, как использовать объекты 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. В меню "Файл" щелкните NewProject. Откроется диалоговое окно "Новый проект".

  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\nnn\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\nnn\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 либо во время создания экземпляра, либо в результате присваивания свойства P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContex объекту. Это позволяет создать экземпляр объекта программирования RMO независимо от объекта соединения и разделить задачи их управления. Один объект соединения можно использовать с несколькими объектами программирования RMO. Для соединений с сервером репликации действуют следующие правила.

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

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

  • Объект ServerConnection назначается свойству P:Microsoft.SqlServer.Replication.ReplicationObject.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 и Password Login установить допустимый вход в SQL Server и пароль. Учетные данные безопасности должны всегда храниться и обрабатываться с учетом требований безопасности и при любой возможности предоставляться только во время выполнения.

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

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

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

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

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

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

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

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

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

Примечание.

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

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

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

Внимание

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

Включение поддержки TLS 1.2 для компонентов RMO

Поддержку TLS1.2 для компонентов RMO в Windows 2012 и более ранних версиях можно включить, установив обновление KB 3140245 и создав разделы реестра, описанные в статье. В Windows 2012 R2 и более поздних версиях требуется создать только разделы реестра, приведенные в статье выше.

Пример

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

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

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();
}