Compartir a través de


Especificar programaciones de sincronización

Se aplica a: SQL Server Azure SQL Managed Instance

Este tema describe cómo especificar programaciones de sincronización en SQL Server mediante SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO). Al crear una suscripción, puede definir una programación de sincronización que controla cuándo se ejecutará el agente de replicación para la suscripción. Si no especifica parámetros de programación, la suscripción usará la programación predeterminada.

El Agente de distribución (para las instantáneas y la replicación transaccional) o el Agente de mezcla (para la replicación de mezcla) sincronizan las suscripciones. Los agentes pueden ejecutarse continuamente, a petición o según una programación.

En este tema

Uso de SQL Server Management Studio

Especifique programaciones de sincronización en la página Programación de sincronización del Asistente para nuevas suscripciones. Para obtener más información sobre cómo utilizar este asistente, vea Create a Push Subscription y Create a Pull Subscription.

Modifique las programaciones de sincronización en el cuadro de diálogo Propiedades de programación de trabajos, disponible en la carpeta Trabajos en SQL Server Management Studio y desde las ventanas de detalle del agente en el Monitor de replicación. Para información sobre cómo iniciar el Monitor de replicación, vea Iniciar el Monitor de replicación.

Si especifica programaciones desde la carpeta Trabajos , use la tabla siguiente para determinar el nombre del trabajo del agente.

Agente Nombre del trabajo
Agente de mezcla para suscripciones de extracción <Publicador>-<BaseDeDatosDePublicación>-<Publicación>-<Suscriptor>-<BaseDeDatosDeSuscripción>-<entero>
Agente de mezcla para suscripciones de inserción <Publicador>-<BaseDeDatosDePublicación>-<Publicación>-<Suscriptor>-<entero>
Agente de distribución para suscripciones de inserción <Publicador>-<BaseDeDatosDePublicación>-<Publicación>-<Suscriptor>-<entero> 1
Agente de distribución para suscripciones de extracción <Publicador>-<BaseDeDatosDePublicación>-<Publicación>-<Suscriptor>-<BaseDeDatosDeSuscripción>-<GUID> 2
Agente de distribución para suscripciones de inserción en suscriptores que no sean de SQL Server <Publicador>-<BaseDeDatosDePublicación>-<Publicación>-<Suscriptor>-<entero>

1 Para suscripciones de inserción a publicaciones de Oracle, es <Publicador>-<Publicador> en lugar de <Publicador>-<BaseDeDatosDePublicación>

2 Para suscripciones de extracción a publicaciones de Oracle, es <Publicador>-<BaseDeDatosDeDistribución> en lugar de <Publicador>-<BaseDeDatosDePublicación>

Para especificar programaciones de sincronización

  1. En la página Programación de sincronización del Asistente para nuevas suscripciones, seleccione uno de los siguientes valores en la lista desplegable Programación del agente para cada suscripción que quiera crear:

    • Ejecutar continuamente

    • Ejecutar solamente a petición

    • <Definir programación...>

  2. Si selecciona <Definir programación...>, especifique una programación en el cuadro de diálogo Propiedades de programación del trabajo y, después, haga clic en Aceptar.

  3. Finalice el asistente.

Para modificar una programación de sincronización para una suscripción de inserción en el Monitor de replicación

  1. Expanda un grupo de publicador en el panel izquierdo del Monitor de replicación, expanda un publicador y, a continuación, haga clic en una publicación.

  2. Haga clic en la pestaña Todas las suscripciones .

  3. Haga clic con el botón secundario en una suscripción y, a continuación, haga clic en Ver detalles.

  4. En la ventana Suscripción < nombreDeSuscripción>, haga clic en Acción y, después, haga clic en <Propiedades del trabajo del >NombreDeAgente.

  5. En la página Programaciones del cuadro de diálogo Propiedades del trabajo - <nombreDelTrabajo>, haga clic en Editar.

  6. En el cuadro de diálogo Propiedades de programación del trabajo , seleccione un valor en la lista desplegable Tipo de programación :

    • Para especificar que el agente debe ejecutarse continuamente, seleccione Iniciar automáticamente al iniciar el Agente SQL Server.

    • Para especificar que el agente debe ejecutarse de acuerdo con una programación, seleccione Periódica.

    • Para especificar que el agente debe ejecutarse a petición, seleccione Una vez.

  7. Si selecciona Periódica, especifique una programación para el agente.

  8. Seleccione Aceptar.

Para modificar una programación de sincronización para una suscripción de inserción en Management Studio

  1. Conéctese al distribuidor en Management Studio y expanda el nodo de servidor.

  2. Expanda la carpeta Agente SQL Server y a continuación la carpeta Trabajos .

  3. Haga clic con el botón secundario en el trabajo del Agente de distribución o de mezcla asociado con la suscripción y, a continuación, haga clic en Propiedades.

  4. En la página Programaciones del cuadro de diálogo Propiedades del trabajo - <nombreDelTrabajo>, haga clic en Editar.

  5. En el cuadro de diálogo Propiedades de programación del trabajo , seleccione un valor en la lista desplegable Tipo de programación :

    • Para especificar que el agente debe ejecutarse continuamente, seleccione Iniciar automáticamente al iniciar el Agente SQL Server.

    • Para especificar que el agente debe ejecutarse de acuerdo con una programación, seleccione Periódica.

    • Para especificar que el agente debe ejecutarse a petición, seleccione Una vez.

  6. Si selecciona Periódica, especifique una programación para el agente.

  7. Seleccione Aceptar.

Para modificar una programación de sincronización para una suscripción de extracción en Management Studio

  1. Conéctese al suscriptor en Management Studio y expanda el nodo de servidor.

  2. Expanda la carpeta Agente SQL Server y a continuación la carpeta Trabajos .

  3. Haga clic con el botón secundario en el trabajo del Agente de distribución o de mezcla asociado con la suscripción y, a continuación, haga clic en Propiedades.

  4. En la página Programaciones del cuadro de diálogo Propiedades del trabajo - <nombreDelTrabajo>, haga clic en Editar.

  5. En el cuadro de diálogo Propiedades de programación del trabajo , seleccione un valor en la lista desplegable Tipo de programación :

    • Para especificar que el agente debe ejecutarse continuamente, seleccione Iniciar automáticamente al iniciar el Agente SQL Server.

    • Para especificar que el agente debe ejecutarse de acuerdo con una programación, seleccione Periódica.

    • Para especificar que el agente debe ejecutarse a petición, seleccione Una vez.

  6. Si selecciona Periódica, especifique una programación para el agente.

  7. Seleccione Aceptar.

Usar Transact-SQL

Puede definir programaciones de sincronización mediante programación usando los procedimientos almacenados de replicación. Los procedimientos almacenados que usa dependen del tipo de replicación y del tipo de suscripción (extracción o inserción).

Los parámetros de programación siguientes definen una programación, cuyos comportamientos se heredan de sp_add_schedule (Transact-SQL):

  • @frequency_type : el tipo de frecuencia usado al programar el agente

  • @frequency_interval : el día de la semana cuando se ejecuta un agente

  • @frequency_relative_interval : la semana de un mes determinado en que el agente se programa para la ejecución mensual

  • @frequency_recurrence_factor : el número de unidades del tipo de frecuencia que se producen entre las sincronizaciones

  • @frequency_subday : la unidad de frecuencia cuando el agente se ejecuta más que una vez al día

  • @frequency_subday_interval : el número de unidades de frecuencia entre ejecuciones cuando el agente se ejecuta más de una vez al día

  • @active_start_time_of_day : la primera hora de un día determinado cuando se va a iniciar la ejecución de un agente

  • @active_end_time_of_day : la hora más reciente de un día determinado cuando se va a iniciar la ejecución de un agente

  • @active_start_date : el primer día en que la programación del agente entrará en vigor

  • @active_end_date : el último día en que la programación del agente entrará en vigor

Para definir la programación de sincronización para una suscripción de extracción a una publicación transaccional

  1. Cree una nueva suscripción de extracción para una publicación transaccional. Para obtener más información, consulte Create a Pull Subscription.

  2. En el suscriptor, ejecute sp_addpullsubscription_agent (Transact-SQL). Especifique @publisher, @publisher_db, @publication y las credenciales de Microsoft Windows con las que se ejecuta el Agente de distribución en el suscriptor para @job_name y @password. Especifique los parámetros de sincronización, detallados anteriormente, que definen la programación para el trabajo del Agente de distribución que sincroniza la suscripción.

Para definir la programación de sincronización para una suscripción de inserción a una publicación transaccional

  1. Cree una nueva suscripción de inserción para una publicación transaccional. Para obtener más información, consulte Create a Push Subscription.

  2. En el suscriptor, ejecute sp_addpushsubscription_agent (Transact-SQL). Especifique @subscriber, @subscriber_db, @publicationy las credenciales de Windows con las que se ejecuta el Agente de distribución en el suscriptor para @job_name y @password. Especifique los parámetros de sincronización, detallados anteriormente, que definen la programación para el trabajo del Agente de distribución que sincroniza la suscripción.

Para definir la programación de sincronización para una suscripción de extracción a una publicación de combinación

  1. Cree una nueva suscripción de extracción para una publicación de combinación. Para obtener más información, consulte Create a Pull Subscription.

  2. En el suscriptor, ejecute sp_addmergepullsubscription_agent. Especifique @publisher, @publisher_db, @publicationy las credenciales de Windows con las que se ejecuta el Agente de mezcla en el suscriptor para @job_name y @password. Especifique los parámetros de sincronización, detallados anteriormente, que definen la programación para el trabajo del Agente de distribución que sincroniza la suscripción.

Para definir la programación de sincronización para una suscripción de inserción a una publicación de combinación

  1. Cree una nueva suscripción de inserción a una publicación de combinación. Para obtener más información, consulte Create a Push Subscription.

  2. En el suscriptor, ejecute sp_addmergepushsubscription_agent. Especifique @subscriber, @subscriber_db, @publicationy las credenciales de Windows con las que se ejecuta el Agente de mezcla en el suscriptor para @job_name y @password. Especifique los parámetros de sincronización, detallados anteriormente, que definen la programación para el trabajo del Agente de distribución que sincroniza la suscripción.

Usar Replication Management Objects (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 Replication Management Objects (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, consulte Create a Pull Subscription y Create a Push Subscription.

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, consulte Create a Push Subscription.

  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 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, consulte Create a Pull Subscription.

  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 de combinación

  1. Cree una instancia de la clase MergePullSubscription para la base de datos de suscripciones que está creando. Para obtener más información, consulte Create a Pull Subscription.

  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 de combinación

  1. Cree una instancia de la clase MergeSubscription para la base de datos de suscripciones que está creando. Para obtener más información, consulte Create a Push Subscription.

  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 (RMO)

Este ejemplo crea una suscripción de inserción a una publicación de combinación 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 = "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