sp_addpushsubscription_agent (Transact-SQL)

S’applique à :SQL ServerAzure SQL Managed Instance

Ajoute un nouveau travail de l'agent planifié utilisé pour synchroniser un abonnement envoyé avec une publication transactionnelle. Cette procédure stockée est exécutée sur le serveur de publication dans la base de données de publication.

Important

Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, y compris job_login et job_password, sont envoyées en texte brut au serveur de distribution. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'exécuter cette procédure stockée. Pour plus d’informations, consultez Configurer le moteur de base de données SQL Server pour le chiffrement des connexions.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_addpushsubscription_agent
    [ @publication = ] N'publication'
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @subscriber_db = ] N'subscriber_db' ]
    [ , [ @subscriber_security_mode = ] subscriber_security_mode ]
    [ , [ @subscriber_login = ] N'subscriber_login' ]
    [ , [ @subscriber_password = ] N'subscriber_password' ]
    [ , [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
    [ , [ @job_name = ] N'job_name' ]
    [ , [ @frequency_type = ] frequency_type ]
    [ , [ @frequency_interval = ] frequency_interval ]
    [ , [ @frequency_relative_interval = ] frequency_relative_interval ]
    [ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
    [ , [ @frequency_subday = ] frequency_subday ]
    [ , [ @frequency_subday_interval = ] frequency_subday_interval ]
    [ , [ @active_start_time_of_day = ] active_start_time_of_day ]
    [ , [ @active_end_time_of_day = ] active_end_time_of_day ]
    [ , [ @active_start_date = ] active_start_date ]
    [ , [ @active_end_date = ] active_end_date ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @subscriber_provider = ] N'subscriber_provider' ]
    [ , [ @subscriber_datasrc = ] N'subscriber_datasrc' ]
    [ , [ @subscriber_location = ] N'subscriber_location' ]
    [ , [ @subscriber_provider_string = ] N'subscriber_provider_string' ]
    [ , [ @subscriber_catalog = ] N'subscriber_catalog' ]
[ ; ]

Arguments

[ @publication = ] N’publication'

Nom de la publication. @publication est sysname, sans valeur par défaut.

[ @subscriber = ] N’subscriber'

Nom de l’instance de l’Abonné ou nom de l’écouteur du groupe de disponibilité si la base de données de l’abonné fait partie d’un groupe de disponibilité. @subscriber est sysname, avec la valeur par défaut NULL.

Remarque

Le nom du serveur peut être spécifié en tant que <Hostname>,<PortNumber>. Spécifiez le numéro de port de votre connexion lorsque SQL Server est déployé sur Linux ou Windows avec un port personnalisé et que le service de navigateur est désactivé. L’utilisation de numéros de port personnalisés pour le serveur de distribution distant s’applique à SQL Server 2019 (15.x) et versions ultérieures.

[ @subscriber_db = ] N’subscriber_db'

Nom de la base de données d’abonnement. @subscriber_db est sysname, avec la valeur par défaut NULL.

Pour un abonné non-SQL Server, spécifiez une valeur de (destination par défaut) pour subscriber_db.

[ @subscriber_security_mode = ] subscriber_security_mode

Remarque

L’ID Microsoft Entra était précédemment appelé Azure Active Directory (Azure AD).

Mode de sécurité à utiliser lors de la connexion à un Abonné lors de la synchronisation. @subscriber_security_mode est smallint, avec une valeur par défaut de 1. Les valeurs suivantes définissent le mode de sécurité :

  • 0 spécifie l’authentification SQL Server.
  • 1spécifie Authentification Windows.
  • 2 spécifie l’authentification par mot de passe Microsoft Entra à partir de SQL Server 2022 (16.x) CU 6.
  • 3 spécifie l’authentification intégrée Microsoft Entra à partir de SQL Server 2022 (16.x) CU 6.
  • 4 spécifie l’authentification par jeton Microsoft Entra à partir de SQL Server 2022 (16.x) CU 6.

Important

Pour les abonnements mis à jour en file d’attente, utilisez l’authentification SQL Server pour les connexions aux Abonnés et spécifiez un compte différent pour la connexion à chaque Abonné. Pour tous les autres abonnements, utilisez l'authentification Windows.

[ @subscriber_login = ] N’subscriber_login'

Connexion de l’Abonné à utiliser lors de la connexion à un Abonné lors de la synchronisation. @subscriber_login est sysname, avec la valeur par défaut NULL.

[ @subscriber_password = ] N’subscriber_password'

Mot de passe de l’Abonné. subscriber_password est obligatoire si subscriber_security_mode a la valeur 0. @subscriber_password est sysname, avec la valeur par défaut NULL. Si un mot de passe d’abonné est utilisé, il est automatiquement chiffré.

Important

N'utilisez pas de mot de passe vide. Utilisez un mot de passe fort. Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification au moment de l'exécution. Si vous devez enregistrer les informations d'identification dans un fichier de script, vous devez sécuriser le fichier pour empêcher un accès non autorisé.

[ @job_login = ] N’job_login'

Connexion du compte sous lequel l’agent s’exécute. Sur Azure SQL Managed Instance, utilisez un compte SQL Server. @job_login est nvarchar(257), avec la valeur par défaut NULL. Ce compte Windows est toujours utilisé pour les connexions de l'Agent au serveur de distribution et pour les connexions à l'abonné utilisant l'authentification intégrée de Windows.

[ @job_password = ] N’job_password'

Mot de passe du compte sous lequel l’agent s’exécute. @job_password est sysname, sans valeur par défaut.

Important

Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification au moment de l'exécution. Si vous devez enregistrer les informations d'identification dans un fichier de script, vous devez sécuriser le fichier pour empêcher un accès non autorisé.

[ @job_name = ] N’job_name'

Nom d’un travail d’agent existant. @job_name est sysname, avec la valeur par défaut NULL. Ce paramètre est spécifié uniquement lorsque l’abonnement est synchronisé à l’aide d’un travail existant, au lieu d’un travail nouvellement créé (valeur par défaut). Si vous n’êtes pas membre du rôle serveur fixe sysadmin , vous devez spécifier @job_login et @job_password lorsque vous spécifiez @job_name.

[ @frequency_type = ] frequency_type

Fréquence à laquelle planifier le Agent de distribution. @frequency_type est int et peut être l’une des valeurs suivantes.

Valeur Description
1 Ponctuelle
2 À la demande
4 Quotidiennement
8 Hebdomadaire
16 Mensuelle
32 Mensuelle relative
64 (valeur par défaut) Autostart
128 Récurrent

Remarque

La spécification d’une valeur des causes de l’exécution du 64 Agent de distribution en mode continu. Cela correspond à la définition du -Continuous paramètre de l’agent. Pour plus d'informations, consultez Replication Distribution Agent.

[ @frequency_interval = ] frequency_interval

Valeur à appliquer à la fréquence définie par @frequency_type. @frequency_interval est int, avec la valeur par défaut 1.

[ @frequency_relative_interval = ] frequency_relative_interval

Date du Agent de distribution. Ce paramètre est utilisé lorsque frequency_type est défini 32 sur (relatif mensuel). @frequency_relative_interval est int et peut être l’une des valeurs suivantes.

Valeur Description
1 (valeur par défaut) Premier
2 Second
4 Third
8 Quatrième
16 Dernier

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Facteur de périodicité utilisé par @frequency_type. @frequency_recurrence_factor est int, avec la valeur par défaut 0.

[ @frequency_subday = ] frequency_subday

Spécifie la fréquence à replanifier pendant la période définie. @frequency_subday est int et peut être l’une des valeurs suivantes.

Valeur Description
1 Une fois
2 Second
4 (valeur par défaut) Minute
8 Heure

[ @frequency_subday_interval = ] frequency_subday_interval

Intervalle de @frequency_subday. @frequency_subday_interval est int, avec la valeur par défaut 5.

[ @active_start_time_of_day = ] active_start_time_of_day

Heure du jour où la Agent de distribution est planifiée pour la première fois, mise en forme comme HHmmss. @active_start_time_of_day est int, avec la valeur par défaut 0.

[ @active_end_time_of_day = ] active_end_time_of_day

Heure du jour où le Agent de distribution cesse d’être planifié, mis en forme comme HHmmss. @active_end_time_of_day est int, avec la valeur par défaut 235959.

[ @active_start_date = ] active_start_date

Date à laquelle le Agent de distribution est planifié pour la première fois, mis en forme en tant que yyyyMMdd. @active_start_date est int, avec une valeur par défaut de 0.

[ @active_end_date = ] active_end_date

Date à laquelle la Agent de distribution cesse d’être planifiée, mise en forme comme yyyyMMddsuit : @active_end_date est int, avec une valeur par défaut de 99991231.

[ @dts_package_name = ] N’dts_package_name'

Spécifie le nom du package DTS (Data Transformation Services). @dts_package_name est sysname, avec la valeur par défaut NULL. Par exemple, pour spécifier le nom de package DTSPub_Package, le paramètre est le suivant : @dts_package_name = N'DTSPub_Package'.

[ @dts_package_password = ] N’dts_package_password'

Spécifie le mot de passe requis pour exécuter le package. @dts_package_password est sysname, avec une valeur par défaut , ce qui signifie que le package n’a pas de mot de NULLpasse.

Remarque

Vous devez spécifier un mot de passe si @dts_package_name est spécifié.

[ @dts_package_location = ] N’dts_package_location'

Spécifie l'emplacement du package. @dts_package_location est nvarchar(12), avec la valeur par défaut distributor. L’emplacement du package peut être distributor ou subscriber.

[ @enabled_for_syncmgr = ] N’enabled_for_syncmgr'

Spécifie si l’abonnement peut être synchronisé via Microsoft Synchronization Manager. @enabled_for_syncmgr est nvarchar(5), avec la valeur par défaut false.

  • Si false, l’abonnement n’est pas inscrit auprès du Gestionnaire de synchronisation.
  • Si true, l’abonnement est inscrit auprès du Gestionnaire de synchronisation et peut être synchronisé sans démarrer SQL Server Management Studio.

[ @distribution_job_name = ] N’distribution_job_name'

Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.

[ @publisher = ] N’publisher'

Nom du serveur de publication. @publisher est sysname, avec la valeur par défaut NULL.

[ @subscriber_provider = ] N’subscriber_provider'

Identificateur programmatique unique (PROGID) avec lequel le fournisseur OLE DB pour la source de données non-SQL Server est inscrit. @subscriber_provider est sysname, avec la valeur par défaut NULL. @subscriber_provider doit être unique pour le fournisseur OLE DB installé sur le serveur de distribution. @subscriber_provider est uniquement pris en charge pour les abonnés non-SQL Server.

[ @subscriber_datasrc = ] N’subscriber_datasrc'

Nom de la source de données tel qu’il est compris par le fournisseur OLE DB.@subscriber_datasrc est nvarchar(4000), avec la valeur par défaut NULL. @subscriber_datasrc est passé en tant que DBPROP_INIT_DATASOURCE propriété pour initialiser le fournisseur OLE DB. @subscriber_datasrc est uniquement pris en charge pour les abonnés non-SQL Server.

[ @subscriber_location = ] N’subscriber_location'

Emplacement de la base de données tel qu’il est compris par le fournisseur OLE DB. @subscriber_location est nvarchar(4000), avec la valeur par défaut NULL. @subscriber_location est passé en tant que DBPROP_INIT_LOCATION propriété pour initialiser le fournisseur OLE DB. @subscriber_location est uniquement pris en charge pour les abonnés non-SQL Server.

[ @subscriber_provider_string = ] N’subscriber_provider_string'

Chaîne de connexion spécifique au fournisseur OLE DB qui identifie la source de données. @subscriber_provider_string est nvarchar(4000), avec la valeur par défaut NULL. @subscriber_provider_string est passé à IDataInitialize ou défini comme DBPROP_INIT_PROVIDERSTRING propriété pour initialiser le fournisseur OLE DB. @subscriber_provider_string est uniquement pris en charge pour les abonnés non-SQL Server.

[ @subscriber_catalog = ] N’subscriber_catalog'

Catalogue à utiliser lors de la connexion au fournisseur OLE DB. @subscriber_catalog est sysname, avec la valeur par défaut NULL. @subscriber_catalog est passé en tant que DBPROP_INIT_CATALOG propriété pour initialiser le fournisseur OLE DB. @subscriber_catalog est uniquement pris en charge pour les abonnés non-SQL Server.

Valeurs des codes de retour

0 (réussite) ou 1 (échec).

Notes

sp_addpushsubscription_agentest utilisé dans instantané réplication et la réplication transactionnelle.

Exemples

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

Autorisations

Seuls les membres du rôle serveur fixe sysadmin ou db_owner rôle de base de données fixe peuvent s’exécuter sp_addpushsubscription_agent.