Compartir a través de


Cómo especificar programaciones de sincronización (programación con RMO)

La replicación usa el Agente SQL Server para programar los trabajos de las actividades que se producen periódicamente, como la generación de instantáneas y la sincronización de suscripción. Puede usar objetos de administración de replicación (RMO) mediante programación para especificar las programaciones de los trabajos de agente de replicación.

Nota

Si crea una suscripción y especifica un valor false para CreateSyncAgentByDefault (comportamiento predeterminado de las suscripciones de extracción), no se crea el trabajo del agente y se omiten las propiedades de la programación. En este caso, la aplicación debe determinar la programación de sincronización. Para obtener más información, vea Cómo crear una suscripción de extracción (programación con RMO) y Cómo crear una suscripción de inserción (programación con RMO).

Para definir una programación del agente de replicación al crear una suscripción de inserción a una publicación transaccional

  1. Cree una instancia de la clase TransSubscription para la base de datos de suscripciones que está creando. Para obtener más información, vea Cómo crear una suscripción de inserción (programación con RMO).

  2. Antes de llamar Create, establezca uno o varios de los campos siguientes de la propiedad AgentSchedule:

    • FrequencyType- el tipo de frecuencia (como diaria o semanal) que usa al programar el agente.

    • FrequencyInterval- el día de la semana en el que se ejecuta un agente.

    • FrequencyRelativeInterval- la semana de un mes determinado en la que se programa el agente para que se ejecute mensualmente.

    • FrequencyRecurrenceFactor- el número de unidades de tipo de frecuencia que se producen entre las sincronizaciones.

    • FrequencySubDay- la unidad de frecuencia cuando el agente se ejecuta más de una vez al día.

    • FrequencySubDayInterval- el número de unidades de frecuencia entre ejecuciones cuando el agente se ejecuta más de una vez al día.

    • ActiveStartTime- la primera hora de un día determinado en la que se inicia la ejecución de un agente.

    • ActiveEndTime- la primera hora de un día determinado en la que se inicia la ejecución de un agente.

    • ActiveStartDate- primer día vigente de la programación del agente.

    • ActiveEndDate- último día vigente de la programación del agente.

    Nota

    Si no especifica una de estas propiedades, se establece un valor predeterminado.

  3. Llame al método Create para crear la suscripción.

Para definir una programación del agente de replicación al crear una suscripción de extracción a una publicación transaccional

  1. Cree una instancia de la clase TransPullSubscription para la base de datos de suscripciones que está creando. Para obtener más información, vea Cómo crear una suscripción de extracción (programación con RMO).

  2. Antes de llamar Create, establezca uno o varios de los campos siguientes de la propiedad AgentSchedule:

    • FrequencyType- el tipo de frecuencia (como diaria o semanal) que usa al programar el agente.

    • FrequencyInterval- el día de la semana en el que se ejecuta un agente.

    • FrequencyRelativeInterval- la semana de un mes determinado en la que se programa el agente para que se ejecute mensualmente.

    • FrequencyRecurrenceFactor- el número de unidades de tipo de frecuencia que se producen entre las sincronizaciones.

    • FrequencySubDay- la unidad de frecuencia cuando el agente se ejecuta más de una vez al día.

    • FrequencySubDayInterval- el número de unidades de frecuencia entre ejecuciones cuando el agente se ejecuta más de una vez al día.

    • ActiveStartTime- la primera hora de un día determinado en la que se inicia la ejecución de un agente.

    • ActiveEndTime- la última hora de un día determinado en la que se inicia la ejecución de un agente.

    • ActiveStartDate- primer día vigente de la programación del agente.

    • ActiveEndDate- último día vigente de la programación del agente.

    Nota

    Si no especifica una de estas propiedades, se establece un valor predeterminado.

  3. Llame al método Create para crear la suscripción.

Para definir una programación del agente de replicación al crear una suscripción de extracción a una publicación mezcla

  1. Cree una instancia de la clase MergePullSubscription para la base de datos de suscripciones que está creando. Para obtener más información, vea Cómo crear una suscripción de extracción (programación con RMO).

  2. Antes de llamar Create, establezca uno o varios de los campos siguientes de la propiedad AgentSchedule:

    • FrequencyType- el tipo de frecuencia (como diaria o semanal) que usa al programar el agente.

    • FrequencyInterval- el día de la semana en el que se ejecuta un agente.

    • FrequencyRelativeInterval- la semana de un mes determinado en la que se programa el agente para que se ejecute mensualmente.

    • FrequencyRecurrenceFactor- el número de unidades de tipo de frecuencia que se producen entre las sincronizaciones.

    • FrequencySubDay- la unidad de frecuencia cuando el agente se ejecuta más de una vez al día.

    • FrequencySubDayInterval- el número de unidades de frecuencia entre ejecuciones cuando el agente se ejecuta más de una vez al día.

    • ActiveStartTime- la primera hora de un día determinado en la que se inicia la ejecución de un agente.

    • ActiveEndTime- la última hora de un día determinado en la que se inicia la ejecución de un agente.

    • ActiveStartDate- primer día vigente de la programación del agente.

    • ActiveEndDate- último día vigente de la programación del agente.

    Nota

    Si no especifica una de estas propiedades, se establece un valor predeterminado.

  3. Llame al método Create para crear la suscripción.

Para definir una programación del agente de replicación al crear una suscripción de inserción a una publicación mezcla

  1. Cree una instancia de la clase MergeSubscription para la base de datos de suscripciones que está creando. Para obtener más información, vea Cómo crear una suscripción de inserción (programación con RMO).

  2. Antes de llamar Create, establezca uno o varios de los campos siguientes de la propiedad AgentSchedule:

    • FrequencyType- el tipo de frecuencia (como diaria o semanal) que usa al programar el agente.

    • FrequencyInterval- el día de la semana en el que se ejecuta un agente.

    • FrequencyRelativeInterval- la semana de un mes determinado en la que se programa el agente para que se ejecute mensualmente.

    • FrequencyRecurrenceFactor- el número de unidades de tipo de frecuencia que se producen entre las sincronizaciones.

    • FrequencySubDay- la unidad de frecuencia cuando el agente se ejecuta más de una vez al día.

    • FrequencySubDayInterval- el número de unidades de frecuencia entre ejecuciones cuando el agente se ejecuta más de una vez al día.

    • ActiveStartTime- la primera hora de un día determinado en la que se inicia la ejecución de un agente.

    • ActiveEndTime- la última hora de un día determinado en la que se inicia la ejecución de un agente.

    • ActiveStartDate- primer día vigente de la programación del agente.

    • ActiveEndDate- último día vigente de la programación del agente.

    Nota

    Si no especifica una de estas propiedades, se establece un valor predeterminado.

  3. Llame al método Create para crear la suscripción.

Ejemplo

Este ejemplo crea una suscripción de inserción a una publicación de mezcla y especifica la programación en la que se sincroniza la suscripción.

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