Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: 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 и из окон сведений об агенте в мониторе репликации. Сведения о том, как запустить монитор репликации, см. в разделе Запуск монитора репликации.
При указании расписаний из папки Задания используйте следующую таблицу для определения имени задания агента.
| Агент | Имя задания |
|---|---|
| Агент слияния для подписок по запросу | <Издатель>-<База данных публикаций>-<Публикация>-<Подписчик>-<База данных подписок>-<целое число> |
| Агент слияния для push-подписок | <Издатель>-<База данных публикаций>-<Публикация>-<Подписчик>-<целое число> |
| Агент распространителя для принудительных подписок | <Publisher-PublicationDatabase-Publication-Subscriber-integer><><><><> 1 |
| Агент распространителя для подписок по запросу | <Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<SubscriptionDatabase>-<GUID>2 |
| Агент распространения для подписок по запросу издателя к подписчикам, не использующим SQL Server | <Издатель>-<База данных публикаций>-<Публикация>-<Подписчик>-<целое число> |
1 Для подписок с отправкой на публикации Oracle это ><, а не >Издатель<->База данных публикации
2 Для подписок на получение к публикациям Oracle это ><, а не >Publisher<->PublicationDatabase
Указание расписаний синхронизации
На странице SynchronizationSchedule мастера новой подписки выберите одно из следующих значений из выпадающего списка расписания агентов для каждой создаемой вами подписки:
Выполнять непрерывно
Запуск только по запросу
<Определение расписания...>
Если выбрать >Задать расписание..., укажите расписание в диалоговом окне Свойства расписания задания, а затем нажмите ОК.
Завершите работу мастера.
Изменить расписание синхронизации для подписки типа push в Мониторе репликации
На левой панели монитора репликации раскройте группу "Издатель", раскройте издателя, а затем щелкните публикацию.
Перейдите на вкладку Все подписки .
Щелкните правой кнопкой мыши подписку, а затем выберите Просмотреть сведения.
В окне «Подписка <SubscriptionName>» нажмите «Действие», а затем выберите «Свойства задания <AgentName>».
На странице "Расписания" диалогового окна "Свойства задания — <имя задания>" нажмите кнопку "Изменить".
В диалоговом окне «Свойства расписания заданий » выберите значение из выпадающего списка «Тип расписания »:
Для указания непрерывной работы агента выберите Запускать автоматически при запуске агента SQL Server.
Для указания работы агента по расписанию выберите Периодически.
Для указания запуска агента по запросу выберите Один раз.
При выборе значения Периодическиукажите расписание для агента.
Нажмите ОК.
Изменение расписания синхронизации для принудительных подписок в среде Management Studio
Подключитесь к распространителю в Management Studio и разверните узел сервера.
Раскройте папку Агент SQL Server , а затем — папку Задания .
Щелкните правой кнопкой мыши по заданию агента распространения или агента слияния, связанному с подпиской, а затем выберите Свойства.
На странице "Расписания" диалогового окна "Свойства задания — <имя задания>" нажмите кнопку "Изменить".
В диалоговом окне «Свойства расписания заданий » выберите значение из выпадающего списка «Тип расписания »:
Для указания непрерывной работы агента выберите Запускать автоматически при запуске агента SQL Server.
Для указания работы агента по расписанию выберите Периодически.
Для указания запуска агента по запросу выберите Один раз.
При выборе значения Периодическиукажите расписание для агента.
Нажмите ОК.
Изменение расписания синхронизации для подписок по запросу в среде Management Studio
Подключитесь к подписчику в Management Studio и разверните узел сервера.
Раскройте папку Агент SQL Server , а затем — папку Задания .
Щелкните правой кнопкой мыши по заданию агента распространения или агента слияния, связанному с подпиской, а затем выберите Свойства.
На странице "Расписания" диалогового окна "Свойства задания — <имя задания>" нажмите кнопку "Изменить".
В диалоговом окне «Свойства расписания заданий » выберите значение из выпадающего списка «Тип расписания »:
Для указания непрерывной работы агента выберите Запускать автоматически при запуске агента SQL Server.
Для указания работы агента по расписанию выберите Периодически.
Для указания запуска агента по запросу выберите Один раз.
При выборе значения Периодическиукажите расписание для агента.
Нажмите ОК.
Использование 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_end_date — последний день, когда расписание агента будет действовать.
Определение расписания синхронизации для подписки по запросу на публикацию транзакций
Создайте подписку по запросу на публикацию транзакций. Дополнительные сведения см. в статье Создание подписки по запросу.
На подписчике выполните sp_addpullsubscription_agent (Transact-SQL). Укажите @publisher, @publisher_db, @publication и учетные данные Microsoft Windows, от имени которых агент распространения запускается на Подписчике, для @job_name и @password. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента распространителя, синхронизирующего подписку.
Определение расписания синхронизации для принудительной подписки на публикацию транзакций
Создайте новую подписку типа push для транзакционной публикации. Дополнительные сведения см. в статье Создание принудительной подписки.
На подписчике выполните sp_addpushsubscription_agent (Transact-SQL). Укажите параметры @subscriber, @subscriber_db, @publicationи учетные данные Windows, с которыми выполняется агент распространителя на подписчике, для параметров @job_name и @password. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента распространителя, синхронизирующего подписку.
Определение расписания синхронизации для подписки по запросу для публикации слиянием
Создайте новую подписку по запросу для публикации слияния. Дополнительные сведения см. в статье Создание подписки по запросу.
Выполните процедуру sp_addmergepullsubscription_agentна подписчике. Укажите @publisher, @publisher_db, @publication, а также учетные данные Windows, от имени которых агент слияния выполняется на подписчике, для @job_name и @password. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента слияния, синхронизирующего подписку.
Определение расписания синхронизации для принудительной подписки на публикацию слиянием
Создайте новую подписку с принудительной доставкой для публикации слияния. Дополнительные сведения см. в статье Создание принудительной подписки.
Выполните на подписчике хранимую процедуру sp_addmergepushsubscription_agent. Укажите параметры @subscriber, @subscriber_db, @publicationи учетные данные Windows, с которыми выполняется агент слияния на подписчике, для параметров @job_name и @password. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента слияния, синхронизирующего подписку.
Использование объектов управления репликацией (RMO)
Репликация использует агент SQL Server для планирования заданий, связанных с действиями, выполняемыми периодически, такими как создание моментальных снимков и синхронизация подписок. Расписание заданий агента репликации может быть задано программным путем с помощью объектов RMO.
Примечание.
Если при создании подписки указать для CreateSyncAgentByDefault значение false (поведение по умолчанию для подписок с вытягиванием), то задание агента не создается, а свойства расписания игнорируются. В этом случае расписание синхронизации задается приложением. Дополнительные сведения см. в разделах Create a Pull Subscription и Create a Push Subscription.
Определение расписания агента репликации при создании подписки принудительной доставки на транзакционную публикацию
Создайте экземпляр класса TransSubscription для создаваемой подписки. Дополнительные сведения см. в статье Создание принудительной подписки.
Перед вызовом метода Createустановите одно или несколько из следующих полей свойства AgentSchedule :
FrequencyType — тип частоты (например, ежедневно или еженедельно), которую вы используете при настройке расписания агента.
FrequencyInterval — день недели, в который запускается агент;
FrequencyRelativeInterval — неделя месяца, в которую запланирован ежемесячный запуск агента.
FrequencyRecurrenceFactor — число единиц частотного типа, возникающих между синхронизациями.
FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;
FrequencySubDayInterval — количество единиц частоты между запусками агента, если он запускается чаще одного раза в день.
ActiveStartTime — время самого раннего запуска агента в заданный день;
ActiveEndTime — время самого позднего запуска агента в заданный день;
ActiveStartDate — первый день действия расписания агента;
ActiveEndDate — последний день действия расписания агента.
Примечание.
Если не задать одно из этих свойств, будет использоваться значение по умолчанию.
Вызовите метод Create , чтобы создать подписку.
Создание расписания агента репликации при создании подписки по запросу на публикацию транзакций
Создайте экземпляр класса TransPullSubscription для создаваемой подписки. Дополнительные сведения см. в статье Создание подписки по запросу.
Перед вызовом метода Createустановите одно или несколько из следующих полей свойства AgentSchedule :
FrequencyType — частота (например, ежедневно или еженедельно), которую вы используете при настройке расписания агента.
FrequencyInterval — день недели, в который запускается агент;
FrequencyRelativeInterval — неделя указанного месяца, на которую запланирован запуск агента при ежемесячном запуске.
FrequencyRecurrenceFactor — число единиц частотного типа, возникающих между синхронизациями.
FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;
FrequencySubDayInterval — количество единиц частоты между запусками агента, если он запускается чаще одного раза в день.
ActiveStartTime — время самого раннего запуска агента в заданный день;
ActiveEndTime — время самого позднего запуска агента в заданный день;
ActiveStartDate — первый день действия расписания агента;
ActiveEndDate — последний день действия расписания агента.
Примечание.
Если не задать одно из этих свойств, будет использоваться значение по умолчанию.
Вызовите метод Create , чтобы создать подписку.
Определение расписания агента репликации при создании подписки по запросу на публикацию слияния
Создайте экземпляр класса MergePullSubscription для создаваемой подписки. Дополнительные сведения см. в статье Создание подписки по запросу.
Перед вызовом метода Createустановите одно или несколько из следующих полей свойства AgentSchedule :
FrequencyType — частота (например, ежедневно или еженедельно), которую вы используете при настройке расписания агента.
FrequencyInterval — день недели, в который запускается агент;
FrequencyRelativeInterval — неделя указанного месяца, на которую запланирован запуск агента при ежемесячном запуске.
FrequencyRecurrenceFactor — число единиц частотного типа, возникающих между синхронизациями.
FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;
FrequencySubDayInterval — количество единиц частоты между запусками агента, если он запускается чаще одного раза в день.
ActiveStartTime — время самого раннего запуска агента в заданный день;
ActiveEndTime — время самого позднего запуска агента в заданный день;
ActiveStartDate — первый день действия расписания агента;
ActiveEndDate — последний день действия расписания агента.
Примечание.
Если не задать одно из этих свойств, будет использоваться значение по умолчанию.
Вызовите метод Create , чтобы создать подписку.
Определение расписания агента репликации при создании принудительной подписки на публикацию слияния
Создайте экземпляр класса MergeSubscription для создаваемой подписки. Дополнительные сведения см. в статье Создание принудительной подписки.
Перед вызовом метода Createустановите одно или несколько из следующих полей свойства AgentSchedule :
FrequencyType — частота (например, ежедневно или еженедельно), которую вы используете при настройке расписания агента.
FrequencyInterval — день недели, в который запускается агент;
FrequencyRelativeInterval — неделя указанного месяца, на которую запланирован запуск агента при ежемесячном запуске.
FrequencyRecurrenceFactor — число единиц частотного типа, возникающих между синхронизациями.
FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;
FrequencySubDayInterval — количество единиц частоты между запусками агента, если он запускается чаще одного раза в день.
ActiveStartTime — время самого раннего запуска агента в заданный день;
ActiveEndTime — время самого позднего запуска агента в заданный день;
ActiveStartDate — первый день действия расписания агента;
ActiveEndDate — последний день действия расписания агента.
Примечание.
Если не задать одно из этих свойств, будет использоваться значение по умолчанию.
Вызовите метод 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