Procédure : spécifier des planifications de synchronisation (programmation RMO)

La réplication utilise l'Agent SQL Server pour planifier des travaux pour les activités qui se produisent périodiquement, telles que la génération de captures instantanées et la synchronisation d'abonnements. Vous pouvez utiliser les objets RMO (Replication Management Objects) par programme pour spécifier des planifications pour les travaux des agents de réplication.

Notes

Lorsque vous créez un abonnement et spécifiez la valeur false pour CreateSyncAgentByDefault (comportement par défaut pour les abonnements par extraction), le travail de l'agent n'est pas créé et les propriétés de planification sont ignorées. Dans ce cas, la planification de la synchronisation doit être déterminée par l'application. Pour plus d'informations, consultez Procédure : créer un abonnement par extraction de données (pull) (programmation RMO) et Procédure : créer un abonnement par envoi de données (programmation RMO).

Pour définir une planification de l'Agent de réplication lorsque vous créez un abonnement par émission de données à une publication transactionnelle

  1. Créez une instance de la classe TransSubscription pour l'abonnement que vous créez. Pour plus d'informations, consultez Procédure : créer un abonnement par envoi de données (programmation RMO).

  2. Avant d'appeler Create, définissez un ou plusieurs des champs suivants de la propriété AgentSchedule :

    • FrequencyType – type de fréquence (tel que quotidien ou hebdomadaire) que vous utilisez pour planifier l'agent ;

    • FrequencyInterval – jour de la semaine où un agent s'exécute ;

    • FrequencyRelativeInterval – semaine d'un mois donné lorsque l'agent est planifié pour s'exécuter chaque mois ;

    • FrequencyRecurrenceFactor – nombre d'unités de type de fréquence entre deux synchronisations ;

    • FrequencySubDay – unité de fréquence lorsque l'agent s'exécute plusieurs fois par jour ;

    • FrequencySubDayInterval – nombre d'unités de fréquence entre deux exécutions lorsque l'agent s'exécute plusieurs fois par jour ;

    • ActiveStartTime – première heure d'un jour donné à laquelle l'exécution de l'agent commence ;

    • ActiveEndTime – heure la plus tardive d'un jour donné à laquelle l'exécution de l'agent commence ;

    • ActiveStartDate – premier jour d'application de la planification de l'agent ;

    • ActiveEndDate – dernier jour d'application de la planification de l'agent.

    Notes

    Si vous ne spécifiez pas l'une de ces propriétés, une valeur par défaut est définie.

  3. Appelez la méthode Create pour créer l'abonnement.

Pour définir une planification de l'Agent de réplication lorsque vous créez un abonnement par extraction à une publication transactionnelle

  1. Créez une instance de la classe TransPullSubscription pour l'abonnement que vous créez. Pour plus d'informations, consultez Procédure : créer un abonnement par extraction de données (pull) (programmation RMO).

  2. Avant d'appeler Create, définissez un ou plusieurs des champs suivants de la propriété AgentSchedule :

    • FrequencyType – type de fréquence (tel que quotidien ou hebdomadaire) que vous utilisez pour planifier l'agent ;

    • FrequencyInterval – jour de la semaine où un agent s'exécute ;

    • FrequencyRelativeInterval – semaine d'un mois donné où l'agent est planifié pour s'exécuter chaque mois ;

    • FrequencyRecurrenceFactor – nombre d'unités de type de fréquence entre deux synchronisations ;

    • FrequencySubDay – unité de fréquence lorsque l'agent s'exécute plusieurs fois par jour ;

    • FrequencySubDayInterval – nombre d'unités de fréquence entre deux exécutions lorsque l'agent s'exécute plusieurs fois par jour ;

    • ActiveStartTime – première heure d'un jour donné à laquelle l'exécution de l'agent commence ;

    • ActiveEndTime – heure la plus tardive d'un jour donné à laquelle l'exécution de l'agent commence ;

    • ActiveStartDate – premier jour d'application de la planification de l'agent ;

    • ActiveEndDate – dernier jour d'application de la planification de l'agent.

    Notes

    Si vous ne spécifiez pas l'une de ces propriétés, une valeur par défaut est définie.

  3. Appelez la méthode Create pour créer l'abonnement.

Pour définir une planification de l'Agent de réplication lorsque vous créez un abonnement par extraction à une publication de fusion

  1. Créez une instance de la classe MergePullSubscription pour l'abonnement que vous créez. Pour plus d'informations, consultez Procédure : créer un abonnement par extraction de données (pull) (programmation RMO).

  2. Avant d'appeler Create, définissez un ou plusieurs des champs suivants de la propriété AgentSchedule :

    • FrequencyType – type de fréquence (tel que quotidien ou hebdomadaire) que vous utilisez pour planifier l'agent ;

    • FrequencyInterval – jour de la semaine où un agent s'exécute ;

    • FrequencyRelativeInterval – semaine d'un mois donné où l'agent est planifié pour s'exécuter chaque mois ;

    • FrequencyRecurrenceFactor – nombre d'unités de type de fréquence entre deux synchronisations ;

    • FrequencySubDay – unité de fréquence lorsque l'agent s'exécute plusieurs fois par jour ;

    • FrequencySubDayInterval – nombre d'unités de fréquence entre deux exécutions lorsque l'agent s'exécute plusieurs fois par jour ;

    • ActiveStartTime – première heure d'un jour donné à laquelle l'exécution de l'agent commence ;

    • ActiveEndTime – heure la plus tardive d'un jour donné à laquelle l'exécution de l'agent commence ;

    • ActiveStartDate – premier jour d'application de la planification de l'agent ;

    • ActiveEndDate – dernier jour d'application de la planification de l'agent.

    Notes

    Si vous ne spécifiez pas l'une de ces propriétés, une valeur par défaut est définie.

  3. Appelez la méthode Create pour créer l'abonnement.

Pour définir une planification de l'Agent de réplication lorsque vous créez un abonnement par émission de données à une publication de fusion

  1. Créez une instance de la classe MergeSubscription pour l'abonnement que vous créez. Pour plus d'informations, consultez Procédure : créer un abonnement par envoi de données (programmation RMO).

  2. Avant d'appeler Create, définissez un ou plusieurs des champs suivants de la propriété AgentSchedule :

    • FrequencyType – type de fréquence (tel que quotidien ou hebdomadaire) que vous utilisez pour planifier l'agent ;

    • FrequencyInterval – jour de la semaine où un agent s'exécute ;

    • FrequencyRelativeInterval – semaine d'un mois donné où l'agent est planifié pour s'exécuter chaque mois ;

    • FrequencyRecurrenceFactor – nombre d'unités de type de fréquence entre deux synchronisations ;

    • FrequencySubDay – unité de fréquence lorsque l'agent s'exécute plusieurs fois par jour ;

    • FrequencySubDayInterval – nombre d'unités de fréquence entre deux exécutions lorsque l'agent s'exécute plusieurs fois par jour ;

    • ActiveStartTime – première heure d'un jour donné à laquelle l'exécution de l'agent commence ;

    • ActiveEndTime – heure la plus tardive d'un jour donné à laquelle l'exécution de l'agent commence ;

    • ActiveStartDate – premier jour d'application de la planification de l'agent ;

    • ActiveEndDate – dernier jour d'application de la planification de l'agent.

    Notes

    Si vous ne spécifiez pas l'une de ces propriétés, une valeur par défaut est définie.

  3. Appelez la méthode Create pour créer l'abonnement.

Exemple

Cet exemple crée un abonnement par émission de données à une publication de fusion et spécifie la planification sur laquelle l'abonnement est synchronisé.

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