Partager via


Procédure : créer un abonnement par envoi de données (programmation Transact-SQL de réplication)

Les abonnements par envoi de données peuvent être créés par programmation en utilisant des procédures stockées de réplication. Les procédures stockées utilisées dépendent du type de publication auquel l'abonnement appartient.

Remarque relative à la sécuritéRemarque relative à la sécurité

Lorsque cela est possible, invitez les utilisateurs à saisir leurs informations d'identification au moment de l'exécution. Pour stocker les informations d'identification dans un fichier de script, vous devez sécuriser celui-ci de manière à empêcher tout accès non autorisé.

Pour créer un abonnement par envoi de données vers une capture instantanée ou une publication transactionnelle

  1. Au niveau du serveur de publication sur la base de données de publication, vérifiez que la publication prend en charge les abonnements par envoi de données en exécutant sp_helppublication.

    • Si la valeur de allow_push est 1, les abonnements par envoi de données sont pris en charge.

    • Si la valeur de allow_push est 0, exécutez sp_changepublication, en spécifiant allow_push pour @property et true pour @value.

  2. Au niveau du serveur de publication sur la base de données de publication, exécutez sp_addsubscription. Spécifiez @publication, @subscriber et @destination_db. Spécifiez la valeur push pour @subscription_type. Pour plus d'informations sur la mise à jour des abonnements, consultez Procédure : créer un abonnement pouvant être mis à jour à une publication transactionnelle (programmation Transact-SQL de la réplication).

  3. Au niveau du serveur de publication sur la base de données de publication, exécutez sp_addpushsubscription_agent. Spécifiez les informations suivantes :

    • Les paramètres @subscriber, @subscriber_db et @publication.

    • Les informations d'identification Microsoft Windows sous lesquelles l'Agent de distribution est exécuté sur le serveur de distribution pour @job_login et @job_password.

      [!REMARQUE]

      Les connexions effectuées à l'aide de l'authentification Windows intégrée utilisent toujours les informations d'identification Windows spécifiées par @job_login et @job_password. L'Agent de distribution crée toujours la connexion locale au serveur de distribution à l'aide de l'authentification intégrée Windows. Par défaut, l'Agent se connecte à l'abonné à l'aide de ces informations.

    • (Facultatif) La valeur 0 pour @subscriber_security_mode et les informations de connexion MicrosoftSQL Server pour @subscriber_login et @subscriber_password. Spécifiez ces paramètres si vous devez utiliser l'authentification SQL Server lors de la connexion à l'abonné.

    • Une planification du travail de l'Agent de distribution pour cet abonnement. Pour plus d'informations, consultez Procédure : spécifier des planifications de synchronisation (programmation Transact-SQL de la réplication).

    Remarque relative à la sécuritéRemarque relative à la sécurité

     Lors de la création d'un abonnement par envoi de données sur 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 au serveur de distribution en texte brut. 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 Chiffrement des connexions à SQL Server.

Pour créer un abonnement par envoi de données vers une publication de fusion

  1. Au niveau du serveur de publication sur la base de données de publication, vérifiez que la publication prend en charge les abonnements par envoi de données en exécutant sp_helpmergepublication.

    • Si la valeur de allow_push est 1, la publication prend en charge les abonnements par envoi de données.

    • Si la valeur de allow_push est 1, exécutez sp_changemergepublication, en spécifiant allow_push pour @property et true pour @value.

  2. Sur la base de données de publication du serveur de publication, exécutez sp_addmergesubscription, en spécifiant les paramètres suivants :

    • @publication. Il s'agit du nom de la publication.

    • @subscriber_type. Pour un abonnement client, spécifiez local, et, pour un abonnement serveur, spécifiez global.

    • @subscription_priority. Pour un abonnement serveur, spécifiez la priorité de l'abonnement (de 0.00 à 99.99).

      Pour plus d'informations, consultez Détection et résolution avancées des conflits de réplication de fusion.

  3. Sur la base de données de publication du serveur de publication, exécutez sp_addmergepushsubscription_agent. Spécifiez les informations suivantes :

    • Les paramètres @subscriber, @subscriber_db et @publication.

    • Les informations d'identification Windows sous lesquelles l'Agent de fusion est exécuté sur le serveur de distribution pour @job_login et @job_password.

      [!REMARQUE]

      Les connexions effectuées à l'aide de l'authentification intégrée Windows utilisent toujours les informations d'identification Windows spécifiées par @job_login et @job_password. L'Agent de fusion crée toujours la connexion locale au serveur de distribution à l'aide de l'authentification intégrée Windows. Par défaut, l'Agent se connecte à l'abonné à l'aide de ces informations.

    • (Facultatif) La valeur 0 pour @subscriber_security_mode et les informations de connexion SQL Server pour @subscriber_login et @subscriber_password. Spécifiez ces paramètres si vous devez utiliser l'authentification SQL Server lors de la connexion à l'abonné.

    • (Facultatif) La valeur 0 pour @publisher_security_mode et les informations de connexion SQL Server pour @publisher_login et @publisher_password. Spécifiez ces valeurs si vous devez utiliser l'authentification SQL Server lors de la connexion à l'abonné.

    • Une planification du travail de l'Agent de fusion pour cet abonnement. Pour plus d'informations, consultez Procédure : spécifier des planifications de synchronisation (programmation Transact-SQL de la réplication).

    Remarque relative à la sécuritéRemarque relative à la sécurité

     Lors de la création d'un abonnement par envoi de données sur 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 au serveur de distribution en texte brut. 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 Chiffrement des connexions à SQL Server.

Exemple

L'exemple suivant crée un abonnement par envoi de données vers une publication transactionnelle. Les valeurs de connexion et de mot de passe sont fournies lors de l'exécution à l'aide des variables de script sqlcmd.

-- 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

L'exemple suivant crée un abonnement par envoi de données vers une publication de fusion. Les valeurs de connexion et de mot de passe sont fournies lors de l'exécution à l'aide des variables de script sqlcmd.

-- 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;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

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