Especificar programaciones de sincronización
En este tema se describe cómo especificar programaciones de sincronización en SQL Server 2012 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
Para especificar programaciones de sincronización con:
SQL Server Management Studio
Transact-SQL
Replication Management Objects (RMO)
Usar 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 Crear una suscripción de inserción y Crear una suscripción de extracción.
Modifique las programaciones de sincronización en el cuadro de diálogo Propiedades de programación del trabajo, al que se obtiene acceso desde la carpeta Trabajos de SQL Server Management Studio y desde las ventanas de detalles del agente en el Monitor de replicación. Para obtener 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>-<baseDeDatosDePublicaciones>-<publicación>-<suscriptor>-<baseDeDatosDeSuscripción>-<entero> |
Agente de mezcla para suscripciones de inserción |
<publicador>-<baseDeDatosDePublicaciones>-<publicación>-<suscriptor>-<entero> |
Agente de distribución para suscripciones de inserción |
<publicador>-<baseDeDatosDePublicaciones>-<publicación>-<suscriptor>-<entero>1 |
Agente de distribución para suscripciones de extracción |
<publicador>-<baseDeDatosDePublicaciones>-<publicación>-<suscriptor>-<baseDeDatosDeSuscripciones>-<GUID>2 |
Agente de distribución para suscripciones de inserción en suscriptores que no sean de SQL Server |
<publicador>-<baseDeDatosDePublicaciones>-<publicación>-<suscriptor>-<entero> |
1 Para las suscripciones de inserción a publicaciones de Oracle, es <publicador>-<publicador> en lugar de <publicador>-<baseDeDatosDePublicaciones>.
2 Para las suscripciones de extracción a publicaciones de Oracle, es <publicador>-<baseDeDatosDeDistribución> en lugar de <publicador>-<baseDeDatosDePublicaciones>.
Para especificar programaciones de sincronización
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 desee crear:
Ejecutar continuamente
Ejecutar solamente a petición
<Definir programación…>
Si selecciona <Definir programación…>, especifique una programación en el cuadro de diálogo Propiedades de programación del trabajo y, a continuación, haga clic en Aceptar.
Finalice el asistente.
Para modificar una programación de sincronización para una suscripción de inserción en el Monitor de replicación
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.
Haga clic en la pestaña Todas las suscripciones.
Haga clic con el botón secundario en una suscripción y, a continuación, haga clic en Ver detalles.
En la ventana Suscripción <nombreDeSuscripción>, haga clic en Acción y, a continuación, haga clic en Propiedades del trabajo del <nombreDeAgente>.
En la página Programaciones del cuadro de diálogo Propiedades del trabajo: <nombreDeTrabajo>, haga clic en Editar.
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.
Si selecciona Periódica, especifique una programación para el agente.
Haga clic en Aceptar.
Para modificar una programación de sincronización para una suscripción de inserción en Management Studio
Conéctese al distribuidor en Management Studio y, a continuación, expanda el nodo de servidor.
Expanda la carpeta Agente SQL Server y, a continuación, la carpeta Trabajos.
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.
En la página Programaciones del cuadro de diálogo Propiedades del trabajo: <nombreDeTrabajo>, haga clic en Editar.
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.
Si selecciona Periódica, especifique una programación para el agente.
Haga clic en Aceptar.
Para modificar una programación de sincronización para una suscripción de extracción en Management Studio
Conéctese al suscriptor en Management Studio y expanda el nodo de servidor.
Expanda la carpeta Agente SQL Server y a continuación la carpeta Trabajos.
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.
En la página Programaciones del cuadro de diálogo Propiedades del trabajo: <nombreDeTrabajo>, haga clic en Editar.
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.
Si selecciona Periódica, especifique una programación para el agente.
Haga clic en Aceptar.
[Top]
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, los comportamientos de los que 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
Cree una nueva suscripción de extracción para una publicación transaccional. Para obtener más información, vea Crear una suscripción de extracción.
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
Cree una nueva suscripción de inserción para una publicación transaccional. Para obtener más información, vea Crear una suscripción de inserción.
En el Suscriptor, ejecute sp_addpushsubscription_agent (Transact-SQL). Especifique @subscriber, @subscriber_db, @publication y 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
Cree una nueva suscripción de extracción para una publicación de combinación. Para obtener más información, vea Crear una suscripción de extracción.
En el suscriptor, ejecute sp_addmergepullsubscription_agent. Especifique @publisher, @publisher_db, @publication y 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
Cree una nueva suscripción de inserción a una publicación de combinación. Para obtener más información, vea Crear una suscripción de inserción.
En el suscriptor, ejecute sp_addmergepushsubscription_agent. Especifique @subscriber, @subscriber_db, @publication y 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.
[Top]
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, vea Crear una suscripción de extracción y Crear una suscripción de inserción.
Para definir una programación del agente de replicación al crear una suscripción de inserción a una publicación transaccional
Cree una instancia de la clase TransSubscription para la base de datos de suscripciones que está creando. Para obtener más información, vea Crear una suscripción de inserción.
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.
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
Cree una instancia de la clase TransPullSubscription para la base de datos de suscripciones que está creando. Para obtener más información, vea Crear una suscripción de extracción.
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.
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
Cree una instancia de la clase MergePullSubscription para la base de datos de suscripciones que está creando. Para obtener más información, vea Crear una suscripción de extracción.
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.
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
Cree una instancia de la clase MergeSubscription para la base de datos de suscripciones que está creando. Para obtener más información, vea Crear una suscripción de inserción.
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.
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 = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
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 = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
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
[Top]
Vea también
Conceptos
Prácticas recomendadas de seguridad de replicación
Sincronizar una suscripción de inserción