Remettre un instantané via FTP

S'applique à : SQL Server

Cette rubrique décrit comment fournir un instantané via FTP dans SQL Server en utilisant SQL Server Management Studio ou Transact-SQL.

Par défaut, les instantanés sont stockés dans des dossiers définis sous forme de partages UNC (Universal Naming Convention). La réplication vous permet aussi de spécifier un partage FTP (File Transfer Protocol) plutôt qu'UNC. Pour utiliser FTP, vous devez configurer un serveur FTP puis une publication et un ou plusieurs abonnements qui utiliseront FTP. Pour obtenir des informations sur la configuration d'un serveur SMTP, consultez la documentation IIS (Internet Information Services). Si vous spécifiez des informations FTP pour une publication, les abonnements à cette publication utiliseront par défaut FTP. FTP est uniquement utilisé avec la synchronisation Web lorsque l'ordinateur exécutant IIS est séparé du serveur de distribution par un pare-feu. Dans ce cas, FTP peut être utilisé pour transférer l'instantané entre le serveur de distribution et l'ordinateur qui exécute IIS. (L'instantané est toujours transféré à l'Abonné en utilisant le protocole HTTPS.)

Important

Il est conseillé d’utiliser l’authentification Microsoft Windows et un partage UNC plutôt qu’un partage FTP puisque les mots de passe FTP doivent être stockés et que le mot de passe est transmis de l’Abonné ou de l’ordinateur exécutant IIS quand il utilise la synchronisation web avec le serveur FTP en texte brut. De plus, parce qu'un seul compte contrôle l'accès au partage d'instantané, il n'est pas possible de garantir qu'un Abonné à une publication de fusion filtrée n'aura accès qu'aux fichiers d'instantanés de sa partition de données.

Limitations et restrictions

  • L'Agent d'instantané 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 extraits, vous devez définir un répertoire partagé en tant que chemin UNC, par exemple \\ftpserver\home\snapshots. Pour plus d’informations, consultez Sécuriser le dossier d’instantanés.

Prérequis

  • Pour transférer des fichiers d'instantanés via FTP (File Transfer Protocol), vous devez avant tout configurer un serveur FTP. Pour plus d'informations, consultez la documentation de Microsoft Internet Information Services (IIS).

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 d'instantanés via FTP sur Internet. Pour plus d’informations, consultez Publier des données sur Internet à l’aide d’un réseau privé virtuel.

La méthode de sécurité conseillée consiste à désactiver l'accès anonyme au serveur FTP. L'Agent d'instantané 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 extraits, vous devez définir un répertoire partagé en tant que chemin UNC, par exemple \\ftpserver\home\snapshots. Pour plus d’informations, consultez Sécuriser le dossier d’instantanés.

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.

Utilisation de SQL Server Management Studio

Après avoir configuré le serveur FTP, spécifiez des informations de répertoire et de sécurité pour ce serveur dans la boîte de dialogue Propriétés de la publication - <Publication>. Pour plus d'informations sur l'accès à cette boîte de dialogue, consultez Afficher et modifier les propriétés d’un serveur de publication.

Pour spécifier des informations FTP

  1. Dans la boîte de dialogue Propriétés de la publication - <Publication>, sélectionnez Autoriser les Abonnés à télécharger des fichiers d’instantanés via le protocole FTP (File Transfer Protocol) dans l’une des pages suivantes :

    • La page FTP Snapshot, pour les publications snapshot et transactionnelles, et les publications de fusion pour les éditeurs utilisant des versions antérieures à Microsoft SQL Server 2005 (9.x).

    • La page FTP Snapshot et Internet, pour les publications de fusion provenant d'éditeurs exécutant SQL Server 2005 (9.x) ou une version ultérieure.

  2. Spécifiez des valeurs dans les zones de texte Nom du serveur FTP, Numéro de port, Chemin d'accès au dossier racine FTP, Nom de connexionet Mot de passe.

    Si, par exemple la racine du serveur FTP est \\ftpserver\home et que vous souhaitez stocker les instantanés dans \\ftpserver\home\snapshots, spécifiez \snapshots\ftp pour la propriété Chemin d’accès au dossier racine FTP (la réplication ajoute « ftp » au chemin d’accès au dossier d’instantanés lorsqu’il crée les fichiers d’instantanés).

  3. Spécifiez que l'Agent d'instantané doit écrire les fichiers d'instantanés dans le répertoire défini à l'étape 2. Par exemple, pour que l’Agent d’instantané écrive les fichiers d’instantanés dans \\ftpserver\home\snapshots\ftp, vous devez définir le chemin \\ftpserver\home\snapshots dans l’un ou l’autre emplacement :

    • Emplacement des instantanés par défaut sur le serveur de distribution associé à cette publication.
    • Autre emplacement de dossier d'instantanés pour cette publication. Un autre emplacement est requis si l'instantané est compressé.

Pour plus d’informations sur la modification des propriétés d’emplacement du dossier d’instantanés, consultez Options des instantanés.

  1. Cliquez sur OK.

Utilisation de Transact-SQL

L'option permettant de rendre disponibles sur un serveur FTP des fichiers d'instantanés 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 d'instantanés via FTP est utilisée uniquement avec les abonnements par extraction.

Pour activer la remise d'instantanés via FTP pour une publication transactionnelle ou d'instantané

  1. 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 l'instantané.

    • (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 \\ftpserver\home et que vous souhaitez stocker les instantanés dans \\ftpserver\home\snapshots, spécifiez \snapshots\ftp pour @ftp_subdirectory (la réplication ajoute « ftp » au chemin du dossier d’instantanés quand elle crée les fichiers d’instantanés).

    • (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.

    Une publication qui utilise FTP est alors créée. Pour plus d’informations, voir Create a Publication.

Pour activer la remise d'instantanés via FTP pour une publication de fusion

  1. 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 l'instantané.

    • (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 \\ftpserver\home et que vous souhaitez stocker les instantanés dans \\ftpserver\home\snapshots, spécifiez \snapshots\ftp pour @ftp_subdirectory (la réplication ajoute « ftp » au chemin du dossier d’instantanés quand elle crée les fichiers d’instantanés).

    • (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.

    Une publication qui utilise FTP est alors créée. Pour plus d’informations, voir Create a Publication.

Pour créer un abonnement par extraction vers une publication transactionnelle ou d'instantané qui utilise la remise d'instantanés 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 Microsoft Windows sous lesquelles l'Agent de distribution s'exécute sur l'Abonné pour @job_login et @job_passwordet 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 Créer un abonnement par extraction de données (pull).

Pour créer un abonnement par extraction à une publication de fusion qui utilise la remise d'instantanés 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 Créer un abonnement par extraction de données (pull).

Pour modifier un ou plusieurs paramètres de remise d'instantanés sur FTP pour une publication transactionnelle ou d'instantané

  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 l’instantané.

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

    • ftp_subdirectory - le sous-répertoire du répertoire FTP par défaut utilisé pour l'instantané FTP.

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

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

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

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

Pour modifier les paramètres de remise d'instantanés 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 l'instantané.

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

    • ftp_subdirectory - le sous-répertoire du répertoire FTP par défaut utilisé pour l'instantané FTP.

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

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

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

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

Exemples (Transact-SQL)

L'exemple suivant crée une publication de fusion qui permet aux Abonnés d'accéder aux données des instantanés en utilisant FTP. L'Abonné doit utiliser une connexion VPN sécurisée lors de l'accès au partage FTP. Les variables de scriptsqlcmd sont utilisées pour fournir les valeurs de connexion et de mot de passe. Pour plus d’informations, consultez Utiliser 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 l'instantané en utilisant FTP. L'Abonné doit utiliser une connexion VPN sécurisée lors de l'accès au partage FTP. Les variables de scriptsqlcmd sont utilisées pour fournir les valeurs de connexion et de mot de passe. Pour plus d’informations, consultez Utiliser 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