Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 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
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...>
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.
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
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.
Cliquez sur l'onglet Tous les abonnements .
Cliquez avec le bouton droit sur un abonnement, puis cliquez sur Afficher les détails.
Dans la fenêtre Abonnement < NomAbonnement>, cliquez sur Action, puis sur <Propriétés du travail> NomAgent.
Dans la page Planifications de la boîte de dialogue Propriétés du travail - <NomTravail>, cliquez sur Modifier.
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.
Si vous sélectionnez Récurrent, définissez une planification pour l'agent.
Cliquez sur OK.
Pour modifier une planification de la synchronisation d'un abonnement de type push dans Management Studio
Connectez-vous au serveur de distribution dans Management Studio, puis développez le nœud du serveur.
Développez le dossier Agent SQL Server puis développez le dossier Travaux .
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.
Dans la page Planifications de la boîte de dialogue Propriétés du travail - <NomTravail>, cliquez sur Modifier.
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.
Si vous sélectionnez Récurrent, définissez un calendrier pour l’agent.
Cliquez sur OK.
Pour modifier une planification de la synchronisation d'un abonnement de réception dans Management Studio
Connectez-vous à l’abonné dans Management Studio, puis développez le nœud du serveur.
Développez le dossier Agent SQL Server puis développez le dossier Travaux .
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.
Dans la page Planifications de la boîte de dialogue Propriétés du travail - <NomTravail>, cliquez sur Modifier.
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.
Si vous sélectionnez Récurrent, définissez un calendrier pour l’agent.
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
Créez un nouvel abonnement de type extraction pour une publication transactionnelle. Pour plus d’informations, consultez Créer un abonnement de type pull.
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
Créez un nouvel abonnement de type Push à une publication transactionnelle. Pour plus d’informations, consultez Créer un abonnement Push.
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
Créez un nouvel abonnement par extraction à une publication de fusion. Pour plus d’informations, consultez Créer un abonnement de type pull.
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
Créez un abonnement de type push à une publication de fusion. Pour plus d’informations, consultez Créer un abonnement Push.
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
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.
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.
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
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.
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.
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
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.
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.
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
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.
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.
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