Como especificar agendamentos de sincronização (Programação RMO)

A replicação usa o SQL Server Agent para agendar trabalhos para atividades que ocorrem periodicamente, como geração de instantâneo e sincronização de assinatura. Use programaticamente os RMO (Replication Management Objects) para especificar agendamentos de trabalhos de agente de replicação.

ObservaçãoObservação

Quando uma subscrição é criada e um valor false é especificado para CreateSyncAgentByDefault (comportamento padrão para inscrições pull), o trabalho do agente não é criado e as propriedades agendadas são ignoradas. Nesse caso, o agendamento de sincronização precisará ser determinado pelo aplicativo. Para obter mais informações, consulte Como criar uma assinatura pull (Programação RMO) e Como criar uma assinatura push (programação RMO).

Para definir um agendamento de agente de replicação quando é criada uma assinatura push para uma publicação transacional

  1. Crie uma instância da classe TransSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Como criar uma assinatura push (programação RMO).

  2. Antes de chamar Create, defina um ou mais dos campos seguintes da propriedade AgentSchedule:

    • FrequencyType- o tipo de freqüência (como diária ou semanalmente) usado para agendar o agente.

    • FrequencyInterval - dia da semana em que o agente é executado.

    • FrequencyRelativeInterval - semana de um determinado mês em que o agente é agendado para ser executado mensalmente.

    • FrequencyRecurrenceFactor- número de unidades do tipo-freqüência que ocorrem entre sincronizações.

    • FrequencySubDay - unidade de freqüência quando o agente é executado com mais freqüência que uma vez ao dia.

    • FrequencySubDayInterval - número de unidades de freqüência entre execuções quando o agente é executado com mais freqüência que uma vez ao dia.

    • ActiveStartTime- hora anterior em determinado dia em que tem início a execução do agente.

    • ActiveEndTime- hora posterior em um determinado dia em que tem início a execução do agente.

    • ActiveStartDate- primeiro dia em que o agendamento do agente entra em vigor.

    • ActiveEndDate- último dia em que o agendamento do agente entra em vigor.

    ObservaçãoObservação

    Se uma dessas propriedades não for especificada, um valor padrão será determinado.

  3. Chame o método Create para criar a assinatura.

Para definir um agendamento de agente de replicação quando é criada uma assinatura pull para uma publicação transacional

  1. Crie uma instância da classe TransPullSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Como criar uma assinatura pull (Programação RMO).

  2. Antes de chamar Create, defina um ou mais dos campos seguintes da propriedade AgentSchedule:

    • FrequencyType - tipo de freqüência (por exemplo, diária ou semanal) usada durante o agendamento do agente.

    • FrequencyInterval - dia da semana em que o agente é executado.

    • FrequencyRelativeInterval - semana de um determinado mês em que o agente é agendado para ser executado mensalmente.

    • FrequencyRecurrenceFactor- número de unidades do tipo-freqüência que ocorrem entre sincronizações.

    • FrequencySubDay - unidade de freqüência em que o agente é executado com freqüência maior que uma vez ao dia.

    • FrequencySubDayInterval - número de unidades de freqüência entre execuções quando o agente é executado com freqüência maior que uma vez ao dia.

    • ActiveStartTime- hora anterior em determinado dia em que tem início a execução do agente.

    • ActiveEndTime- hora posterior em um determinado dia em que tem início a execução do agente.

    • ActiveStartDate- primeiro dia em que o agendamento do agente entra em vigor.

    • ActiveEndDate- último dia de vigência do agendamento.

    ObservaçãoObservação

    Se uma dessas propriedades não for especificada, um valor padrão será determinado.

  3. Chame o método Create para criar a assinatura.

Para definir um agendamento de agente de replicação quando uma assinatura pull é criada para uma publicação de mesclagem

  1. Crie uma instância da classe MergePullSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Como criar uma assinatura pull (Programação RMO).

  2. Antes de chamar Create, defina um ou mais dos campos seguintes da propriedade AgentSchedule:

    • FrequencyType - tipo de freqüência (por exemplo, diária ou semanal) usada durante o agendamento do agente.

    • FrequencyInterval - dia da semana em que o agente é executado.

    • FrequencyRelativeInterval - semana de um determinado mês em que o agente é agendado para ser executado mensalmente.

    • FrequencyRecurrenceFactor- número de unidades do tipo-freqüência que ocorrem entre sincronizações.

    • FrequencySubDay - unidade de freqüência em que o agente é executado com freqüência maior que uma vez ao dia.

    • FrequencySubDayInterval - número de unidades de freqüência entre execuções quando o agente é executado com freqüência maior que uma vez ao dia.

    • ActiveStartTime- hora anterior em determinado dia em que tem início a execução do agente.

    • ActiveEndTime- hora posterior em um determinado dia em que tem início a execução do agente.

    • ActiveStartDate- primeiro dia em que o agendamento do agente entra em vigor.

    • ActiveEndDate- último dia de vigência do agendamento.

    ObservaçãoObservação

    Se uma dessas propriedades não for especificada, um valor padrão será determinado.

  3. Chame o método Create para criar a assinatura.

Para definir um agendamento de agente de replicação quando uma assinatura push é criada para uma publicação de mesclagem

  1. Crie uma instância da classe MergeSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Como criar uma assinatura push (programação RMO).

  2. Antes de chamar Create, defina um ou mais dos campos seguintes da propriedade AgentSchedule:

    • FrequencyType - tipo de freqüência (por exemplo, diária ou semanal) usada durante o agendamento do agente.

    • FrequencyInterval - dia da semana em que o agente é executado.

    • FrequencyRelativeInterval - semana de um determinado mês em que o agente é agendado para ser executado mensalmente.

    • FrequencyRecurrenceFactor- número de unidades do tipo-freqüência que ocorrem entre sincronizações.

    • FrequencySubDay - unidade de freqüência em que o agente é executado com freqüência maior que uma vez ao dia.

    • FrequencySubDayInterval - número de unidades de freqüência entre execuções quando o agente é executado com freqüência maior que uma vez ao dia.

    • ActiveStartTime- hora anterior em determinado dia em que tem início a execução do agente.

    • ActiveEndTime- hora posterior em um determinado dia em que tem início a execução do agente.

    • ActiveStartDate- primeiro dia em que o agendamento do agente entra em vigor.

    • ActiveEndDate- último dia de vigência do agendamento.

    ObservaçãoObservação

    Se uma dessas propriedades não for especificada, um valor padrão será determinado.

  3. Chame o método Create para criar a assinatura.

Exemplo

Esse exemplo cria uma assinatura push para uma publicação de mesclagem e especifica o agendamento em que a assinatura é sincronizada.

          // 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