Especificar programaciones de sincronización

Se aplica a:SQL ServerAzure 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.

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

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 push <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 push para suscriptores que no son de SQL Server <Publicador>-<BaseDeDatosDePublicación>-<Publicación>-<Suscriptor>-<entero>

1 Para suscripciones push a publicaciones de Oracle, es <Publisher>-<Publisher> en lugar de <Publisher>-<PublicationDatabase>

2 Para las suscripciones de extracción a publicaciones de Oracle, es <Publisher>-<DistributionDatabase> en lugar de <Publisher>-<PublicationDatabase>

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 de forma continua

    • 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.

Modificar el programa de sincronización de 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 un programa de sincronización de una suscripción push 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.

Uso de 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 en que se ejecuta un agente

  • @frequency_relative_interval - la semana de un mes determinado en la que el agente está programado para ejecutarse mensualmente

  • @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 una ejecución y otra cuando el agente se ejecuta más de una vez al día.

  • @active_start_time_of_day - la hora más temprana de un día determinado a la que se iniciará la ejecución de 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 a partir del cual el horario del agente estará en vigor

  • @active_end_date - el último día en que el horario del agente estará vigente

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 push a una publicación transaccional

  1. Cree una nueva suscripción push 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 del trabajo del Agente de mezcla que sincroniza la suscripción.

Para definir la programación de la sincronización de una suscripción push para una publicación de mezcla

  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 del trabajo del Agente de mezcla que sincroniza la suscripción.

Uso de los objetos de administración de replicación (RMO)

La replicación usa Agente SQL Server para programar trabajos para actividades que se realizan periódicamente, como la generación de instantáneas y la sincronización de suscripciones. Puede usar Replication Management Objects (RMO) mediante programación para definir la programación de los trabajos de los agentes de replicación.

Nota:

Cuando crea una suscripción y especifica un valor false para CreateSyncAgentByDefault (el comportamiento predeterminado de las suscripciones de extracción), no se crea el trabajo del agente y se omiten las propiedades de 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 la programación del agente de replicación al crear una suscripción push para 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 el agente está programado para ejecutarse mensualmente.

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

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

    • FrequencySubDayInterval - el número de unidades de frecuencia entre una ejecución y otra si 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 hora más tardía de un día determinado en que se inicia la ejecución de un agente.

    • ActiveStartDate - primer día en que entra en vigor el horario del agente.

    • ActiveEndDate - último día en que el horario del agente está en vigor.

    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 la 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 dado en la que está programado el agente para ejecutarse 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 una ejecución y otra cuando el agente se ejecuta más de una vez al día.

    • ActiveStartTime - la hora más temprana 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 en que entra en vigor el horario del agente.

    • ActiveEndDate - último día en que el horario del agente está en vigor.

    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 la programación de un agente de replicación al crear una suscripción de extracción a una publicación de 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, 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 dado en la que está programado el agente para ejecutarse 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 una ejecución y otra 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 en que entra en vigor el horario del agente.

    • ActiveEndDate - último día en que el horario del agente está en vigor.

    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 la programación de un 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 dado en la que está programado el agente para ejecutarse 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 una ejecución y otra 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 en que entra en vigor el horario del agente.

    • ActiveEndDate - último día en que el horario del agente está en vigor.

    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 push a una publicación de mezcla y especifica la programación según la cual 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