Как задать расписания синхронизации (программирование объектов RMO)
При выполнении репликации агент SQL Server производит планирование заданий для создания моментальных снимков и синхронизации подписок. Расписание заданий агента репликации может быть задано программным путем с помощью объектов RMO.
Примечание |
---|
Если при создании подписки в параметре CreateSyncAgentByDefault указано значение false (по умолчанию для подписок по запросу), то задание агента не создается, а параметры расписания не учитываются. В этом случае расписание синхронизации задается приложением. Дополнительные сведения см. в образце кода Как создать подписку по запросу (программирование объектов RMO) и разделе Как создавать принудительные подписки (программирование объектов RMO). |
Создание нового расписания агента репликации при создании принудительной подписки на публикацию транзакций
Создайте экземпляр класса TransSubscription для создаваемой подписки. Дополнительные сведения см. в разделе Как создавать принудительные подписки (программирование объектов RMO).
Перед вызовом метода Create установите одно или несколько из следующих полей свойства AgentSchedule:
FrequencyType — частота запуска агента по расписанию (например ежедневно или еженедельно);
FrequencyInterval — день недели, в который запускается агент;
FrequencyRelativeInterval — номер недели в месяце, если агент запускается ежемесячно;
FrequencyRecurrenceFactor — число частотных единиц, проходящих между последовательными синхронизациями;
FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;
FrequencySubDayInterval — число частотных единиц, проходящих между запусками агента, если он запускается чаще одного раза в день;
ActiveStartTime — время самого раннего запуска агента в заданный день;
ActiveEndTime — время самого позднего запуска агента в заданный день;
ActiveStartDate — первый день действия расписания агента;
ActiveEndDate — последний день действия расписания агента.
Примечание Если не задать одно из этих свойств, будет использоваться значение по умолчанию.
Вызовите метод Create, чтобы создать подписку.
Создание расписания агента репликации при создании подписки по запросу на публикацию транзакций
Создайте экземпляр класса TransPullSubscription для создаваемой подписки. Дополнительные сведения см. в разделе Как создать подписку по запросу (программирование объектов RMO).
Перед вызовом метода Create установите одно или несколько из следующих полей свойства AgentSchedule:
FrequencyType — тип интервала для запуска агента по расписанию (например ежедневно или еженедельно);
FrequencyInterval — день недели, в который запускается агент;
FrequencyRelativeInterval — неделя в заданном месяце, на которой запускается агент при ежемесячном режиме работы;
FrequencyRecurrenceFactor — число частотных единиц, проходящих между последовательными синхронизациями;
FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;
FrequencySubDayInterval — число частотных единиц, проходящих между запусками агента, если он запускается чаще одного раза в день;
ActiveStartTime — время самого раннего запуска агента в заданный день;
ActiveEndTime — время самого позднего запуска агента в заданный день;
ActiveStartDate — первый день действия расписания агента;
ActiveEndDate — последний день действия расписания агента.
Примечание Если не задать одно из этих свойств, будет использоваться значение по умолчанию.
Вызовите метод Create, чтобы создать подписку.
Создание расписания агента репликации при создании подписки по запросу на публикацию слиянием
Создайте экземпляр класса MergePullSubscription для создаваемой подписки. Дополнительные сведения см. в разделе Как создать подписку по запросу (программирование объектов RMO).
Перед вызовом метода Create установите одно или несколько из следующих полей свойства AgentSchedule:
FrequencyType — тип интервала для запуска агента по расписанию (например ежедневно или еженедельно);
FrequencyInterval — день недели, в который запускается агент;
FrequencyRelativeInterval — неделя в заданном месяце, на которой запускается агент при ежемесячном режиме работы;
FrequencyRecurrenceFactor — число частотных единиц, проходящих между последовательными синхронизациями;
FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;
FrequencySubDayInterval — число частотных единиц, проходящих между запусками агента, если он запускается чаще одного раза в день;
ActiveStartTime — время самого раннего запуска агента в заданный день;
ActiveEndTime — время самого позднего запуска агента в заданный день;
ActiveStartDate — первый день действия расписания агента;
ActiveEndDate — последний день действия расписания агента.
Примечание Если не задать одно из этих свойств, будет использоваться значение по умолчанию.
Вызовите метод Create, чтобы создать подписку.
Создание расписания агента репликации при создании принудительной подписки на публикацию слиянием
Создайте экземпляр класса MergeSubscription для создаваемой подписки. Дополнительные сведения см. в разделе Как создавать принудительные подписки (программирование объектов RMO).
Перед вызовом метода Create установите одно или несколько из следующих полей свойства AgentSchedule:
FrequencyType — тип интервала для запуска агента по расписанию (например ежедневно или еженедельно);
FrequencyInterval — день недели, в который запускается агент;
FrequencyRelativeInterval — неделя в заданном месяце, на которой запускается агент при ежемесячном режиме работы;
FrequencyRecurrenceFactor — число частотных единиц, проходящих между последовательными синхронизациями;
FrequencySubDay — частотная единица, используемая, если агент запускается чаще одного раза в день;
FrequencySubDayInterval — число частотных единиц, проходящих между запусками агента, если он запускается чаще одного раза в день;
ActiveStartTime — время самого раннего запуска агента в заданный день;
ActiveEndTime — время самого позднего запуска агента в заданный день;
ActiveStartDate — первый день действия расписания агента;
ActiveEndDate — последний день действия расписания агента.
Примечание Если не задать одно из этих свойств, будет использоваться значение по умолчанию.
Вызовите метод Create, чтобы создать подписку.
Пример
В следующем примере производится создание принудительной подписки на публикацию слиянием, а также задается расписание синхронизации указанной подписки.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2008R2Replica";
string publicationDbName = "AdventureWorks2008R2";
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 = "AdventureWorks2008R2Replica"
Dim publicationDbName As String = "AdventureWorks2008R2"
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
См. также