Поделиться через


Создание принудительной подписки

В данном разделе описывается процесс создания принудительной подписки в SQL Server 2012 с помощью среды Среда SQL Server Management Studio, Transact-SQL или объектов RMO. Дополнительные сведения о создании принудительной подписки для подписчиков, отличных от SQL Server, см. в разделе Создание подписки для подписчика, отличного от подписчика SQL Server.

В этом разделе

  • Для создания принудительной подписки используется:

    Среда SQL Server Management Studio

    Transact-SQL

    объекты RMO;

Использование среды SQL Server Management Studio

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

  • Указать издателя и публикацию.

  • Выбрать, где будут выполняться агенты репликации. Для принудительной подписки выберите Выполнять все агенты на распространителе (принудительные подписки) на странице Расположение агента распространителя или на странице Расположение агента слияния в зависимости от типа публикации.

  • Указать подписчиков и базы данных подписок.

  • Указать имена входов и пароли, используемые агентами репликации для подключений:

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

    • Для подписок на публикации слиянием укажите учетные данные на странице Безопасность агента слияния.

    Дополнительные сведения о разрешениях, необходимых каждому агенту, см. в разделе Модель безопасности агента репликации.

  • Указать расписание синхронизации и время, когда подписчик должен быть инициализирован.

  • Указать дополнительные параметры для публикаций слиянием: тип подписки; и значения для параметризованного фильтра.

  • Указать дополнительные параметры для публикаций транзакций, позволяющие использовать обновляемые подписки: должны ли подписчики фиксировать изменения на издателе немедленно или записывать их в очередь; учетные данные, используемые для подключения подписчика к издателю.

  • При необходимости создайте скрипт для подписки.

Создание принудительной подписки с издателя.

  1. Подключитесь к издателю в среде Microsoft Среда SQL Server Management Studio и разверните узел сервера.

  2. Раскройте папку Репликация, а затем — папку Локальные публикации.

  3. Щелкните правой кнопкой мыши публикацию, для которой хотите создать одну или более подписок, затем щелкните Создать подписку.

  4. Выполните инструкции на страницах мастера создания подписки.

Создание принудительной подписки с подписчика

  1. Подключитесь к подписчику в Среда SQL Server Management Studio и раскройте узел сервера.

  2. Разверните папку Репликация.

  3. Щелкните правой кнопкой мыши папку Локальные подписки, затем щелкните Создать подписку.

  4. На странице Публикация мастера создания подписки выберите <Найти издатель SQL Server> или выберите <Найти издатель Oracle> из раскрывающегося списка Издатель.

  5. Подключитесь к издателю в диалоговом окне Соединение с сервером.

  6. Выберите публикацию на странице Публикация.

  7. Выполните инструкции на страницах мастера создания подписки.

Значок стрелки, используемый со ссылкой «В начало»[Top]

Использование Transact-SQL

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

Примечание по безопасностиПримечание по безопасности

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

Создание принудительной подписки на публикацию моментальных снимков или транзакций

  1. На издателе в базе данных публикации с помощью процедуры sp_helppublication проверьте, поддерживает ли публикация принудительные подписки.

    • Если значение allow_push равно 1, то принудительная подписка поддерживается.

    • Если значение allow_push равно 0, то необходимо выполнить процедуру sp_changepublication, указав allow_push в @property и значение true в @value.

  2. На издателе в базе данных публикации выполните хранимую процедуру sp_addsubscription. Укажите @publication, @subscriber и @destination_db. Укажите значение push в качестве параметра @subscription_type. Сведения об обновлении подписок см. в разделе Создание обновляемых подписок для публикаций транзакций.

  3. На издателе в базе данных публикации выполните хранимую процедуру sp_addpushsubscription_agent. Укажите следующие параметры:

    • @subscriber, @subscriber_db и @publication.

    • Учетные данные Microsoft Windows, с которыми будет запускаться агент распространителя на распространителе в параметре @job_login, а пароль — в параметре @job_password.

      ПримечаниеПримечание

      Для соединений со встроенной проверкой подлинности Windows всегда используются учетные данные Windows, передаваемые через параметры @job_login и @job_password. Агент распространителя всегда создает локальные соединения с распространителем через встроенную систему проверки подлинности Windows. По умолчанию агент подключается к подписчику через встроенную систему проверки подлинности Windows;

    • (необязательно) Значение 0 в параметре @subscriber_security_mode и сведения об имени входа Microsoft SQL Server в параметрах @subscriber_login и @subscriber_password. Эти параметры указываются в том случае, если при соединении с подписчиком необходимо использовать проверку подлинности SQL Server.

    • Расписание агента распространителя для данной подписки. Дополнительные сведения см. в разделе Указание расписаний синхронизации.

    Примечание по безопасностиПримечание по безопасности

    При создании принудительной подписки на издателе с удаленным распространителем значения, указываемые для всех параметров, включая job_login и job_password, передаются распространителю в виде обычного текста. Прежде чем выполнять эту хранимую процедуру, необходимо зашифровать соединение между издателем и его удаленным распространителем. Дополнительные сведения см. в разделе Включение шифрования соединений в ядре СУБД (диспетчер конфигурации SQL Server).

Создание принудительной подписки на публикацию слиянием

  1. На издателе в базе данных публикации при помощи процедуры sp_helpmergepublication проверьте, поддерживает ли публикация принудительные подписки.

    • Если значение allow_push равно 1, то публикацией принудительные подписки поддерживаются.

    • Если значение allow_push не равно 1, необходимо выполнить процедуру sp_changemergepublication, значение allow_push в параметре @property и значение true в параметре @value.

  2. На издателе в базе данных публикации выполните хранимую процедуру sp_addmergesubscription, указав следующие параметры.

  3. На издателе в базе данных публикации выполните хранимую процедуру sp_addmergepushsubscription_agent. Укажите следующие параметры:

    • @subscriber, @subscriber_db и @publication.

    • Учетные данные Windows, с которыми будет запускаться агент слияния на распространителе в параметрах @job_login и @job_password.

      ПримечаниеПримечание

      Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент слияния всегда создает локальные соединения с распространителем через встроенную систему проверки подлинности Windows. По умолчанию агент подключается к подписчику через встроенную систему проверки подлинности Windows;

    • (необязательно) Значение 0 в параметре @subscriber_security_mode и сведения об имени входа SQL Server в параметрах @subscriber_login и @subscriber_password. Эти параметры указываются в том случае, если при соединении с подписчиком необходимо использовать проверку подлинности SQL Server.

    • (необязательно) Значение 0 в параметре @publisher_security_mode и сведения об имени входа SQL Server в параметрах @publisher_login и @publisher_password. Эти параметры указываются в том случае, если при соединении с издателем необходимо использовать проверку подлинности SQL Server.

    • Расписание агента слияния для данной подписки. Дополнительные сведения см. в разделе Указание расписаний синхронизации.

    Примечание по безопасностиПримечание по безопасности

    При создании принудительной подписки на издателе с удаленным распространителем значения, указываемые для всех параметров, включая job_login и job_password, передаются распространителю в виде обычного текста. Прежде чем выполнять эту хранимую процедуру, необходимо зашифровать соединение между издателем и его удаленным распространителем. Дополнительные сведения см. в разделе Включение шифрования соединений в ядре СУБД (диспетчер конфигурации SQL Server).

Примеры (Transact-SQL)

В следующем примере создается принудительная подписка на публикацию транзакций. Значения для имени входа и пароля передаются во время выполнения в переменных скрипта sqlcmd.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2012Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2012]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

В следующем примере создается принудительная подписка на публикацию слиянием. Значения для имени входа и пароля передаются во время выполнения в переменных скрипта sqlcmd.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks2012];
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

Значок стрелки, используемый со ссылкой «В начало»[Top]

При помощи объектов RMO

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

Примечание по безопасностиПримечание по безопасности

При возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения. Если необходимо хранить учетные данные, используйте службы шифрования, предоставляемые платформой Microsoft Windows .NET Framework.

Создание принудительной подписки на публикацию моментальных снимков или транзакций

  1. Создайте соединение с издателем с помощью класса ServerConnection.

  2. На основе соединения с издателем, созданного на шаге 1, создайте экземпляр класса TransPublication. Задайте свойства Name, DatabaseName и ConnectionContext.

  3. Вызовите метод LoadProperties. Если этот метод возвращает значение false, то на шаге 2 свойствам были присвоены неверные значения, или публикация на сервере не существует.

  4. Выполните операцию «поразрядное логическое И» (& в Visual C# и And в Visual Basic) над свойством Attributes и флагом AllowPush. Если результатом является None, присвойте Attributes значение побитового логического оператора ИЛИ ( |в Visual C# и Or в Visual Basic) между Attributes и AllowPush. Затем вызовите метод CommitPropertyChanges, чтобы включить принудительные подписки.

  5. Если база данных подписки не существует, создайте ее с помощью класса Database. Дополнительные сведения по обновлению компонентов SQL Server см. в разделе Создание, изменение и удаление баз данных.

  6. Создайте экземпляр класса TransSubscription.

  7. Укажите следующие свойства подписки:

    • соединение (ServerConnection) с издателем, созданное на шаге 1, в свойстве ConnectionContext;

    • имя базы данных подписки в свойстве SubscriptionDBName;

    • имя подписчика в свойстве SubscriberName;

    • имя базы данных публикации в свойстве DatabaseName;

    • имя публикации в свойстве PublicationName;

    • данные учетной записи пользователя Microsoft Windows, от имени которого на распространителе будет запущен агент распространителя, в свойствах Login, Password или SecurePassword объекта SynchronizationAgentProcessSecurity. Эта учетная запись будет использоваться для создания локальных соединений с распространителем, а также для удаленных соединений с использованием проверки подлинности Windows.

      ПримечаниеПримечание

      Указывать свойство SynchronizationAgentProcessSecurity необязательно, если подписка создается членом предопределенной роли сервера sysadmin, однако рекомендуется это сделать. В этом случае агент будет выполнять олицетворение учетную запись агента SQL Server. Дополнительные сведения см. в разделе Модель безопасности агента репликации.

    • (необязательно) значение true в свойстве CreateSyncAgentByDefault (задано по умолчанию). Если будет присвоено значение false, подписку можно будет синхронизировать только программно.

    • (необязательно) при соединении с подписчиком с проверкой подлинности SQL Server укажите значения свойств SqlStandardLogin и SqlStandardPassword или SecureSqlStandardPassword объекта SubscriberSecurity.

  8. Вызовите метод Create.

    Примечание по безопасностиПримечание по безопасности

    При создании принудительной подписки на издателе с удаленным распространителем значения, заданные для всех свойств, включая SynchronizationAgentProcessSecurity, отправляются распространителю в виде обычного текста. Следует зашифровать соединение между издателем и его удаленным распространителем перед вызовом метода Create. Дополнительные сведения см. в разделе Включение шифрования соединений в ядре СУБД (диспетчер конфигурации SQL Server).

Создание принудительной подписки на публикацию слиянием

  1. Создайте соединение с издателем с помощью класса ServerConnection.

  2. На основе соединения с издателем, созданного на шаге 1, создайте экземпляр класса MergePublication. Задайте свойства Name, DatabaseName и ConnectionContext.

  3. Вызовите метод LoadProperties. Если этот метод возвращает значение false, то на шаге 2 свойствам были присвоены неверные значения, или публикация на сервере не существует.

  4. Выполните операцию «поразрядное логическое И» (& в Visual C# и And в Visual Basic) над свойством Attributes и флагом AllowPush. Если результатом является None, присвойте Attributes значение побитового логического оператора ИЛИ ( |в Visual C# и Or в Visual Basic) между Attributes и AllowPush. Затем вызовите метод CommitPropertyChanges, чтобы включить принудительные подписки.

  5. Если база данных подписки не существует, создайте ее с помощью класса Database. Дополнительные сведения см. в разделе Создание, изменение и удаление баз данных.

  6. Создайте экземпляр класса MergeSubscription.

  7. Укажите следующие свойства подписки:

    • соединение (ServerConnection) с издателем, созданное на шаге 1, в свойстве ConnectionContext;

    • имя базы данных подписки в свойстве SubscriptionDBName;

    • имя подписчика в свойстве SubscriberName;

    • имя базы данных публикации в свойстве DatabaseName;

    • имя публикации в свойстве PublicationName;

    • данные учетной записи пользователя Microsoft Windows, от имени которого на распространителе будет запущен агент слияния, в свойствах Login, Password или SecurePassword объекта SynchronizationAgentProcessSecurity. Эта учетная запись будет использоваться для создания локальных соединений с распространителем и удаленных с использованием проверки подлинности Windows.

      ПримечаниеПримечание

      Указывать свойство SynchronizationAgentProcessSecurity необязательно, если подписка создается членом предопределенной роли сервера sysadmin, однако рекомендуется это сделать. В этом случае агент будет выполнять олицетворение учетную запись агента SQL Server. Дополнительные сведения см. в разделе Модель безопасности агента репликации.

    • (необязательно) значение true в свойстве CreateSyncAgentByDefault (задано по умолчанию). Если будет присвоено значение false, подписку можно будет синхронизировать только программно.

    • (необязательно) при соединении с подписчиком с проверкой подлинности SQL Server укажите значения свойств SqlStandardLogin и SqlStandardPassword или SecureSqlStandardPassword объекта SubscriberSecurity.

    • (необязательно) при соединении с издателем с проверкой подлинности SQL Server укажите значения свойств SqlStandardLogin и SqlStandardPassword или SecureSqlStandardPassword объекта PublisherSecurity.

  8. Вызовите метод Create.

    Примечание по безопасностиПримечание по безопасности

    При создании принудительной подписки на издателе с удаленным распространителем значения, заданные для всех свойств, включая SynchronizationAgentProcessSecurity, отправляются распространителю в виде обычного текста. Следует зашифровать соединение между издателем и его удаленным распространителем перед вызовом метода Create. Дополнительные сведения см. в разделе Включение шифрования соединений в ядре СУБД (диспетчер конфигурации SQL Server).

Примеры (объекты RMO)

В следующем примере создается принудительная подписка на публикацию транзакций. Данные учетной записи Windows для задания агента распространителя предоставляются во время выполнения.

           // Define the Publisher, publication, and databases.
            string publicationName = "AdvWorksProductTran";
            string publisherName = publisherInstance;
            string subscriberName = subscriberInstance;
            string subscriptionDbName = "AdventureWorks2012Replica";
            string publicationDbName = "AdventureWorks2012";

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

            // Create the objects that we need.
            TransPublication publication;
            TransSubscription subscription;

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

                // Ensure that the publication exists and that 
                // it supports push subscriptions.
                publication = new TransPublication();
                publication.Name = publicationName;
                publication.DatabaseName = publicationDbName;
                publication.ConnectionContext = conn;

                if (publication.IsExistingObject)
                {
                    if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
                    {
                        publication.Attributes |= PublicationAttributes.AllowPush;
                    }

                    // Define the push subscription.
                    subscription = new TransSubscription();
                    subscription.ConnectionContext = conn;
                    subscription.SubscriberName = subscriberName;
                    subscription.PublicationName = publicationName;
                    subscription.DatabaseName = publicationDbName;
                    subscription.SubscriptionDBName = subscriptionDbName;

                    // Specify the Windows login credentials for the Distribution Agent job.
                    subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
                    subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

                    // By default, subscriptions to transactional publications are synchronized 
                    // continuously, but in this case we only want to synchronize on demand.
                    subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;

                    // Create the push subscription.
                    subscription.Create();
                }
                else
                {
                    // Do something here if the publication does not exist.
                    throw new ApplicationException(String.Format(
                        "The publication '{0}' does not exist on {1}.",
                        publicationName, publisherName));
                }
            }
            catch (Exception ex)
            {
                // Implement the appropriate error handling here.
                throw new ApplicationException(String.Format(
                    "The subscription to {0} could not be created.", publicationName), ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New TransPublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New TransSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName

        ' Specify the Windows login credentials for the Distribution Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' By default, subscriptions to transactional publications are synchronized 
        ' continuously, but in this case we only want to synchronize on demand.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand

        ' Create the push subscription.
        subscription.Create()
    Else
        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If

Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
        "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

В следующем примере создается принудительная подписка на публикацию слиянием. Данные учетной записи Windows для задания агента слияния предоставляются во время выполнения.

          // Define the Publisher, publication, and databases.
            string publicationName = "AdvWorksSalesOrdersMerge";
            string publisherName = publisherInstance;
            string subscriberName = subscriberInstance;
            string subscriptionDbName = "AdventureWorks2012Replica";
            string publicationDbName = "AdventureWorks2012";
            string hostname = @"adventure-works\garrett1";

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

            // Create the objects that we need.
            MergePublication publication;
            MergeSubscription subscription;

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

                // Ensure that the publication exists and that 
                // it supports push subscriptions.
                publication = new MergePublication();
                publication.Name = publicationName;
                publication.DatabaseName = publicationDbName;
                publication.ConnectionContext = conn;

                if (publication.IsExistingObject)
                {
                    if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
                    {
                        publication.Attributes |= PublicationAttributes.AllowPush;
                    }

                    // Define the push subscription.
                    subscription = new MergeSubscription();
                    subscription.ConnectionContext = conn;
                    subscription.SubscriberName = subscriberName;
                    subscription.PublicationName = publicationName;
                    subscription.DatabaseName = publicationDbName;
                    subscription.SubscriptionDBName = subscriptionDbName;
                    subscription.HostName = hostname;

                    // Set a schedule to synchronize the subscription every 2 hours
                    // during weekdays from 6am to 10pm.
                    subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
                    subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
                    subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
                    subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
                    subscription.AgentSchedule.FrequencySubDayInterval = 2;
                    subscription.AgentSchedule.ActiveStartDate = 20051108;
                    subscription.AgentSchedule.ActiveEndDate = 20071231;
                    subscription.AgentSchedule.ActiveStartTime = 060000;
                    subscription.AgentSchedule.ActiveEndTime = 100000;

                    // Specify the Windows login credentials for the Merge Agent job.
                    subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
                    subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

                    // Create the push subscription.
                    subscription.Create();
                }
                else
                {
                    // Do something here if the publication does not exist.
                    throw new ApplicationException(String.Format(
                        "The publication '{0}' does not exist on {1}.",
                        publicationName, publisherName));
                }
            }
            catch (Exception ex)
            {
                // Implement the appropriate error handling here.
                throw new ApplicationException(String.Format(
                    "The subscription to {0} could not be created.", publicationName), ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
Dim hostname As String = "adventure-works\garrett1"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New MergePublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New MergeSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName
        subscription.HostName = hostname

        ' Set a schedule to synchronize the subscription every 2 hours
        ' during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
        subscription.AgentSchedule.FrequencySubDayInterval = 2
        subscription.AgentSchedule.ActiveStartDate = 20051108
        subscription.AgentSchedule.ActiveEndDate = 20071231
        subscription.AgentSchedule.ActiveStartTime = 60000
        subscription.AgentSchedule.ActiveEndTime = 100000

        ' Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' Create the push subscription.
        subscription.Create()
    Else

        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
    "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

Значок стрелки, используемый со ссылкой «В начало»[Top]

См. также

Основные понятия

Просмотр и изменение свойств принудительной подписки

Рекомендации по защите репликации

Создание публикации

Основные понятия объектов RMO

Создание принудительной подписки

Синхронизация принудительной подписки

Подписка на публикации

Использование программы sqlcmd с переменными скрипта