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. L'argument publication est du 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é. 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 une valeur (destination par défaut) pour destination_db.
  • [ @sync_type=] 'sync_type'
    Type de synchronisation de l'abonnement. sync_type est de type nvarchar(255) et peut prendre l'une des valeurs suivantes :

    Valeur

  • [ @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 de l'abonnement. L'argument subscription_type est de type nvarchar(4), avec « push » comme valeur par défaut. Peut avoir la valeur push ou pull (envoi ou extraction de données). Les Agents de distribution des abonnements push (par envoi de données) résident sur le serveur de distribution, tandis que ceux des abonnements pull (par extraction de données) se trouvent sur l'abonné. L'argument subscription_type peut avoir la valeur pull afin de créer un abonnement extrait connu du serveur de publication. Pour plus d'informations, consultez Abonnement à des publications.

    ms181702.note(fr-fr,SQL.90).gifRemarque :
    Les abonnements anonymes ne doivent pas utiliser cette procédure stockée.
  • [ @update_mode=] 'update_mode'
    Type de la 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 synctran 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)

    Automatiquement défini sur true pour un abonné SQL Server et false pour un abonné non-SQL Server.

  • [ @frequency_type=] frequency_type
    Fréquence à laquelle doit être planifiée 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

    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
    Si la valeur à appliquer à la fréquence définie par frequency_type. frequency_interval est int, avec une valeur par nulle.
  • [ @frequency_relative_interval=] frequency_relative_interval
    Date de l'Agent de distribution. Ce paramètre est utilisé lorsque la valeur affectée à l'argument frequency_type est égale à 32 (Relatif mensuel). L'argument 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. frequency_recurrence_factor is 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 de 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 du jour à 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 du jour à laquelle l'Agent de distribution n'est plus 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 n'est plus 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'
    À usage interne uniquement.
  • [ @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.

    ms181702.note(fr-fr,SQL.90).gifRemarque :
    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.

    ms181702.note(fr-fr,SQL.90).gifRemarque :
       Vous devez indiquer un mot de passe si l'argument dts_package_name est spécifié.
  • [ @dts_package_location= ] 'dts_package_location'
    Indique l'emplacement du package. L'argument dts_package_location est de type nvarchar(12), avec DISTRIBUTOR comme valeur par défaut. L'emplacement du package peut être distributor ou subscriber.
  • [ @distribution_job_name= ] 'distribution_job_name'
    À usage interne uniquement.
  • [ @publisher= ] 'publisher'
    Spécifie un serveur de publication non Microsoft SQL Server. L'argument publisher est du type sysname avec NULL comme valeur par défaut.

    ms181702.note(fr-fr,SQL.90).gifRemarque :
    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.
  • [ @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 de la 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
    À usage interne uniquement.
  • [ @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 de l'abonné. L'argument subscriber_type est de type tinyint et peut avoir 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

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 l'Agent SQL Server. 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 par un appel à la procédure stockée sp_addpublication avec le paramètre sync_method valorisé à native ;
  • 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 valorirsé à 3 (tronqué) ;
  • tentent de définir le paramètre update_mode sur sync tran ;
  • ont un article configuré pour utiliser des instructions paramétrées.

En outre, si l'option allow_queued_tran d'une publication est activée (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 est activé. 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.

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.

Valeurs des codes renvoyés

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

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

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

Autres ressources

Procédure : créer un abonnement par envoi de données (programmation Transact-SQL de réplication)
How to: Create a Subscription for a Non-SQL Server Subscriber (Replication Transact-SQL Programming)
Abonnement à des publications

Aide et Informations

Assistance sur SQL Server 2005