Указание расписаний синхронизации
В данном разделе описывается процесс задания расписаний синхронизации в SQL Server 2012 с помощью среды Среда SQL Server Management Studio, Transact-SQL или объектов RMO. При создании подписки можно определить расписание синхронизации, управляющее запуском агента репликации для подписки. Если не указать параметры расписания, подписка использует расписание по умолчанию.
Подписки синхронизируются агентом распространителя (для репликации моментальных снимков и репликации транзакций) или агентом слияния (для репликации слиянием). Агенты могут работать непрерывно, запускаться по запросу или по расписанию.
В этом разделе
Для задания расписаний синхронизации используется:
Среда SQL Server Management Studio
Transact-SQL
объекты RMO;
Использование среды SQL Server Management Studio
Укажите расписания синхронизации на странице Расписание синхронизации мастера создания подписки. Дополнительные сведения о доступе к этому мастеру см. в разделах Создание принудительной подписки и Создание подписки по запросу.
Измените расписания синхронизации в диалоговом окне Свойства расписания задания, доступном из папки Задания в среде Среда SQL Server Management Studio и в окнах подробных сведений агента в мониторе репликации. Сведения о запуске монитора репликации см. в разделе Запуск монитора репликации.
При указании расписаний из папки Задания используйте следующую таблицу для определения имени задания агента.
Агент |
Имя задания |
---|---|
Агент слияния для подписок по запросу |
<Издатель>-<база данных публикации>-<публикация>-<подписчик>-<база данных подписки>-<integer> |
Агент слияния для принудительных подписок |
<Издатель>-<база данных публикации>-<публикация>-<подписчик>-<integer> |
Агент распространителя для принудительных подписок |
<Издатель>-<База_данных_публикации>-<Публикация>-<Подписчик>-<integer>1 |
Агент распространителя для подписок по запросу |
<Издатель>-<База_данных_публикации>-<Публикация>-<Подписчик>-<База_данных_подписки>-<GUID>2 |
Агент распространителя для принудительных подписок подписчиков серверов, отличных от подписчиков SQL Server |
<Издатель>-<база данных публикации>-<публикация>-<подписчик>-<integer> |
1 Для принудительных подписок на публикации Oracle это <Publisher>-<Publisher>, а не <Publisher>-<PublicationDatabase>
2 Для подписок по запросу на публикации Oracle это <издатель>-<база данных распространителя>, а не <издатель>-<база данных публикации>
Указание расписаний синхронизации
На странице Расписание синхронизации мастера создания подписки выберите одно из следующих значений в раскрывающемся списке Расписание агента для каждой создаваемой подписки:
Выполнять постоянно
Запуск только по запросу
<Задать расписание…>
При выборе <Задать расписание…> укажите расписание в диалоговом окне Свойства расписания задания и затем щелкните ОК.
Завершите работу мастера.
Изменение расписания синхронизации для принудительных подписок в мониторе репликации
На левой панели монитора репликации раскройте группу издателей, раскройте нужного издателя, а затем выберите публикацию.
Перейдите на вкладку Все подписки.
Щелкните правой кнопкой мыши подписку, а затем выберите Просмотреть сведения.
В окне Подписка < имя_подписки> щелкните Действие, а затем щелкните Свойства задания <имя_агента>.
На странице Расписания диалогового окна Свойства задания — <имя_задания> нажмите кнопку Изменить.
В диалоговом окне Свойства расписания задания выберите значение из раскрывающегося списка Тип расписания:
Для указания непрерывной работы агента выберите Запускать автоматически при запуске агента SQL Server.
Для указания работы агента по расписанию выберите Периодически.
Для указания запуска агента по запросу выберите Один раз.
При выборе значения Периодически укажите расписание для агента.
Нажмите кнопку ОК.
Изменение расписания синхронизации для принудительных подписок в среде Management Studio
Подключитесь к распространителю в Среда Management Studio и раскройте узел сервера.
Раскройте папку Агент SQL Server, а затем — папку Задания.
Щелкните правой кнопкой задание для агента распространителя или агента слияния, связанных с подпиской, а затем щелкните Свойства.
На странице Расписания диалогового окна Свойства задания — <имя_задания> нажмите кнопку Изменить.
В диалоговом окне Свойства расписания задания выберите значение из раскрывающегося списка Тип расписания:
Для указания непрерывной работы агента выберите Запускать автоматически при запуске агента SQL Server.
Для указания работы агента по расписанию выберите Периодически.
Для указания запуска агента по запросу выберите Один раз.
При выборе значения Периодически укажите расписание для агента.
Нажмите кнопку ОК.
Изменение расписания синхронизации для подписок по запросу в среде Management Studio
Подключитесь к подписчику в Среда Management Studio и раскройте узел сервера.
Раскройте папку Агент SQL Server, а затем — папку Задания.
Щелкните правой кнопкой задание для агента распространителя или агента слияния, связанных с подпиской, а затем щелкните Свойства.
На странице Расписания диалогового окна Свойства задания — <имя_задания> нажмите кнопку Изменить.
В диалоговом окне Свойства расписания задания выберите значение из раскрывающегося списка Тип расписания:
Для указания непрерывной работы агента выберите Запускать автоматически при запуске агента SQL Server.
Для указания работы агента по расписанию выберите Периодически.
Для указания запуска агента по запросу выберите Один раз.
При выборе значения Периодически укажите расписание для агента.
Нажмите кнопку ОК.
[Top]
Использование 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 — последний день, когда расписание агента имеет силу.
Определение расписания синхронизации для подписки по запросу на публикацию транзакций
Создайте подписку по запросу на публикацию транзакций. Дополнительные сведения см. в разделе Создание подписки по запросу.
На подписчике выполните хранимую процедуру sp_addpullsubscription_agent (Transact-SQL). Укажите параметры @publisher, @publisher_db, @publication и учетные данные Microsoft Windows, с которыми выполняется агент распространителя на подписчике, для параметров @job_name и @password. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента распространителя, синхронизирующего подписку.
Определение расписания синхронизации для принудительной подписки на публикацию транзакций
Создайте принудительную подписку на публикацию транзакций. Дополнительные сведения см. в разделе Создание принудительной подписки.
На подписчике выполните хранимую процедуру 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. Укажите описанные выше параметры синхронизации, определяющие расписание для задания агента слияния, синхронизирующего подписку.
[Top]
При помощи объектов RMO
При выполнении репликации агент SQL Server производит планирование заданий для создания моментальных снимков и синхронизации подписок. Расписание заданий агента репликации может быть задано программным путем с помощью объектов RMO.
Примечание |
---|
Если при создании подписки в параметре CreateSyncAgentByDefault указано значение false (по умолчанию для подписок по запросу), то задание агента не создается, а параметры расписания не учитываются. В этом случае расписание синхронизации задается приложением. Дополнительные сведения см. в разделах Создание подписки по запросу и Создание принудительной подписки. |
Создание нового расписания агента репликации при создании принудительной подписки на публикацию транзакций
Создайте экземпляр класса 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 = "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]
См. также
Основные понятия
Рекомендации по защите репликации
Синхронизация принудительной подписки