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


Указание расписаний синхронизации

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

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

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

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

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

Укажите расписания синхронизации на странице Расписание синхронизации мастера создания подписки. Дополнительные сведения о доступе к этому мастеру см. в разделах Create a Push Subscription и Create a Pull Subscription.

Измените расписания синхронизации в диалоговом окне "Свойства расписания заданий", которое доступно из папки заданий в SQL Server Management Studio и из окон сведений об агенте в мониторе репликации. Сведения о запуске монитора репликации см. в этой статье.

При указании расписаний из папки Задания используйте следующую таблицу для определения имени задания агента.

Агент Имя задания
Агент слияния для подписок по запросу <Publisher-PublicationDatabase-Publication-Subscription-SubscriptionDatabase-integer><><><><><>
Агент слияния для принудительных подписок <Publisher-PublicationDatabase-Publication-Subscriber-integer><><><><>
Агент распространителя для принудительных подписок <Publisher-PublicationDatabase-Publication-Subscriber-integer><><><<>> 1
Агент распространителя для подписок по запросу <Publisher-PublicationDatabase-Publication-Subscription-SubscriptionDatabase-GUID><><><><<>> 2
Агент распространителя для принудительных подписок подписчиков серверов, отличных от подписчиков SQL Server <Publisher-PublicationDatabase-Publication-Subscriber-integer><><><><>

1 Для принудительной отправки подписок на публикации Oracle это <издатель-издатель<, а не< Publisher-PublicationDatabase>>><>

2 Для извлечения подписок на публикации Oracle это <Publisher-DistributionDatabase>, а не <Publisher-PublicationDatabase><><>

Указание расписаний синхронизации

  1. На странице Расписание синхронизации мастера создания подписки выберите одно из следующих значений в раскрывающемся списке Расписание агента для каждой создаваемой подписки:

    • Выполнять постоянно

    • Запуск только по запросу

    • <Определение расписания...>

  2. Если выбрать <определение расписания...>, укажите расписание в диалоговом окне "Свойства расписания задания" и нажмите кнопку "ОК".

  3. Завершите работу мастера.

Изменение расписания синхронизации для принудительных подписок в мониторе репликации

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

  2. Перейдите на вкладку Все подписки .

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

  4. В окне "Имя подписки" <> нажмите кнопку "Действие", а затем щелкните< "Свойства задания имени> агента".

  5. На странице "Расписания" диалогового окна "Свойства задания — <имя задания>" нажмите кнопку "Изменить".

  6. В диалоговом окне Свойства расписания задания выберите значение из раскрывающегося списка Тип расписания :

    • Для указания непрерывной работы агента выберите Запускать автоматически при запуске агента SQL Server.

    • Для указания работы агента по расписанию выберите Периодически.

    • Для указания запуска агента по запросу выберите Один раз.

  7. При выборе значения Периодическиукажите расписание для агента.

  8. Нажмите ОК.

Изменение расписания синхронизации для принудительных подписок в среде Management Studio

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

  2. Раскройте папку Агент SQL Server , а затем — папку Задания .

  3. Щелкните правой кнопкой задание для агента распространителя или агента слияния, связанных с подпиской, а затем щелкните Свойства.

  4. На странице "Расписания" диалогового окна "Свойства задания — <имя задания>" нажмите кнопку "Изменить".

  5. В диалоговом окне Свойства расписания задания выберите значение из раскрывающегося списка Тип расписания :

    • Для указания непрерывной работы агента выберите Запускать автоматически при запуске агента SQL Server.

    • Для указания работы агента по расписанию выберите Периодически.

    • Для указания запуска агента по запросу выберите Один раз.

  6. При выборе значения Периодическиукажите расписание для агента.

  7. Нажмите ОК.

Изменение расписания синхронизации для подписок по запросу в среде Management Studio

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

  2. Раскройте папку Агент SQL Server , а затем — папку Задания .

  3. Щелкните правой кнопкой задание для агента распространителя или агента слияния, связанных с подпиской, а затем щелкните Свойства.

  4. На странице "Расписания" диалогового окна "Свойства задания — <имя задания>" нажмите кнопку "Изменить".

  5. В диалоговом окне Свойства расписания задания выберите значение из раскрывающегося списка Тип расписания :

    • Для указания непрерывной работы агента выберите Запускать автоматически при запуске агента SQL Server.

    • Для указания работы агента по расписанию выберите Периодически.

    • Для указания запуска агента по запросу выберите Один раз.

  6. При выборе значения Периодическиукажите расписание для агента.

  7. Нажмите ОК.

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

Можно определить расписание синхронизации программно с помощью хранимых процедур репликации. Эти хранимые процедуры зависят от типа репликации и типа подписки (по запросу или принудительная).

Расписание определяется следующими параметрами планирования, поведение которых наследуется от sp_add_schedule (Transact-SQL).

  • @frequency_type — тип частоты, которая используется при создании расписания для агента.

  • @frequency_interval — день недели, в который запускается агент.

  • @frequency_relative_interval — неделя конкретного месяца, если в расписании предусмотрен ежемесячный запуск агента.

  • @frequency_recurrence_factor — число единиц, зависящих от типа частоты, происходящих между синхронизациями.

  • @frequency_subday — единица частоты, если агент запускается чаще одного раза в день.

  • @frequency_subday_interval — число единиц частоты между запусками агента, если он выполняется несколько раз в день.

  • @active_start_time_of_day — время первого запуска агента в конкретный день.

  • @active_end_time_of_day — время последнего запуска агента в конкретный день.

  • @active_start_date — первый день вступления в силу расписания агента.

  • @active_start_date — последний день, когда расписание агента имеет силу.

Определение расписания синхронизации для подписки по запросу на публикацию транзакций

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

  2. На подписчике выполните sp_addpullsubscription_agent (Transact-SQL). Укажите @publisher, @publisher_db, @publication и учетные данные Microsoft Windows, в которых агент распространения на подписчике выполняется для @job_name и @password. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента распространителя, синхронизирующего подписку.

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

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

  2. На подписчике выполните sp_addpushsubscription_agent (Transact-SQL). Укажите параметры @subscriber, @subscriber_db, @publicationи учетные данные Windows, с которыми выполняется агент распространителя на подписчике, для параметров @job_name и @password. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента распространителя, синхронизирующего подписку.

Определение расписания синхронизации для подписки по запросу для публикации слиянием

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

  2. Выполните процедуру sp_addmergepullsubscription_agentна подписчике. Укажите параметры @publisher, @publisher_db, @publicationи учетные данные Windows, с которыми выполняется агент слияния на подписчике, для параметров @job_name и @password. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента слияния, синхронизирующего подписку.

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

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

  2. Выполните на подписчике хранимую процедуру sp_addmergepushsubscription_agent. Укажите параметры @subscriber, @subscriber_db, @publicationи учетные данные Windows, с которыми выполняется агент слияния на подписчике, для параметров @job_name и @password. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента слияния, синхронизирующего подписку.

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

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

Примечание.

Если при создании подписки в параметре false указано значение CreateSyncAgentByDefault (по умолчанию для подписок по запросу), то задание агента не создается, а параметры расписания не учитываются. В этом случае расписание синхронизации задается приложением. Дополнительные сведения см. в разделах Create a Pull Subscription и Create a Push Subscription.

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

  1. Создайте экземпляр класса TransSubscription для создаваемой подписки. Дополнительные сведения см. в статье Создание принудительной подписки.

  2. Перед вызовом метода Createустановите одно или несколько из следующих полей свойства AgentSchedule :

    • FrequencyType — частота запуска агента по расписанию (например ежедневно или еженедельно);

    • FrequencyInterval — день недели, в который запускается агент;

    • FrequencyRelativeInterval — номер недели в месяце, если агент запускается ежемесячно;

    • FrequencyRecurrenceFactor — число частотных единиц, проходящих между последовательными синхронизациями;

    • FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;

    • FrequencySubDayInterval — число частотных единиц, проходящих между запусками агента, если он запускается чаще одного раза в день;

    • ActiveStartTime — время самого раннего запуска агента в заданный день;

    • ActiveEndTime — время самого позднего запуска агента в заданный день;

    • ActiveStartDate — первый день действия расписания агента;

    • ActiveEndDate — последний день действия расписания агента.

    Примечание.

    Если не задать одно из этих свойств, будет использоваться значение по умолчанию.

  3. Вызовите метод Create , чтобы создать подписку.

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

  1. Создайте экземпляр класса TransPullSubscription для создаваемой подписки. Дополнительные сведения см. в статье Создание подписки по запросу.

  2. Перед вызовом метода Createустановите одно или несколько из следующих полей свойства AgentSchedule :

    • FrequencyType — тип интервала для запуска агента по расписанию (например ежедневно или еженедельно);

    • FrequencyInterval — день недели, в который запускается агент;

    • FrequencyRelativeInterval — неделя в заданном месяце, на которой запускается агент при ежемесячном режиме работы;

    • FrequencyRecurrenceFactor — число частотных единиц, проходящих между последовательными синхронизациями;

    • FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;

    • FrequencySubDayInterval — число частотных единиц, проходящих между запусками агента, если он запускается чаще одного раза в день;

    • ActiveStartTime — время самого раннего запуска агента в заданный день;

    • ActiveEndTime — время самого позднего запуска агента в заданный день;

    • ActiveStartDate — первый день действия расписания агента;

    • ActiveEndDate — последний день действия расписания агента.

    Примечание.

    Если не задать одно из этих свойств, будет использоваться значение по умолчанию.

  3. Вызовите метод Create , чтобы создать подписку.

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

  1. Создайте экземпляр класса MergePullSubscription для создаваемой подписки. Дополнительные сведения см. в статье Создание подписки по запросу.

  2. Перед вызовом метода Createустановите одно или несколько из следующих полей свойства AgentSchedule :

    • FrequencyType — тип интервала для запуска агента по расписанию (например ежедневно или еженедельно);

    • FrequencyInterval — день недели, в который запускается агент;

    • FrequencyRelativeInterval — неделя в заданном месяце, на которой запускается агент при ежемесячном режиме работы;

    • FrequencyRecurrenceFactor — число частотных единиц, проходящих между последовательными синхронизациями;

    • FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;

    • FrequencySubDayInterval — число частотных единиц, проходящих между запусками агента, если он запускается чаще одного раза в день;

    • ActiveStartTime — время самого раннего запуска агента в заданный день;

    • ActiveEndTime — время самого позднего запуска агента в заданный день;

    • ActiveStartDate — первый день действия расписания агента;

    • ActiveEndDate — последний день действия расписания агента.

    Примечание.

    Если не задать одно из этих свойств, будет использоваться значение по умолчанию.

  3. Вызовите метод Create , чтобы создать подписку.

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

  1. Создайте экземпляр класса MergeSubscription для создаваемой подписки. Дополнительные сведения см. в статье Создание принудительной подписки.

  2. Перед вызовом метода Createустановите одно или несколько из следующих полей свойства AgentSchedule :

    • FrequencyType — тип интервала для запуска агента по расписанию (например ежедневно или еженедельно);

    • FrequencyInterval — день недели, в который запускается агент;

    • FrequencyRelativeInterval — неделя в заданном месяце, на которой запускается агент при ежемесячном режиме работы;

    • FrequencyRecurrenceFactor — число частотных единиц, проходящих между последовательными синхронизациями;

    • FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;

    • FrequencySubDayInterval — число частотных единиц, проходящих между запусками агента, если он запускается чаще одного раза в день;

    • ActiveStartTime — время самого раннего запуска агента в заданный день;

    • ActiveEndTime — время самого позднего запуска агента в заданный день;

    • ActiveStartDate — первый день действия расписания агента;

    • ActiveEndDate — последний день действия расписания агента.

    Примечание.

    Если не задать одно из этих свойств, будет использоваться значение по умолчанию.

  3. Вызовите метод Create , чтобы создать подписку.

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

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

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

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

// 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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
Dim hostname As String = "adventure-works\garrett1"

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

' 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