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 rubriqueConventions de la syntaxe de 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, sans valeur par défaut.

  • [ @article=\] 'article'
    Nom de l'article auquel la publication est abonnée. L'argument 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é. L'argument 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. L'argument 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 la valeur (destination par défaut) pour destination_db.

  • [ @sync_type=\] 'sync_type'
    Type de synchronisation de l'abonnement. L'argument 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.

    RemarqueRemarque
    Cette option a été désapprouvée. Utilisez plutôt la prise en charge de la réplication uniquement.

    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 Procédure : configurer la réplication transactionnelle d'égal à égal (programmation Transact-SQL de la programmation).

    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 Procédure : configurer la réplication transactionnelle d'égal à égal (programmation Transact-SQL de la programmation).

    Notes

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

  • [ @status=\] 'status'
    État de l'abonnement. L'argument 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. L'argument subscription_type est de type nvarchar(4), avec push comme valeur par défaut. Peut avoir la valeur push ou pull (émission ou extraction de données). Les Agents de distribution des abonnements par émission de données résident sur le serveur de distribution, tandis que ceux des abonnements par extraction 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 Abonnement à des publications.

    Notes

    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. L'argument 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. L'argument frequency_type est de type int et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    1

    Une fois

    2

    Sur demande

    4

    Quotidiennement

    8

    Hebdomadairement

    16

    Mensuellement

    32

    Tous les mois, en fonction de l'intervalle de fréquence

    64 (valeur par défaut)

    Démarrage automatique

    128

    Périodique

  • [ @frequency_interval=\] frequency_interval
    Valeur à appliquer à la fréquence définie par frequency_type. L'argument 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

    Premier

    2

    Deuxième

    4

    Troisième

    8

    Quatrième

    16

    Dernier

    NULL (valeur par défaut)

     

  • [ @frequency_recurrence_factor=\] frequency_recurrence_factor
    Facteur de récurrence utilisé par frequency_type. L'argument frequency_recurrence_factor est de type int, avec NULL comme valeur par défaut.

  • [ @frequency_subday=\] frequency_subday
    Fréquence de replanification, exprimée en minutes, au cours de la période définie. L'argument frequency_subday est de type int et peut prendre l'une des valeurs suivantes.

    Valeur

    Description

    1

    Une fois

    2

    Deuxième

    4

    Minute

    8

    Heure

    NULL

     

  • [ @frequency_subday_interval=\] frequency_subday_interval
    Intervalle pour frequency_subday. L'argument 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 de la journée à laquelle l'Agent de distribution est planifié pour la première fois, représentée au format HHMMSS. L'argument 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 de la journée à laquelle l'Agent de distribution cesse d'être planifié, représentée au format HHMMSS. L'argument 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, représentée au format AAAAMMJJ. L'argument 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é, représentée au format AAAAMMJJ. L'argument 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. L'argument 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 que l'Agent peut être activé à distance. L'argument remote_agent_activation est de type bit, avec 0 comme valeur par défaut.

    Notes

    Ce paramètre a été désapprouvé et est uniquement conservé pour permettre une compatibilité descendante des scripts.

  • [ @offloadserver= ] 'remote_agent_server_name'
    Indique le nom réseau du serveur à utiliser pour l'activation à distance. L'argument remote_agent_server_name est 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). L'argument 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 extrait, utilisez sp_addpullsubscription_agent.

  • [ @dts_package_password= ] 'dts_package_password'
    Spécifie le mot de passe du package, le cas échéant. L'argument dts_package_password est de type sysname, avec NULL comme valeur par défaut.

    Notes

    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. L'argument publisher est de type sysname, avec NULL comme valeur par défaut.

    Notes

    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. L'argument 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_method a 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. L'argument 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. L'argument mediapassword est de type sysname, avec NULL comme valeur par défaut.

    Notes

    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. L'argument password est de type sysname, avec NULL comme valeur par défaut.

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

  • [ @unload= ] unload
    Indique si un périphérique de sauvegarde sur bande doit être déchargé une fois l'initialisation de la sauvegarde terminée. L'argument unload est de type bit, avec 1 comme valeur par défaut. La valeur 1 indique que la bande doit être déchargée. unload est uniquement utilisé lorsque 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 Procédure : configurer la réplication transactionnelle d'égal à égal (programmation Transact-SQL de la programmation).

  • [ @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. L'argument 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.

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

    Valeur

    Description

    0 (valeur par défaut)

    Abonné SQL Server

    1

    Serveur de la source de données ODBC

    2

    Base de données Microsoft Jet

    3

    Fournisseur OLE DB

Valeurs des codes renvoyés

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

Notes

sp_addsubscription est utilisé lors des réplications de capture instantanée et transactionnelle.

Lorsque sp_addsubscription est exécuté par un membre du rôle serveur fixe sysadmin pour créer un abonnement envoyé, la tâche de l'Agent de distribution est implicitement créée et s'exécute sous le compte du service de SQL Server Agent. Nous vous recommandons d'exécuter sp_addpushsubscription_agent et de spécifier les informations d'identification d'un autre compte Windows propre à 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étrées.

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.

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

--Add a push subscription to a transactional publication.
USE [AdventureWorks2008R2]
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 du rôle de base de données fixe db_owner peuvent exécuter sp_addsubscription. Pour les abonnements par extraction de données (pull), les utilisateurs ayant une connexion à la liste d'accès aux publications peuvent exécuter sp_addsubscription.