Partager via


sp_addsubscription (Transact-SQL)

Ajoute un abonnement à une publication et définit l'état de l'abonné. Cette procédure stockée est exécutée au niveau du serveur de publication dans la base de données de publication.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

sp_addsubscription [ @publication = ] 'publication'
    [ , [ @article = ] 'article']
    [ , [ @subscriber = ] 'subscriber' ]
    [ , [ @destination_db = ] 'destination_db' ]
        [ , [ @sync_type = ] 'sync_type' ]
    [ , [ @status = ] 'status'
        [ , [ @subscription_type = ] 'subscription_type' ]
    [ , [ @update_mode = ] 'update_mode' ]
    [ , [ @loopback_detection = ] 'loopback_detection' ]
    [ , [ @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 ]
    [ , [ @optional_command_line = ] 'optional_command_line' ]
    [ , [ @reserved = ] 'reserved' ]
    [ , [ @enabled_for_syncmgr= ] 'enabled_for_syncmgr' ]
    [ , [ @offloadagent= ] remote_agent_activation]
    [ , [ @offloadserver= ] 'remote_agent_server_name' ]
    [ , [ @dts_package_name= ] 'dts_package_name' ]
    [ , [ @dts_package_password= ] 'dts_package_password' ]
    [ , [ @dts_package_location= ] 'dts_package_location' ]
    [ , [ @distribution_job_name= ] 'distribution_job_name' ]
    [ , [ @publisher = ] 'publisher' ]
    [ , [ @backupdevicetype = ] 'backupdevicetype' ]
    [ , [ @backupdevicename = ] 'backupdevicename' ]
    [ , [ @mediapassword = ] 'mediapassword' ]
    [ , [ @password = ] 'password' ]
    [ , [ @fileidhint = ] fileidhint ]
    [ , [ @unload = ] unload ]
    [ , [ @subscriptionlsn = ] subscriptionlsn ]
    [ , [ @subscriptionstreams = ] subscriptionstreams ]
    [ , [ @subscriber_type = ] subscriber_type ]

Arguments

  • [ @publication=\] 'publication'
    Nom de la publication. publication est de type sysname et n'a pas de valeur par défaut.

  • [ @article=\] 'article'
    Nom de l'article auquel la publication est abonnée. article est de type sysname, avec all comme valeur par défaut. Si la valeur définie est all (tous), l'abonnement s'ajoute à tous les articles de la publication. Seules les valeurs all ou NULL sont prises en charge par les serveurs de publication Oracle.

  • [ @subscriber=\] 'subscriber'
    Nom de l'abonné. subscriber est de type sysname, avec NULL comme valeur par défaut.

  • [ @destination\_db=\] 'destination_db'
    Nom de la base de données de destination dans laquelle les données répliquées seront placées. destination_db est de type sysname, avec NULL comme valeur par défaut. Lorsque la valeur définie est NULL, l'argument destination_db a pour valeur le nom de la base de données de publication. Pour les serveurs de publication Oracle, le paramètre destination_db doit être spécifié. Pour un Abonné non-SQL Server, spécifiez une valeur (destination par défaut) pour destination_db.

  • [ @sync\_type=\] 'sync_type'
    Type de synchronisation d'abonnement. sync_type est de type nvarchar(255) et peut prendre l'une des valeurs suivantes :

    Valeur

    Description

    none

    L'abonnement dispose déjà du schéma et des données initiales destinées aux tables publiées.

    [!REMARQUE]

    Cette option est déconseillée. Utilisez plutôt replication support only.

    automatic (valeur par défaut)

    Le schéma et les données initiales destinées aux tables publiées sont transférés en premier lieu vers l'abonné.

    replication support only

    Fournit une génération automatique au niveau de l'Abonné des procédures stockées personnalisées de l'article et des déclencheurs qui prennent en charge les abonnements de mise à jour, le cas échéant. Considère que l'Abonné dispose déjà du schéma et des données initiales pour les tables publiées. Lors de la configuration d'une topologie de réplication transactionnelle d'égal à égal, veillez à ce que les données de tous les nœuds de la topologie soient identiques. Pour plus d'informations, consultez Réplication transactionnelle d'égal à égal.

    Non pris en charge pour les abonnements à des publications non-SQL Server.

    initialize with backup

    Le schéma et les données initiales destinées aux tables publiées proviennent d'une sauvegarde de la base de données de publication. L'abonné est censé avoir accès à une sauvegarde de la base de données de publication. L'emplacement de la sauvegarde et le type de support de celle-ci sont spécifiés par les paramètres backupdevicename et backupdevicetype. Lors de l'utilisation de cette option, il n'est pas nécessaire de suspendre la topologie de réplication transactionnelle d'égal à égal pendant la configuration.

    Non pris en charge pour les abonnements à des publications non-SQL Server.

    initialize from lsn

    Utilisé lorsque vous ajoutez un nœud à une topologie de réplication transactionnelle d'égal à égal. Utilisé avec @subscriptionlsn pour vérifier que toutes les transactions appropriées sont répliquées sur le nouveau nœud. Considère que l'Abonné dispose déjà du schéma et des données initiales pour les tables publiées. Pour plus d'informations, consultez Réplication transactionnelle d'égal à égal.

    [!REMARQUE]

    Les données et les tables système sont toujours transférées.

  • [ @status=\] 'status'
    État de l'abonnement. status est de type sysname, avec NULL comme valeur par défaut. Lorsque ce paramètre n'est pas défini explicitement, la réplication lui donne automatiquement l'une des valeurs suivantes.

    Valeur

    Description

    active

    L'abonnement est initialisé et prêt à accepter des modifications. Cette option est définie lorsque sync_type a la valeur none, initialize with backup ou replication support only.

    subscribed

    L'abonnement doit être initialisé. Cette option est définie lorsque sync_type a la valeur automatic.

  • [ @subscription\_type=\] 'subscription_type'
    Type d'abonnement. subscription_type est de type nvarchar(4), avec push comme valeur par défaut. Peut avoir la valeur push ou pull (émission de données ou extraction). Les Agents de distribution des abonnements par émission de données (push) résident sur le serveur de distribution, tandis que ceux des abonnements par extraction (pull) se trouvent au niveau de l'Abonné. L'argument subscription_type peut avoir la valeur pull afin de créer un abonnement par extraction nommé connu du serveur de publication. Pour plus d'informations, consultez S'abonner à des publications.

    [!REMARQUE]

    Les abonnements anonymes ne doivent pas utiliser cette procédure stockée.

  • [ @update\_mode=\] 'update_mode'
    Type de mise à jour. L'argument update_mode est de type nvarchar(30) et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    read only (valeur par défaut)

    L'abonnement est en lecture seule. Les modifications effectuées chez l'abonné ne sont pas renvoyées au serveur de publication.

    sync tran

    Active la prise en charge des abonnements de mise à jour immédiate. Non pris en charge par les serveurs de publication Oracle.

    queued tran

    Active l'abonnement pour la mise à jour en attente. Les modifications de données peuvent être effectuées chez l'abonné, stockées dans une file d'attente, puis propagées vers le serveur de publication. Non pris en charge par les serveurs de publication Oracle.

    failover

    Active l'abonnement pour la mise à jour immédiate avec mise à jour en attente sous forme de basculement. Les modifications de données peuvent être effectuées chez l'abonné, puis propagées immédiatement vers le serveur de publication. Si le serveur de publication et l'abonné ne sont pas connectés, il est possible de changer de mode de mise à jour afin que les modifications de données effectuées chez l'abonné soient stockées dans une file d'attente jusqu'à ce que l'abonné et le serveur de publication soient reconnectés. Non pris en charge par les serveurs de publication Oracle.

    queued failover

    Active l'abonnement en tant qu'abonnement de mise à jour en attente, avec possibilité de passer au mode de mise à jour immédiate. Les modifications de données peuvent être effectuées chez l'abonné et stockées dans une file d'attente, jusqu'à ce qu'une connexion soit établie entre l'abonné et le serveur de publication. Lorsqu'une connexion permanente est établie, il est possible de passer au mode de mise à jour immédiate. Non pris en charge par les serveurs de publication Oracle.

    Notez que les valeurs sync tran et queued tran ne sont pas autorisées si la publication faisant l'objet d'un abonnement autorise les services DTS.

  • [ @loopback\_detection=\] 'loopback_detection'
    Indique si l'Agent de distribution envoie des transactions à un abonné qui en est l'auteur. loopback_detection est de type nvarchar(5) et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    true

    L'Agent de distribution n'envoie pas à l'abonné ses propres transactions. Utilisé avec la réplication transactionnelle bidirectionnelle. Pour plus d'informations, consultez Réplication transactionnelle bidirectionnelle.

    false

    L'Agent de distribution renvoie à l'abonné ses propres transactions.

    NULL (valeur par défaut)

    Prend automatiquement la valeur true pour un Abonné SQL Server et false pour un Abonné non-SQL Server.

  • [ @frequency\_type=\] frequency_type
    Fréquence de planification de la tâche de distribution. frequency_type est de type int et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    1

    Une fois

    2

    À la demande

    4

    Quotidienne

    8

    Hebdomadaire

    16

    Mensuelle

    32

    Mensuelle relative

    64 (valeur par défaut)

    Démarrage automatique

    128

    Périodique

  • [ @frequency\_interval=\] frequency_interval
    Valeur appliquée à la fréquence définie par frequency_type. frequency_interval est de type int, avec NULL comme valeur par défaut.

  • [ @frequency\_relative\_interval=\] frequency_relative_interval
    Date de l'Agent de distribution. Ce paramètre est utilisé lorsque frequency_type a la valeur 32 (fréquence mensuelle relative). frequency_relative_interval est de type int et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    1

    Première

    2

    Seconde

    4

    Troisième

    8

    Quatrième

    16

    Dernière

    NULL (par défaut)

     

  • [ @frequency\_recurrence\_factor=\] frequency_recurrence_factor
    Est le facteur de récurrence utilisé par frequency_type. frequency_recurrence_factor est de type int, avec NULL comme valeur par défaut.

  • [ @frequency\_subday=\] frequency_subday
    Indique, en minutes, la fréquence de replanification pendant la période définie. frequency_subday est de type int et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    1

    Une fois

    2

    Seconde

    4

    Minute

    8

    Heure

    NULL

     

  • [ @frequency\_subday\_interval=\] frequency_subday_interval
    Intervalle pour frequency_subday. frequency_subday_interval est de type int, avec NULL comme valeur par défaut.

  • [ @active\_start\_time\_of\_day=\] active_start_time_of_day
    Heure à laquelle l’Agent de distribution est planifié pour la première fois, au format HHMMSS. active_start_time_of_day est de type int, avec NULL comme valeur par défaut.

  • [ @active\_end\_time\_of\_day=\] active_end_time_of_day
    Heure à laquelle l’Agent de distribution cesse d'être planifié, au format HHMMSS. active_end_time_of_day est de type int, avec NULL comme valeur par défaut.

  • [ @active\_start\_date=\] active_start_date
    Date à laquelle l’Agent de distribution est planifié pour la première fois, au format AAAAMMJJ. active_start_date est de type int, avec NULL comme valeur par défaut.

  • [ @active\_end\_date=\] active_end_date
    Date à laquelle l’Agent de distribution cesse d'être planifié, au format AAAAMMJJ. active_end_date est de type int, avec NULL comme valeur par défaut.

  • [ @optional\_command\_line=\] 'optional_command_line'
    Invite de commandes facultative à exécuter. optional_command_line est de type nvarchar(4000), avec NULL comme valeur par défaut.

  • [ @reserved=\] 'reserved'
    Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.

  • [ @enabled\_for\_syncmgr=\] 'enabled_for_syncmgr'
    Détermine si l'abonnement peut être synchronisé par le Gestionnaire de synchronisation Microsoft Windows. L'argument enabled_for_syncmgr est de type nvarchar(5), avec FALSE comme valeur par défaut. Si la valeur est false, l'abonnement n'est pas enregistré par le Gestionnaire de synchronisation Windows. Si la valeur est true, l'abonnement est enregistré par le Gestionnaire de synchronisation Windows et il peut ensuite être synchronisé, sans qu'il soit nécessaire de démarrer SQL Server Management Studio. Non pris en charge par les serveurs de publication Oracle.

  • [ @offloadagent= ] 'remote_agent_activation'
    Indique si l'Agent peut être activé à distance. remote_agent_activation est de type bit avec 0 comme valeur par défaut.

    [!REMARQUE]

    Ce paramètre est déconseillé et n'est conservé que pour la compatibilité descendante des scripts.

  • [ @offloadserver= ] 'remote_agent_server_name'
    Indique le nom réseau du serveur à utiliser pour l'activation à distance. remote_agent_server_nameest de type sysname, avec NULL comme valeur par défaut.

  • [ @dts\_package\_name= ] 'dts_package_name'
    Spécifie le nom du package DTS (Data Transformation Services). dts_package_name est de type sysname, avec NULL comme valeur par défaut. Par exemple, pour spécifier un package de DTSPub_Package, le paramètre est : @dts\_package\_name = N'DTSPub_Package'. Ce paramètre est disponible avec les abonnements envoyés. Pour ajouter des informations de package DTS à un abonnement par extraction, utilisez sp_addpullsubscription_agent.

  • [ @dts\_package\_password= ] 'dts_package_password'
    Spécifie le mot de passe du package, s'il existe. dts_package_password est de type sysname, avec NULL comme valeur par défaut.

    [!REMARQUE]

    Vous devez indiquer un mot de passe si l'argument dts_package_name est spécifié.

  • [ @dts\_package\_location= ] 'dts_package_location'
    Spécifie l'emplacement du package. dts_package_location est de type nvarchar(12), avec DISTRIBUTOR comme valeur par défaut. L'emplacement du package peut prendre la valeur distributor ou subscriber.

  • [ @distribution\_job\_name= ] 'distribution_job_name'
    Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.

  • [ @publisher= ] 'publisher'
    Spécifie un serveur de publication non Microsoft SQL Server. publisher est de type sysname, avec NULL comme valeur par défaut.

    [!REMARQUE]

    Le paramètre publisher ne doit pas être spécifié pour un serveur de publication SQL Server.

  • [ @backupdevicetype= ] 'backupdevicetype'
    Indique le type d'unité de sauvegarde utilisé lors de l'initialisation d'un Abonné à partir d'une sauvegarde. backupdevicetype est de type nvarchar(20) et peut prendre l'une des valeurs suivantes :

    Valeur

    Description

    logical (valeur par défaut)

    L'unité de sauvegarde est une unité logique.

    disk

    L'unité de sauvegarde est un lecteur de disque.

    tape

    L'unité de sauvegarde est un lecteur de bande.

    L'argument backupdevicetype est uniquement utilisé lorsque le paramètre sync_methoda pour valeur initialize_with_backup.

  • [ @backupdevicename= ] 'backupdevicename'
    Indique le nom de l'unité utilisée lors de l'initialisation d'un Abonné à partir d'une sauvegarde. backupdevicename est de type nvarchar(1000), avec NULL comme valeur par défaut.

  • [ @mediapassword= ] 'mediapassword'
    Indique un mot de passe pour le support spécifié, si un mot de passe a été défini lors du formatage du support. mediapassword est de type sysname, avec NULL comme valeur par défaut.

    [!REMARQUE]

    Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

  • [ @password= ] 'password'
    Indique un mot de passe pour la sauvegarde, si un mot de passe a été défini lors de la création de celle-ci. passwordest de type sysname, avec NULL comme valeur par défaut.

  • [ @fileidhint= ] fileidhint
    Identifie une valeur ordinale du jeu de sauvegarde à restaurer. fileidhint est de type int, avec NULL comme valeur par défaut.

  • [ @unload= ] unload
    Indique si une unité de sauvegarde sur bande doit être déchargée une fois l'initialisation de la sauvegarde terminée. unload est de type bit, avec 1 comme valeur par défaut. 1 indique que la bande doit être déchargée. unload est uniquement utilisé lorsque le paramètre backupdevicetype a pour valeur tape.

  • [ @subscriptionlsn= ] subscriptionlsn
    Spécifie le numéro séquentiel dans le journal auquel un abonnement doit commencer à remettre des modifications à un nœud dans une topologie de réplication transactionnelle d'égal à égal. Utilisé avec l'argument @sync\_type ayant pour valeur initialize from lsn pour vérifier que toutes les transactions appropriées sont répliquées sur un nouveau nœud. Pour plus d'informations, consultez Réplication transactionnelle d'égal à égal.

  • [ @subscriptionstreams= ] subscriptionstreams
    Nombre de connexions autorisées par l'Agent de distribution afin d'appliquer des lots de modifications en parallèle à un Abonné, tout en conservant bon nombre des caractéristiques transactionnelles présentes lors de l'utilisation d'un thread unique. subscriptionstreams est de type tinyint, avec NULL comme valeur par défaut. Une plage de valeurs allant de 1 à 64 est prise en charge. Ce paramètre n'est pas pris en charge pour les abonnés non-SQL Server, les serveurs de publication Oracle ou les abonnements d'égal à égal. Chaque fois que des flux d'abonnements sont utilisés, des lignes supplémentaires sont ajoutées au tableau msreplication_subscriptions (1 par flux) avec agent_id défini à NULL.

    [!REMARQUE]

    Les flux d'abonnements ne fonctionnent pas pour les articles configurés pour fournir Transact-SQL. Pour utiliser les flux d'abonnements, configurez les articles afin qu'ils fournissent des appels de procédures stockées à la place.

  • [ @subscriber\_type=\] subscriber_type
    Type d'abonné. subscriber_type est de type tinyint et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    0 (par défaut)

    Abonné SQL Server

    1

    Serveur de la source de données ODBC.

    2

    Base de données Microsoft Jet

    3

    OLE DB, fournisseur

Valeurs des codes de retour

0 (succès) ou 1 (échec)

Notes

sp_addsubscription est utilisé lors des réplications d'instantané et transactionnelle.

Lorsque sp_addsubscription est exécuté par un membre du rôle serveur fixe sysadmin pour créer un abonnement par émission de données, le travail de l'Agent de distribution est implicitement créé et s'exécute sous le compte du service SQL Server Agent. Il est recommandé d'exécuter sp_addpushsubscription_agent et d'indiquer les informations d'identification d'un autre compte Windows spécifique à l'Agent pour @job\_login et @job\_password. Pour plus d'informations, consultez Modèle de sécurité de l'Agent de réplication.

sp_addsubscription empêche les abonnés ODBC et OLE DB d'accéder aux publications qui :

  • ont été créées avec le paramètre sync_method natif dans l'appel à la procédure stockée sp_addpublication ;

  • contiennent des articles qui ont été ajoutés à la publication à l'aide de la procédure stockée sp_addarticle avec le paramètre pre_creation_cmd ayant pour valeur 3 (tronquer) ;

  • tentent d'attribuer à update_mode la valeur sync tran ;

  • ont un article configuré pour utiliser des instructions paramétrables.

En outre, si l'option allow_queued_tran d'une publication a la valeur true (permettant la mise en file d'attente des modifications sur l'abonné jusqu'à ce qu'il soit possible de les appliquer au serveur de publication), la colonne timestamp d'un article fait l'objet d'un script au format timestamp et les modifications apportées à cette colonne sont envoyées à l'Abonné. L'abonné génère et met à jour la valeur de la colonne timestamp. Dans le cas d'un abonné ODBC ou OLE DB, sp_addsubscription échoue en cas de tentative d'abonnement à une publication dont le paramètre allow_queued_tran a pour valeur true et dont certains articles possèdent des colonnes timestamp.

Si un abonnement n'utilise pas de package DTS, il ne peut pas s'abonner à une publication pour laquelle le paramètre allow_transformable_subscriptions a pour valeur true. Si la table issue de la publication doit être répliquée vers un abonnement DTS et un abonnement non-DTS, deux publications indépendantes doivent être créées : une pour chaque type d'abonnement.

Lors de la sélection des options sync_type, replication support only, initialize with backup ou initialize from lsn, l'Agent de lecture du journal doit s'exécuter après l'exécution de sp_addsubscription, afin que les scripts d'installation soient écrits dans la base de données de distribution. L'Agent de lecture du journal doit s'exécuter sous un compte membre du rôle serveur fixe sysadmin. Lorsque l'option sync_type a la valeur Automatic, aucune action particulière de l'Agent de lecture du journal n'est requise.

Autorisations

Seuls les membres du rôle serveur fixe sysadmin ou du rôle de base de données db_owner peuvent exécuter sp_addsubscription. Pour les abonnements par extraction (pull), les utilisateurs ayant une connexion dans la liste d'accès aux publications peuvent exécuter sp_addsubscription.

Exemple

-- 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'AdventureWorks2012Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2012]
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

Voir aussi

Référence

sp_addpushsubscription_agent (Transact-SQL)

sp_changesubstatus (Transact-SQL)

sp_dropsubscription (Transact-SQL)

sp_helpsubscription (Transact-SQL)

Procédures stockées système (Transact-SQL)

Concepts

Créer un abonnement par émission (push)

Créer un abonnement pour un Abonné non-SQL Server

S'abonner à des publications