Spécifier des planifications de synchronisation

S’applique à :SQL ServerAzure SQL Managed Instance

Cette rubrique décrit comment spécifier des planifications de synchronisation dans SQL Server à l’aide de SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO). Lorsque vous créez un abonnement, vous pouvez définir une planification de synchronisation qui contrôle à quel moment l'agent de réplication de l'abonnement s'exécute. Si aucun paramètre de planification n'est spécifié, l'abonnement utilise la planification par défaut.

Les abonnements sont synchronisés par l'Agent de distribution (pour la réplication d'instantané et transactionnelle) ou l'Agent de fusion (pour la réplication de fusion). Les agents peuvent s'exécuter en continu, à la demande ou selon une planification.

Utilisation de SQL Server Management Studio

Spécifiez des planifications de synchronisation dans la page Planification de synchronisation dans l'Assistant Nouvel abonnement. Pour plus d'informations sur l'accès à cet Assistant, consultez Create a Push Subscription et Create a Pull Subscription.

Modifiez les planifications de synchronisation dans la boîte de dialogue Propriétés de la planification du travail, accessible à partir du dossier Travaux de SQL Server Management Studio et de la fenêtre des détails de l’agent dans le Moniteur de réplication. Pour plus d’informations sur le démarrage du Moniteur de réplication, consultez Démarrer le Moniteur de réplication.

Si vous définissez des planifications à partir du dossier Travaux , utilisez le tableau suivant pour déterminer le nom du travail de l'Agent.

Agent Nom du travail
Agent de fusion pour les abonnements par extraction <Publication>-<BaseDeDonnéesDePublication>-<Publication>-<Abonné>-<BaseDeDonnéesDesAbonnements>-<entier>
Agent de fusion pour les abonnements push <Éditeur>-<Base de données de publication>-<Publication>-<Abonné>-<entier>
Agent de distribution pour les abonnements push <Éditeur>-<BaseDeDonnéesDePublication>-<Publication>-<Abonné>-<entier>1
Agent de distribution pour abonnement de type pull <Éditeur>-<Base de données de publication>-<Publication>-<Abonné>-<Base de données d’abonnement>-<GUID>2
Agent de distribution pour les abonnements de type push aux Abonnés non SQL Server <Éditeur>-<BaseDeDonnéesPublication>-<Publication>-<Abonné>-<entier>

1 Pour les abonnements de type push aux publications Oracle, il s’agit de <Publisher>-<Publisher> plutôt que de <Publisher>-<PublicationDatabase>

2 Pour les abonnements par extraction aux publications Oracle, il s’agit de <serveur_publication>-<base_de_données_distribution> au lieu de <serveur_publication>-<base_de_données_publication>.

Pour spécifier des planifications de synchronisation

  1. Dans la page Planification de synchronisation de l’Assistant Nouvel abonnement, sélectionnez l’une des valeurs suivantes dans la liste déroulante Planification de l’agent pour chaque abonnement que vous créez :

    • Exécuter en continu

    • Exécuter à la demande uniquement

    • <Définir la planification...>

  2. Si vous sélectionnez l’option <Définir la planification...>, spécifiez une planification dans la boîte de dialogue Propriétés de la planification du travail, puis cliquez sur OK.

  3. Suivez les instructions de l’Assistant.

Pour modifier une planification de la synchronisation d'un abonnement de type push dans le Moniteur de réplication

  1. Développez un groupe de serveurs de publication dans le volet gauche du Moniteur de réplication, développez un serveur de publication, puis cliquez sur une publication.

  2. Cliquez sur l'onglet Tous les abonnements .

  3. Cliquez avec le bouton droit sur un abonnement, puis cliquez sur Afficher les détails.

  4. Dans la fenêtre Abonnement < NomAbonnement>, cliquez sur Action, puis sur <Propriétés du travail> NomAgent.

  5. Dans la page Planifications de la boîte de dialogue Propriétés du travail - <NomTravail>, cliquez sur Modifier.

  6. Dans la boîte de dialogue Propriétés de la planification du travail , sélectionnez une valeur dans la liste déroulante Type de planification :

    • Pour spécifier que l'agent doit s'exécuter en continu, sélectionnez Lancer automatiquement au démarrage de l'Agent SQL Server.

    • Pour indiquer que l’agent doit s’exécuter selon une planification, sélectionnez Récurrent.

    • Pour indiquer que l’agent doit s’exécuter à la demande, sélectionnez Une seule fois.

  7. Si vous sélectionnez Récurrent, définissez une planification pour l'agent.

  8. Cliquez sur OK.

Pour modifier une planification de la synchronisation d'un abonnement de type push dans Management Studio

  1. Connectez-vous au serveur de distribution dans Management Studio, puis développez le nœud du serveur.

  2. Développez le dossier Agent SQL Server puis développez le dossier Travaux .

  3. Cliquez avec le bouton droit sur le travail de l’Agent de distribution ou l’Agent de fusion associé à l’abonnement, puis cliquez sur Propriétés.

  4. Dans la page Planifications de la boîte de dialogue Propriétés du travail - <NomTravail>, cliquez sur Modifier.

  5. Dans la boîte de dialogue Propriétés de la planification du travail , sélectionnez une valeur dans la liste déroulante Type de planification :

    • Pour spécifier que l'agent doit s'exécuter en continu, sélectionnez Lancer automatiquement au démarrage de l'Agent SQL Server.

    • Pour spécifier que l'agent doit s'exécuter selon une planification, sélectionnez Récurrent.

    • Pour indiquer que l’agent doit s’exécuter à la demande, sélectionnez Une seule fois.

  6. Si vous sélectionnez Récurrent, définissez un calendrier pour l’agent.

  7. Cliquez sur OK.

Pour modifier une planification de la synchronisation d'un abonnement de réception dans Management Studio

  1. Connectez-vous à l’abonné dans Management Studio, puis développez le nœud du serveur.

  2. Développez le dossier Agent SQL Server puis développez le dossier Travaux .

  3. Cliquez avec le bouton droit sur le travail de l'Agent de distribution ou de l'Agent de fusion associé à l'abonnement, puis cliquez sur Propriétés.

  4. Dans la page Planifications de la boîte de dialogue Propriétés du travail - <NomTravail>, cliquez sur Modifier.

  5. Dans la boîte de dialogue Propriétés de la planification du travail , sélectionnez une valeur dans la liste déroulante Type de planification :

    • Pour spécifier que l'agent doit s'exécuter en continu, sélectionnez Lancer automatiquement au démarrage de l'Agent SQL Server.

    • Pour spécifier que l’agent s’exécute selon une planification, sélectionnez Récurrent.

    • Pour indiquer que l’agent doit s’exécuter à la demande, sélectionnez Une seule fois.

  6. Si vous sélectionnez Récurrent, définissez un calendrier pour l’agent.

  7. Cliquez sur OK.

Utilisation de Transact-SQL

Vous pouvez définir des planifications de synchronisation par programme en utilisant des procédures stockées de réplication. Les procédures stockées que vous utilisez dépendent du type de réplication et du type d’abonnement (par extraction ou par émission).

Une planification est définie par les paramètres de planification suivants dont le comportement est hérité de sp_add_schedule (Transact-SQL) :

  • @frequency_type - le type de fréquence utilisé lors de la planification de l'agent.

  • @frequency_interval - le jour de la semaine où l'agent est exécuté.

  • @frequency_relative_interval - la semaine d’un mois donné au cours de laquelle l’agent est configuré pour s’exécuter chaque mois.

  • @frequency_recurrence_factor - le nombre d’unités de fréquence qui se produisent entre deux synchronisations.

  • @frequency_subday - l'unité de fréquence lorsque l'agent s'exécute plus d'une fois par jour.

  • @frequency_subday_interval - le nombre d'unités de fréquence qui séparent chaque exécution lorsque l'agent s'exécute plus d'une fois par jour.

  • @active_start_time_of_day - la première heure d'un jour donné à laquelle l'exécution d'un agent débutera.

  • @active_end_time_of_day - la dernière heure d'un jour donné à laquelle l'exécution d'un agent débutera.

  • @active_start_date - le premier jour où le planning de l'agent prendra effet.

  • @active_end_date - le dernier jour où la planification de l'agent sera appliquée.

Pour définir la planification de la synchronisation d’un abonnement par extraction à une publication transactionnelle

  1. Créez un nouvel abonnement de type extraction pour une publication transactionnelle. Pour plus d’informations, consultez Créer un abonnement de type pull.

  2. Sur l’abonné, exécutez sp_addpullsubscription_agent (Transact-SQL). Spécifiez @publisher, @publisher_db, @publication et les informations d’identification Windows sous lesquelles l’agent de distribution s’exécute sur l’abonné pour @job_name et @password. Spécifiez les paramètres de synchronisation (détaillés plus haut) qui définissent la planification du travail de l'Agent de distribution qui synchronise l'abonnement.

Pour définir la planification de la synchronisation d’un abonnement de type push à une publication transactionnelle

  1. Créez un nouvel abonnement de type Push à une publication transactionnelle. Pour plus d’informations, consultez Créer un abonnement Push.

  2. Sur l’abonné, exécutez sp_addpushsubscription_agent (Transact-SQL). Spécifiez @subscriber, @subscriber_db, @publicationet les informations d'identification Windows sous lesquelles l'Agent de distribution s'exécute sur l'Abonné pour @job_name et @job_password. Spécifiez les paramètres de synchronisation (détaillés plus haut) qui définissent la planification du travail de l'Agent de distribution qui synchronise l'abonnement.

Pour définir la planification de synchronisation pour un abonnement par extraction à une publication de fusion

  1. Créez un nouvel abonnement par extraction à une publication de fusion. Pour plus d’informations, consultez Créer un abonnement de type pull.

  2. Sur l'Abonné, exécutez sp_addmergepullsubscription_agent. Spécifiez @publisher, @publisher_db, @publicationet les informations d'identification Windows sous lesquelles l'Agent de fusion s'exécute sur l'Abonné pour @job_name et @password. Spécifiez les paramètres de synchronisation (détaillés plus haut) qui définissent la planification du travail de l'Agent de fusion qui synchronise l'abonnement.

Pour définir la planification de la synchronisation d’un abonnement de type push à une publication de fusion

  1. Créez un abonnement de type push à une publication de fusion. Pour plus d’informations, consultez Créer un abonnement Push.

  2. Sur l'Abonné, exécutez sp_addmergepushsubscription_agent. Spécifiez @subscriber, @subscriber_db, @publicationet les informations d'identification Windows sous lesquelles l'Agent de fusion s'exécute sur l'Abonné pour @job_name et @password. Spécifiez les paramètres de synchronisation (détaillés plus haut) qui définissent la planification du travail de l'Agent de fusion qui synchronise l'abonnement.

Utilisation d'objets RMO (Replication Management Objects)

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 d'instantanés et la synchronisation d'abonnements. Vous pouvez utiliser les Replication Management Objects par programme pour spécifier des planifications pour les travaux des agents de réplication.

Remarque

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 Create a Pull Subscription et Create a Push Subscription.

Pour définir une planification de l’agent de réplication lorsque vous créez un abonnement de type push à une publication transactionnelle

  1. Créez une instance de la classe TransSubscription pour l'abonnement que vous créez. Pour plus d’informations, consultez Créer un abonnement Push.

  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 - la semaine d’un mois donné pendant laquelle l’agent est configuré 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 - heure la plus tôt, pour un jour donné, où une exécution de l'agent démarre.

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

    • ActiveStartDate - premier jour de prise d'effet du planning de l'agent.

    • ActiveEndDate - dernier jour de validité du programme de l'agent.

    Remarque

    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 la planification d'un agent de réplication lors de la création d'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 Créer un abonnement de type pull.

  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 - la semaine d’un mois donné pendant laquelle l’agent est programmé 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 - heure la plus matinale d’un jour donné à laquelle une exécution de l’agent démarre.

    • ActiveEndTime - heure limite, pour un jour donné, à laquelle une exécution de l'agent peut démarrer.

    • ActiveStartDate - premier jour d’entrée en vigueur du planning de l’agent.

    • ActiveEndDate - dernier jour où le planning de l’agent est en vigueur.

    Remarque

    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 lors de la création d’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 Créer un abonnement de type pull.

  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 - la semaine d’un mois donné pendant laquelle l’agent est programmé 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 - heure la plus matinale d’un jour donné à laquelle une exécution de l’agent démarre.

    • ActiveEndTime - heure limite, pour un jour donné, à laquelle une exécution de l'agent peut démarrer.

    • ActiveStartDate - premier jour d’entrée en vigueur du planning de l’agent.

    • ActiveEndDate - dernier jour où le planning de l’agent est en vigueur.

    Remarque

    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 la planification de l'Agent de fusion lorsque vous créez un abonnement de type push à 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 Créer un abonnement Push.

  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 - la semaine d’un mois donné pendant laquelle l’agent est programmé 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 - heure la plus matinale d’un jour donné à laquelle une exécution de l’agent démarre.

    • ActiveEndTime - heure limite, pour un jour donné, à laquelle une exécution de l'agent peut démarrer.

    • ActiveStartDate - premier jour d’entrée en vigueur du planning de l’agent.

    • ActiveEndDate - dernier jour où le planning de l’agent est en vigueur.

    Remarque

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

Cet exemple crée un abonnement de type Push à une publication de fusion et spécifie la planification selon laquelle l'abonnement est synchronisé.

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