Condividi tramite


Recapito di snapshot tramite FTP

Si applica a: SQL Server

Questo argomento descrive come fornire uno snapshot tramite FTP in SQL Server usando SQL Server Management Studio o Transact-SQL.

Per impostazione predefinita, gli snapshot vengono archiviati in cartelle definite condivisioni UNC. La replica consente inoltre di specificare una condivisione FTP anziché una condivisione UNC. Per utilizzare l'FTP, è necessario configurare un server FTP e quindi configurare una pubblicazione e una o più sottoscrizioni che utilizzeranno l'FTP. Per informazioni sulla configurazione di un server FTP, vedere la documentazione di Internet Information Services (IIS). Se si specificano le informazioni FTP per una pubblicazione, le sottoscrizioni a quella pubblicazione per impostazione predefinita utilizzano l'FTP. FTP viene utilizzato con la sincronizzazione Web solo quando il computer con IIS è separato dal server di distribuzione da un firewall. In questo caso, è possibile utilizzare FTP per trasferire lo snapshot dal server di distribuzione e dal computer che esegue IIS. Per il trasferimento degli snapshot al Sottoscrittore viene sempre utilizzato HTTPS.

Importante

È consigliabile usare l'autenticazione di Microsoft Windows e una condivisione UNC, anziché una condivisione FTP, perché le password FTP devono essere archiviate e la password viene inviata al server FTP come testo normale dal Sottoscrittore o dal computer con IIS che usa la sincronizzazione Web. Inoltre, dato che un unico account controlla l'accesso alla condivisione snapshot, non è possibile garantire che un Sottoscrittore di una pubblicazione filtrata di tipo merge abbia accesso solo ai file snapshot della relativa partizione di dati.

Limitazioni e restrizioni

  • L'agente snapshot deve disporre delle autorizzazioni di scrittura per la directory specificata, mentre l'agente di distribuzione o l'agente di merge deve disporre delle autorizzazioni di lettura. Se vengono usate sottoscrizioni pull, è necessario specificare una directory condivisa come percorso UNC (Universal Naming Convention), ad esempio \\ftpserver\home\snapshots. Per altre informazioni, vedere Proteggere la cartella snapshot.

Prerequisiti

  • Prima di trasferire file snapshot tramite il protocollo FTP (File Transfer Protocol), è necessario configurare un server FTP. Per ulteriori informazioni, vedere la documentazione di Microsoft Internet Information Services (IIS).

Sicurezza

Per migliorare la sicurezza, si consiglia di implementare una rete privata virtuale (VPN) quando si utilizza il recapito di snapshot tramite FTP in Internet. Per altre informazioni, vedere Pubblicare i dati su Internet tramite VPN.

Ai fini della sicurezza è consigliabile non consentire accessi anonimi al server FTP. L'agente snapshot deve disporre delle autorizzazioni di scrittura per la directory specificata, mentre l'agente di distribuzione o l'agente di merge deve disporre delle autorizzazioni di lettura. Se vengono usate sottoscrizioni pull, è necessario specificare una directory condivisa come percorso UNC (Universal Naming Convention), ad esempio \\ftpserver\home\snapshots. Per altre informazioni, vedere Proteggere la cartella snapshot.

Se possibile, richiedere agli utenti di immettere le credenziali in fase di esecuzione. Se si archiviano le credenziali in un file script, è necessario proteggere il file.

Utilizzo di SQL Server Management Studio

Dopo la configurazione del server FTP specificare la directory e le informazioni di sicurezza relative a questo server nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione>. Per ulteriori informazioni sull'accesso a questa finestra di dialogo, vedere View and Modify Publication Properties.

Per specificare informazioni FTP

  1. Nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> selezionare Gli abbonati possono scaricare i file di snapshot utilizzando FTP (File Transfer Protocol) da una delle pagine seguenti:

    • La pagina Snapshot FTP, per le pubblicazioni di snapshot e transazionali e le pubblicazioni di tipo merge per i server di pubblicazione che eseguono versioni precedenti a Microsoft SQL Server 2005 (9.x).

    • La pagina Snapshot FTP e Internet, per le pubblicazioni di tipo merge provenienti dai server di pubblicazione in cui è in esecuzione SQL Server 2005 (9.x) o una versione successiva.

  2. Specificare i valori per Nome server FTP, Numero di porta, Percorso dalla cartella radice FTP, Nome account di accessoe Password.

    Ad esempio, se la radice del server FTP è \\ftpserver\home e si vogliono archiviare gli snapshot nel percorso \\ftpserver\home\snapshots, specificare \snapshots\ftp per la proprietà Percorso dalla cartella radice FTP. La replica aggiunge "ftp" al percorso della cartella snapshot durante la creazione dei file di snapshot.

  3. Specificare che tramite l'agente snapshot i file di snapshot devono essere scritti nella directory specificata al passaggio 2. Ad esempio, per fare in modo che l'agente snapshot scriva i file di snapshot in \\ftpserver\home\snapshots\ftp, è necessario specificare il percorso \\ftpserver\home\snapshots in una delle due posizioni indicate di seguito:

    • Il percorso predefinito dello snapshot per il server di distribuzione associato a questa pubblicazione.
    • Un percorso alternativo per la cartella snapshot per questa pubblicazione. Se lo snapshot è compresso viene richiesto un percorso alternativo.

Per altre informazioni su come modificare le proprietà di posizione della cartella snapshot, vedere Modificare le opzioni snapshot.

  1. Seleziona OK.

Utilizzo di Transact-SQL

È possibile impostare l'opzione per rendere i file snapshot disponibili in un server FTP e modificare le impostazioni FTP a livello di programmazione utilizzando stored procedure di replica. La stored procedure utilizzata varia a seconda del tipo di pubblicazione. Il recapito di snapshot tramite FTP viene utilizzato solo con le sottoscrizioni pull.

Per abilitare il recapito di snapshot tramite FTP per una pubblicazione snapshot o transazionale

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_addpublication. Specificare @publication, il valore true per @enabled_for_internet e valori appropriati per i parametri seguenti:

    • @ftp_address: indirizzo del server FTP utilizzato per il recapito dello snapshot.

    • (Facoltativo) @ftp_port: porta usata dal server FTP.

    • (Facoltativo) @ftp_subdirectory: sottodirectory della directory FTP predefinita assegnata a un account di accesso FTP. Se, ad esempio, la radice del server FTP è \\ftpserver\home e si vogliono archiviare gli snapshot in \\ftpserver\home\snapshots, specificare \snapshots\ftp per @ftp_subdirectory. La replica aggiungerà "ftp" al percorso della cartella snapshot durante la creazione di file di snapshot.

    • (Facoltativo) @ftp_login: account di accesso usato per la connessione al server FTP.

    • (Facoltativo) @ftp_password: password per l'accesso FTP.

    Verrà creata una pubblicazione che utilizza FTP. Per altre informazioni, vedere Create a Publication.

Per attivare il recapito di snapshot tramite FTP per una pubblicazione di tipo merge

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergepublication. Specificare @publication, il valore true per @enabled_for_internet e valori appropriati per i parametri seguenti:

    • @ftp_address: indirizzo del server FTP utilizzato per il recapito dello snapshot.

    • (Facoltativo) @ftp_port: porta usata dal server FTP.

    • (Facoltativo) @ftp_subdirectory: sottodirectory della directory FTP predefinita assegnata a un account di accesso FTP. Se, ad esempio, la radice del server FTP è \\ftpserver\home e si vogliono archiviare gli snapshot in \\ftpserver\home\snapshots, specificare \snapshots\ftp per @ftp_subdirectory. La replica aggiungerà "ftp" al percorso della cartella snapshot durante la creazione di file di snapshot.

    • (Facoltativo) @ftp_login: account di accesso usato per la connessione al server FTP.

    • (Facoltativo) @ftp_password: password per l'accesso FTP.

    Verrà creata una pubblicazione che utilizza FTP. Per altre informazioni, vedere Create a Publication.

Per creare una sottoscrizione pull in una pubblicazione snapshot o transazionale che utilizza il recapito di snapshot tramite FTP

  1. Nel database di sottoscrizione del Sottoscrittore eseguire sp_addpullsubscription. Specificare @publisher e @publication.

    • Nel database di sottoscrizione del Sottoscrittore eseguire sp_addpullsubscription_agent. Specificare @publisher, @publisher_db, @publication, le credenziali di Microsoft Windows utilizzate per l'esecuzione dell'agente di distribuzione nel Sottoscrittore per @job_login e @job_password e il valore true per @use_ftp.
  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_addsubscription per registrare la sottoscrizione pull. Per altre informazioni, vedere Creazione di una sottoscrizione pull.

Per creare una sottoscrizione pull in una pubblicazione di tipo merge che utilizza il recapito di snapshot tramite FTP

  1. Nel database di sottoscrizione del Sottoscrittore eseguire sp_addmergepullsubscription. Specificare @publisher e @publication.

  2. Nel database di sottoscrizione del Sottoscrittore eseguire sp_addmergepullsubscription_agent. Specificare @publisher, @publisher_db, @publication, le credenziali di Windows usate per l'esecuzione dell'agente di distribuzione nel Sottoscrittore per @job_login e @job_password e il valore true per @use_ftp.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergesubscription per registrare la sottoscrizione pull. Per altre informazioni, vedere Creazione di una sottoscrizione pull.

Per modificare una o più impostazioni del recapito di snapshot tramite FTP per una pubblicazione snapshot o transazionale

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_changepublication. Specificare uno dei valori seguenti per @property e un nuovo valore di questa impostazione per @value:

    • ftp_address : indirizzo del server FTP usato per il recapito dello snapshot.

    • ftp_port: porta utilizzata dal server FTP.

    • ftp_subdirectory: sottodirectory della directory FTP predefinita utilizzata per lo snapshot tramite FTP.

    • ftp_login: account di accesso utilizzato per la connessione al server FTP.

    • ftp_password: password per l'account di accesso FTP.

  2. (Facoltativo) Ripetere il passaggio 1 per ogni impostazione FTP da modificare.

  3. (Facoltativo) Per disabilitare il recapito di snapshot tramite FTP, eseguire sp_changepublication nel database di pubblicazione del server di pubblicazione. Specificare il valore enabled_for_internet per @property e il valore false per @value.

Per modificare le impostazioni del recapito di snapshot tramite FTP per una pubblicazione di tipo merge

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_changemergepublication. Specificare uno dei valori seguenti per @property e un nuovo valore di questa impostazione per @value:

    • ftp_address: indirizzo del server FTP utilizzato per il recapito dello snapshot.

    • ftp_port: porta utilizzata dal server FTP.

    • ftp_subdirectory: sottodirectory della directory FTP predefinita utilizzata per lo snapshot tramite FTP.

    • ftp_login: account di accesso utilizzato per la connessione al server FTP.

    • ftp_password: password per l'account di accesso FTP.

  2. (Facoltativo) Ripetere il passaggio 1 per ogni impostazione FTP da modificare.

  3. (Facoltativo) Per disabilitare il recapito di snapshot tramite FTP, eseguire sp_changemergepublication nel database di pubblicazione del server di pubblicazione. Specificare il valore enabled_for_internet per @property e il valore false per @value.

Esempi (Transact-SQL)

Nell'esempio seguente viene creata una pubblicazione di tipo merge che consente ai Sottoscrittori di accedere ai dati dello snapshot tramite FTP. Il Sottoscrittore deve utilizzare una connessione VPN sicura per l'accesso alla condivisione FTP. I valori dell'account di accesso e della password vengono forniti tramite le variabili di scriptingsqlcmd . Per altre informazioni, vedere Usare sqlcmd con variabili di scripting.

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

Nell'esempio seguente viene creata una sottoscrizione in una pubblicazione di tipo merge in cui il Sottoscrittore ottiene lo snapshot tramite FTP. Il Sottoscrittore deve utilizzare una connessione VPN sicura per l'accesso alla condivisione FTP. I valori dell'account di accesso e della password vengono forniti tramite le variabili di scriptingsqlcmd . Per altre informazioni, vedere Usare sqlcmd con variabili di scripting.

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