Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Объекты управления репликацией (RMO) — это управляемая сборка кода, которая инкапсулирует функции репликации для SQL Server. Объекты RMO реализованы в пространстве имен Microsoft.SqlServer.Replication.
Следующие разделы описывают использование объектов RMO для программного управления задачами репликации.
Настройка распространения
В подразделах этого раздела показано, как использовать объекты RMO для настройки публикации и распределения.
Создание публикации
В подразделах этого раздела показано, как использовать объекты RMO для создания, удаления и изменения публикаций и статей.
Подписка на публикации
В подразделах этого раздела показано, как использовать объекты 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#
Запустите Visual Studio.
В меню "Файл" щелкните NewProject. Откроется диалоговое окно "Новый проект".
В диалоговом окне Типы проектов выберите Проекты Visual C#. На панели Шаблоны выберите пункт Приложение Windows.
В поле Имя введите имя нового приложения (необязательно).
Нажмите кнопку ОК, чтобы загрузить шаблон Visual C# Windows.
В меню Проект выберите пункт Добавить ссылку. Диалоговое окно Добавление ссылки появляется.
Выберите следующие сборки из списка на вкладке .NET, а затем нажмите кнопку ОК.
Интерфейс программирования Microsoft.SqlServer.Replication .NET
Microsoft.SqlServer.ConnectionInfo
Библиотека агента репликации
Замечание
Чтобы выбрать несколько файлов, удерживайте клавишу CTRL.
(Необязательно) Повторите шаг 6. Щелкните вкладку "Обзор" , перейдите к C:\Program Files\Microsoft SQL Server\120\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dllи нажмите кнопку "ОК".
В меню Вид выберите пункт Код.
В коде перед оператором пространства имен введите следующие
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
Запустите Visual Studio.
В меню Файл выберите пункт Создать проект. Откроется диалоговое окно Создание проекта .
На панели типов проекта выберите Visual Basic. На панели "Шаблоны" выберите пункт Приложение Windows.
(Необязательно.) В поле Имя введите имя нового приложения.
Нажмите кнопку ОК, чтобы загрузить шаблон Visual Basic Windows.
В меню "Проект" выберите "Добавить ссылку". Диалоговое окно Добавление ссылки появляется.
Выберите следующие сборки из списка на вкладке .NET, а затем нажмите кнопку ОК.
Интерфейс программирования Microsoft.SqlServer.Replication .NET
Microsoft.SqlServer.ConnectionInfo
Библиотека агента репликации
Замечание
Чтобы выбрать несколько файлов, удерживайте клавишу CTRL.
(Необязательно) Повторите шаг 6. Щелкните вкладку "Обзор" , перейдите к C:\Program Files\Microsoft SQL Server\120\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dllи нажмите кнопку "ОК".
В меню Вид выберите пункт Код.
В коде перед объявлениями введите следующие
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
LoginPassword и задать допустимый вход в 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();
}
См. также
Основные понятия хранимых процедур системы репликации
Основные понятия программирования репликации