Spécifier des planifications de synchronisation

S’applique à : SQL Server Azure 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 transactionnelle et d'instantané) 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.

Dans cette rubrique

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 extraits <Serveur_Publication>-<Base_de_données_Publication>-<Publication>-<Abonné>-<Base_de_données_Abonnement>-<entier>>
Agent de fusion pour abonnements par envoi de données (push) <ServeurPublication>-<BasededonnéesPublication>-<Publication>-<Abonné>-<entier>
Agent de distribution pour abonnements par envoi de données (push) <ServeurPublication>-<BasededonnéesPublication>-<Publication>-<Abonné>-<entier> 1
Agent de distribution pour abonnements par extraction de données (pull) <ServeurPublication>-<BasededonnéesPublication>-<Publication>-<Abonné>-<BasededonnéesPublication>-<GUID> 2
Agent de distribution pour les abonnements par envoi de données aux Abonnés non SQL Server <ServeurPublication>-<BasededonnéesPublication>-<Publication>-<Abonné>-<entier>

1 Pour les abonnements par émission de données aux publications Oracle, il s’agit de <serveur_publication>-<serveur_publication> au lieu de <serveur_publication>-<serveur_publication>.

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 synchronisation d'un abonnement envoyé dans le moniteur de réplication

  1. Développez un groupe Serveur 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 spécifier une exécution planifiée de l'Agent, sélectionnez Périodique.

    • Pour définir une exécution à la demande de l'Agent, sélectionnez Une fois.

  7. Si vous sélectionnez Périodique, spécifiez une planification de l'Agent.

  8. Cliquez sur OK.

Pour modifier une planification de synchronisation d'un abonnement envoyé 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 du travail de l'Agent de distribution ou 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 une exécution planifiée de l'Agent, sélectionnez Périodique.

    • Pour définir une exécution à la demande de l'Agent, sélectionnez Une fois.

  6. Si vous sélectionnez Périodique, spécifiez une planification de l'Agent.

  7. Cliquez sur OK.

Pour modifier une planification de synchronisation d'un abonnement extrait 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 du travail de l'Agent de distribution ou 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 une exécution planifiée de l'Agent, sélectionnez Périodique.

    • Pour définir une exécution à la demande de l'Agent, sélectionnez Une fois.

  6. Si vous sélectionnez Périodique, spécifiez une planification de 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 de données).

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é lorsque l'agent est planifié pour s'exécuter mensuellement.

  • @frequency_recurrence_factor - le nombre d'unités de type de fréquence qui séparent chaque synchronisation.

  • @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ù la planification de l'agent sera appliquée.

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

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

  1. Créez un abonnement par extraction à une publication transactionnelle. Pour plus d’informations, consultez Créer un abonnement par extraction de données (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 synchronisation pour un abonnement par émission de données à une publication transactionnelle

  1. Créez un abonnement par émission de données à une publication transactionnelle. Pour plus d’informations, consultez Créer un abonnement par émission (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 abonnement par extraction à une publication de fusion Pour plus d’informations, consultez Créer un abonnement par extraction de données (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 synchronisation pour un abonnement par émission de données à une publication de fusion

  1. Créez un abonnement par émission de données à une publication de fusion. Pour plus d’informations, consultez Créer un abonnement par émission (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 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 Créer un abonnement par émission (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 – 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.

    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 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 Créer un abonnement par extraction de données (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 – 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.

    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 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 Créer un abonnement par extraction de données (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 – 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.

    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 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 Créer un abonnement par émission (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 – 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.

    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 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 = "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