Procédure : remettre une capture instantanée via FTP (programmation Transact-SQL de la réplication)

L'option permettant de rendre disponibles sur un serveur FTP des fichiers de capture instantanée peut être définie et ces paramètres FTP peuvent être modifiés par programme en utilisant des procédures stockées de réplication. La procédure utilisée dépend du type de publication. La remise de captures instantanées via FTP est utilisée uniquement avec les abonnements par extraction.

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

Pour améliorer la sécurité, nous vous recommandons d'implémenter un réseau privé virtuel (VPN) lorsque vous utilisez la remise de captures instantanées via FTP sur Internet. Pour plus d'informations, consultez Publication de données sur Internet à l'aide d'un réseau privé virtuel.

Pour activer la remise de captures instantanées via FTP pour une publication transactionnelle ou de capture instantanée

  • Dans la base de données de publication sur le serveur de publication, exécutez sp_addpublication. Spécifiez @publication, affectez la valeur true à @enabled_for_internet et les valeurs appropriées aux paramètres suivants :

    • @ftp_address - l'adresse du serveur FTP utilisé pour remettre la capture instantanée.

    • (Facultatif) @ftp_port - le port utilisé par le serveur FTP.

    • (Facultatif) @ftp_subdirectory - le sous-répertoire du répertoire FTP par défaut affecté à une connexion FTP. Par exemple, si la racine du serveur FTP est \\serveurftp\home et que vous souhaitez stocker les captures instantanées dans \\serveurftp\home\snapshots, spécifiez \snapshots\ftp pour @ftp_subdirectory (la réplication ajoute « ftp » au chemin d'accès du dossier de capture instantanée lorsqu'il crée les fichiers de capture instantanée).

    • (Facultatif) @ftp_login - un compte de connexion utilisé lors de la connexion au serveur FTP.

    • (Facultatif) @ftp_password - le mot de passe de la connexion FTP.

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

      La méthode de sécurité conseillée consiste à désactiver l'accès anonyme au serveur FTP.

    [!REMARQUE]

    L'Agent de capture instantanée doit posséder des autorisations en écriture sur le répertoire spécifié et les Agents de distribution et de fusion des autorisations en lecture. Si vous utilisez des abonnements par extraction, vous devez définir un répertoire partagé sous la forme d'un chemin d'accès UNC, par exemple \serveurftp\home\snapshots. Pour plus d'informations, consultez Sécurisation du dossier de capture instantanée.

    Une publication qui utilise FTP est alors créée. Pour plus d'informations, consultez Procédure : créer une publication (programmation Transact-SQL de la réplication).

Pour activer la remise de captures instantanées via FTP pour une publication de fusion

  • Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergepublication. Spécifiez @publication, affectez la valeur true à @enabled_for_internet et les valeurs appropriées aux paramètres suivants :

    • @ftp_address - l'adresse du serveur FTP utilisé pour remettre la capture instantanée.

    • (Facultatif) @ftp_port - le port utilisé par le serveur FTP.

    • (Facultatif) @ftp_subdirectory - le sous-répertoire du répertoire FTP par défaut affecté à une connexion FTP. Par exemple, si la racine du serveur FTP est \\serveurftp\home et que vous souhaitez stocker les captures instantanées dans \\serveurftp\home\snapshots, spécifiez \snapshots\ftp pour @ftp_subdirectory (la réplication ajoute « ftp » au chemin d'accès du dossier de capture instantanée lorsqu'il crée les fichiers de capture instantanée).

    • (Facultatif) @ftp_login - un compte de connexion utilisé lors de la connexion au serveur FTP.

    • (Facultatif) @ftp_password - le mot de passe de la connexion FTP.

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

      La méthode de sécurité conseillée consiste à désactiver l'accès anonyme au serveur FTP.

    [!REMARQUE]

    L'Agent de capture instantanée doit posséder des autorisations en écriture sur le répertoire spécifié et les Agents de distribution et de fusion des autorisations en lecture. Si vous utilisez des abonnements par extraction, vous devez définir un répertoire partagé sous la forme d'un chemin d'accès UNC, par exemple \serveurftp\home\snapshots. Pour plus d'informations, consultez Sécurisation du dossier de capture instantanée.

    Une publication qui utilise FTP est alors créée. Pour plus d'informations, consultez Procédure : créer une publication (programmation Transact-SQL de la réplication).

Pour créer un abonnement par extraction à une publication transactionnelle ou de capture instantanée qui utilise la remise de captures instantanées via FTP

  1. Dans la base de données d'abonnement de l'Abonné, exécutez sp_addpullsubscription. Spécifiez @publisher et @publication.

    • Dans la base de données d'abonnement de l'Abonné, exécutez sp_addpullsubscription_agent. Spécifiez @publisher, @publisher_db, @publication, les informations d'identification MicrosoftWindows sous lesquelles l'Agent de distribution s'exécute sur l'Abonné pour @job_login et @job_password et affectez la valeur true à @use_ftp.
  2. Dans la base de données de publication sur le serveur de publication, exécutez sp_addsubscription pour inscrire l'abonnement par extraction. Pour plus d'informations, consultez Procédure : créer un abonnement par extraction de données (programmation Transact-SQL de réplication).

Pour créer un abonnement par extraction à une publication de fusion qui utilise la remise de captures instantanées via FTP

  1. Dans la base de données d'abonnement de l'Abonné, exécutez sp_addmergepullsubscription. Spécifiez @publisher et @publication.

  2. Dans la base de données d'abonnement de l'Abonné, exécutez sp_addmergepullsubscription_agent. Spécifiez @publisher, @publisher_db, @publication, les informations d'identification Windows sous lesquelles l'Agent de distribution s'exécute sur l'Abonné pour @job_login et @job_password et affectez la valeur true à @use_ftp.

  3. Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergesubscription pour inscrire l'abonnement par extraction. Pour plus d'informations, consultez Procédure : créer un abonnement par extraction de données (programmation Transact-SQL de réplication).

Pour modifier un ou plusieurs paramètres de remise de captures instantanées sur FTP pour une publication transactionnelle ou de capture instantanée

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_changepublication. Affectez l'une des valeurs suivantes à @property et une nouvelle valeur de ce paramètre à @value :

    • ftp_address - l'adresse du serveur FTP utilisé pour remettre la capture instantanée.

    • ftp_port - le port utilisé par le serveur FTP.

    • ftp_subdirectory - le sous-répertoire du répertoire FTP par défaut utilisé pour la capture instantanée FTP.

    • ftp_login - une connexion utilisée pour la connexion au serveur FTP.

    • ftp_password - le mot de passe utilisé pour la connexion FTP.

    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. Si vous stockez ces informations dans un fichier de script, vous devez sécuriser ce fichier.

  2. (Facultatif) Répétez l'étape 1 pour chaque paramètre FTP modifié.

  3. (Facultatif) Pour désactiver la remise de captures instantanées via FTP, exécutez sp_changepublication au niveau du serveur de publication dans la base de données de publication. Affectez la valeur enabled_for_internet à @property et la valeur false à @value.

Pour modifier les paramètres de remise de captures instantanées via FTP pour une publication de fusion

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_changemergepublication. Affectez l'une des valeurs suivantes à @property et une nouvelle valeur de ce paramètre à @value :

    • ftp_address - l'adresse du serveur FTP utilisé pour remettre la capture instantanée.

    • ftp_port - le port utilisé par le serveur FTP.

    • ftp_subdirectory - le sous-répertoire du répertoire FTP par défaut utilisé pour la capture instantanée FTP.

    • ftp_login - une connexion utilisée pour la connexion au serveur FTP.

    • ftp_password - le mot de passe de la connexion FTP.

    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. Si vous stockez les informations d'identification dans un fichier de script, vous devez sécuriser ce fichier.

  2. (Facultatif) Répétez l'étape 1 pour chaque paramètre FTP modifié.

  3. (Facultatif) Pour désactiver la remise de captures instantanées via FTP, exécutez sp_changemergepublication au niveau du serveur de publication dans la base de données de publication. Affectez la valeur enabled_for_internet à @property et la valeur false à @value.

Exemple

L'exemple suivant crée une publication de fusion qui permet aux Abonnés d'accéder aux données des captures instantanées en utilisant FTP. L'Abonné doit utiliser une connexion sécurisée au réseau privé virtuel pour accéder au partage FTP. Les variables de script sqlcmd sont utilisées pour fournir les valeurs de connexion et de mot de passe. Pour plus d'informations, consultez Utilisation de sqlcmd avec des variables de script.

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

-- Declarations for adding a merge publication.
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @ftp_server AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
DECLARE @ftp_login AS sysname;
DECLARE @ftp_password AS sysname;
DECLARE @ftp_directory AS sysname;
DECLARE @snapshot_folder AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksSalesOfferMergeFtp'; 
SET @ftp_server = $(Server);
SET @login = $(Login);
SET @password = $(Password);
SET @ftp_login = $(FtpLogin);
SET @ftp_password = $(FtpPassword);
SET @ftp_directory = N'\snapshots\ftp';
-- The snapshot folder is the root FTP folder on the server 
-- with the \snapshot subdirectory.
SET @snapshot_folder = $(AlternateFolder);
SET @article = N'SpecialOffer'; 
SET @owner = N'Sales' 

-- Enable merge replication on the publication database.
USE master
EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname=N'merge publish',
    @value = N'true' ;

-- Create a new merge publication, enabling FTP snapshot delivery. 
-- Specify the publication compatibility level or it will default to 
-- SQL Server 2000.
USE [AdventureWorks]
EXEC sp_addmergepublication 
-- Specify the required parameters.
    @publication = @publication,
    @publication_compatibility_level = N'90RTM',
    @enabled_for_internet = N'true',
    @snapshot_in_defaultfolder = N'true',
    @alt_snapshot_folder = @snapshot_folder,
    @ftp_address = @ftp_server,
    @ftp_subdirectory = @ftp_directory,
    @ftp_login = @ftp_login,
    @ftp_password = @ftp_password;

-- Create the snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password;

-- Add an unfiltered article for the Customer table.
EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_object = @article, 
    @type = N'table', 
    @source_owner = @owner, 
    @destination_owner = @owner, 
    @column_tracking = N'true'; 

-- Start the snapshot job for the publication.
EXEC sp_startpublication_snapshot 
    @publication = @publication;
GO

L'exemple suivant crée un abonnement à une publication de fusion, dans lequel l'Abonné obtient la capture instantanée en utilisant FTP. L'Abonné doit utiliser une connexion sécurisée au réseau privé virtuel pour accéder au partage FTP. Les variables de script sqlcmd sont utilisées pour fournir les valeurs de connexion et de mot de passe. Pour plus d'informations, consultez Utilisation de sqlcmd avec des variables de script.

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

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksSalesOfferMergeFtp';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addmergesubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @subscriber_type = N'local', 
    @subscription_priority = 0, 
    @sync_type = N'Automatic';
GO
-- 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".

-- Execute this batch at the Subscriber.
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksSalesOfferMergeFtp'; 
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

EXEC sp_addmergepullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @subscriber_type = N'Local', 
    @subscription_priority = 0, 
    @sync_type = N'Automatic';

exec sp_addmergepullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication, 
    @distributor = @publisher, 
    @distributor_security_mode = 1, 
    @use_ftp = N'true', 
    @job_login = @login, 
    @job_password = @password, 
    @publisher_security_mode = 1, 
    @use_web_sync = 0;
GO