Übermitteln einer Momentaufnahme über FTP

Gilt für:SQL Server

In diesem Artikel wird beschrieben, wie eine Momentaufnahme in SQL Server mithilfe von SQL Server Management Studio oder Transact-SQL über FTP übermittelt wird.

Standardmäßig werden Snapshots in Ordnern gespeichert, die als UNC-Freigaben (Universal Naming Convention) definiert sind. Die Replikation ermöglicht es Ihnen auch, eine FTP-Freigabe (File Transfer Protocol) anstelle einer UNC-Freigabe anzugeben. Dazu müssen Sie einen FTP-Server und anschließend eine Veröffentlichung sowie mindestens ein Abonnement über FTP konfigurieren. Informationen dazu, wie ein FTP-Server konfiguriert wird, finden Sie in der Internetinformationsdienste (IIS)-Dokumentation. Wenn Sie FTP-Informationen für eine Veröffentlichung angeben, verwenden die Abonnements dieser Veröffentlichung standardmäßig FTP. FTP wird nur zur Websynchronisierung verwendet, wenn der Computer, auf dem IIS (Internet Information Services, Internetinformationsdienste) ausgeführt wird, vom Verteiler durch eine Firewall getrennt ist. In diesem Fall kann die Momentaufnahme über FTP vom Verteiler an den Computer, auf dem IIS ausgeführt wird, gesendet werden. (Zur Übertragung der Momentaufnahme an den Abonnenten wird immer HTTPS verwendet.)

Wichtig

Es wird empfohlen, vorzugsweise die Microsoft Windows-Authentifizierung und eine UNC-Freigabe statt einer FTP-Freigabe zu verwenden, da FTP-Kennwörter gespeichert werden müssen, und das Kennwort vom Abonnenten oder von dem Computer, auf dem IIS bei der Websynchronisierung ausgeführt wird, als unverschlüsselter Text an den FTP-Server gesendet wird. Außerdem ist es, da ein einziges Konto den Zugriff auf die Snapshotfreigabe steuert, nicht möglich sicherzustellen, dass ein Abonnent einer gefilterten Mergeveröffentlichung nur Zugriff auf die Snapshotdateien seiner Datenpartition hat.

Beschränkungen und Einschränkungen

  • Der Snapshot-Agent muss über Schreibberechtigungen für das von Ihnen angegebene Verzeichnis verfügen, und der Verteilungs-Agent oder Merge-Agent muss über Leseberechtigungen verfügen. Bei Verwendung von Pullabonnements müssen Sie ein freigegebenes Verzeichnis als UNC-Pfad angeben, wie z. B. \\ftpserver\home\snapshots. Weitere Informationen finden Sie unter Sichern des Snapshot-Ordners.

Voraussetzungen

  • Zum Übertragen von Momentaufnahmedateien über FTP (File Transfer Protocol) müssen Sie zuerst einen FTP-Server konfigurieren. Weitere Informationen finden Sie in der Dokumentation zu den Microsoft-Internetinformationsdiensten (IIS).

Sicherheit

Implementieren Sie ein virtuelles privates Netzwerk (VPN), wenn Sie FTP-Momentaufnahmeübermittlung über das Internet verwenden, um die Sicherheit zu verbessern. Weitere Informationen finden Sie unter Veröffentlichen von Daten über das Internet mithilfe von VPN.

Lassen Sie als bewährte Sicherheitsmethode keine anonymen Anmeldungen am FTP-Server zu. Der Snapshot-Agent muss über Schreibberechtigungen für das von Ihnen angegebene Verzeichnis verfügen, und der Verteilungs-Agent oder Merge-Agent muss über Leseberechtigungen verfügen. Bei Verwendung von Pullabonnements müssen Sie ein freigegebenes Verzeichnis als UNC-Pfad angeben, wie z. B. \\ftpserver\home\snapshots. Weitere Informationen finden Sie unter Sichern des Snapshot-Ordners.

Die Benutzer sollten nach Möglichkeit während der Laufzeit zur Eingabe von Anmeldeinformationen aufgefordert werden. Wenn Anmeldeinformationen in einer Skriptdatei gespeichert werden, müssen Sie sicherstellen, dass die Datei geschützt ist.

Verwendung von SQL Server Management Studio

Geben Sie nach dem Konfigurieren des FTP-Servers im Dialogfeld Veröffentlichungseigenschaften <Veröffentlichung> ein Verzeichnis und Sicherheitsinformationen für diesen Server an. Weitere Informationen zum Zugreifen auf dieses Dialogfeld finden Sie unter View and Modify Publication Properties.

FTP-Informationen angeben

  1. Aktivieren Sie im Dialogfeld Veröffentlichungseigenschaften – <Veröffentlichung> die Option Abonnenten das Herunterladen von Momentaufnahmedateien über FTP (File Transfer Protocol) ermöglichen auf einer der folgenden Seiten:

    • Seite FTP-Momentaufnahme für Momentaufnahmen- und Transaktionsveröffentlichungen sowie Mergeveröffentlichungen für Verleger, auf denen niedrigere Versionen als Microsoft SQL Server 2005 (9.x) ausgeführt werden.

    • Seite FTP-Momentaufnahme und Internet für Mergeveröffentlichungen von Verlegern, auf denen SQL Server 2005 (9.x) oder höher ausgeführt wird.

  2. Geben Sie Werte für FTP-Servername, Portnummer, Pfad des FTP-Stammordners, Anmeldenameund Kennwortan.

    Wenn beispielsweise der FTP-Stammordner \\ftpserver\home lautet und Momentaufnahmen in \\ftpserver\home\snapshots gespeichert werden sollen, geben Sie \snapshots\ftp für die Eigenschaft Pfad des FTP-Stammordners an (von der Replikation wird beim Erstellen der Momentaufnahmedateien „ftp“ an den Pfad des Momentaufnahmeordners angehängt).

  3. Geben Sie an, dass der Momentaufnahme-Agent die Momentaufnahmedateien in das in Schritt 2 angegebene Verzeichnis schreiben soll. Wenn der Momentaufnahme-Agent beispielsweise die Momentaufnahmedateien in das Verzeichnis \\ftpserver\home\snapshots\ftp schreiben soll, müssen Sie den Pfad \\ftpserver\home\snapshots an einer von zwei Stellen angeben:

    • Dem Standardspeicherort für Momentaufnahmen für den Verteiler, dem diese Veröffentlichung zugeordnet ist.
    • Ein alternativer Ordnerspeicherort für Snapshots dieser Veröffentlichung. Ein alternativer Speicherort ist erforderlich, wenn die Momentaufnahme komprimiert wird.

Weitere Informationen zum Ändern der Eigenschaften des Snapshot-Ordners finden Sie unter Snapshot-Optionen.

  1. Wählen Sie OK aus.

Verwenden von Transact-SQL

Die Option, Momentaufnahmedateien auf einem FTP-Server verfügbar zu machen, kann festgelegt werden, und die entsprechenden FTP-Einstellungen können programmgesteuert mithilfe gespeicherter Replikationsprozeduren geändert werden. Welche Prozedur verwendet wird, hängt vom Typ der Veröffentlichung ab. Die FTP-Snapshotübermittlung wird nur bei Pull-Abonnements verwendet.

So aktivieren Sie die FTP-Momentaufnahmeübermittlung für eine Momentaufnahme- oder Transaktionsveröffentlichung

  1. Führen Sie auf dem Publisher in der Veröffentlichungsdatenbank sp_addpublication aus. Geben Sie @publication, einen TRUE-Wert für @enabled_for_internet und entsprechende Werte für die folgenden Parameter an:

    • @ftp_address – die Adresse des FTP-Servers, der für die Übermittlung der Momentaufnahme verwendet wird.

    • (Optional) @ftp_port: der vom FTP-Server verwendete Port.

    • (Optional) @ftp_subdirectory: das Unterverzeichnis des einer FTP-Anmeldung zugewiesenen Standard-FTP-Verzeichnisses. Wenn beispielsweise der FTP-Stammordner \\ftpserver\home lautet und Momentaufnahmen in \\ftpserver\home\snapshots gespeichert werden sollen, geben Sie \snapshots\ftp für @ftp_subdirectory an (von der Replikation wird beim Erstellen der Momentaufnahmedateien „ftp“ an den Pfad des Momentaufnahmeordners angehängt).

    • (Optional) @ftp_login: das Anmeldekonto, das beim Herstellen einer Verbindung mit dem FTP-Server verwendet wird.

    • (Optional) @ftp_password: das Kennwort für die FTP-Anmeldung.

    Dadurch wird eine Veröffentlichung erstellt, die FTP verwendet. Weitere Informationen finden Sie unter Create a Publication.

So aktivieren Sie die FTP-Momentaufnahmeübermittlung für eine Mergeveröffentlichung

  1. Führen Sie beim Verleger in der Veröffentlichungsdatenbank sp_addmergepublication aus. Geben Sie @publication, einen TRUE-Wert für @enabled_for_internet und entsprechende Werte für die folgenden Parameter an:

    • @ftp_address – die Adresse des FTP-Servers, der für die Übermittlung der Momentaufnahme verwendet wird.

    • (Optional) @ftp_port: der vom FTP-Server verwendete Port.

    • (Optional) @ftp_subdirectory: das Unterverzeichnis des einer FTP-Anmeldung zugewiesenen Standard-FTP-Verzeichnisses. Wenn beispielsweise der FTP-Stammordner \\ftpserver\home lautet und Momentaufnahmen in \\ftpserver\home\snapshots gespeichert werden sollen, geben Sie \snapshots\ftp für @ftp_subdirectory an (von der Replikation wird beim Erstellen der Momentaufnahmedateien „ftp“ an den Pfad des Momentaufnahmeordners angehängt).

    • (Optional) @ftp_login: das Anmeldekonto, das beim Herstellen einer Verbindung mit dem FTP-Server verwendet wird.

    • (Optional) @ftp_password: das Kennwort für die FTP-Anmeldung.

    Dadurch wird eine Veröffentlichung erstellt, die FTP verwendet. Weitere Informationen finden Sie unter Create a Publication.

So erstellen Sie ein Pullabonnement für eine Momentaufnahme- oder Transaktionsveröffentlichung, die FTP-Snapshotübermittlung verwendet

  1. Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_addpullsubscriptionaus. Geben Sie @publisher und @publication an.

    • Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_addpullsubscription_agentaus. Geben Sie @publisher, @publisher_db, @publication, die Microsoft Windows-Anmeldeinformationen, unter denen der Verteilungs-Agent auf dem Abonnenten ausgeführt wird, für @job_login und @job_password sowie den Wert true für @use_ftp an.
  2. Führen Sie beim Publisher in der Veröffentlichungsdatenbank sp_addsubscription aus, um das Pullabonnement zu registrieren. Weitere Informationen finden Sie unter Create a Pull Subscription.

So erstellen Sie ein Pullabonnement für eine Mergeveröffentlichung, die FTP-Momentaufnahmeübermittlung verwendet

  1. Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_addmergepullsubscriptionaus. Geben Sie @publisher und @publication an.

  2. Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_addmergepullsubscription_agentaus. Geben Sie @publisher, @publisher_db und @publication, die Windows-Anmeldeinformationen, unter denen der Verteilungs-Agent auf dem Abonnenten für @job_login und @job_password ausgeführt wird, sowie einen true-Wert für @use_ftp an.

  3. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addmergesubscription aus, um das Pullabonnement zu registrieren. Weitere Informationen finden Sie unter Create a Pull Subscription.

So ändern Sie eine oder mehrere Einstellungen der FTP-Momentaufnahmeübermittlung für eine Momentaufnahme- oder Transaktionsveröffentlichung

  1. Führen Sie beim Verleger in der Veröffentlichungsdatenbank sp_changepublication aus. Geben Sie einen der folgenden Werte für @property und einen neuen Wert dieser Einstellung für @value an:

    • ftp_address : die Adresse des FTP-Servers, der für die Übermittlung der Momentaufnahme verwendet wird.

    • ftp_port – der vom FTP-Server verwendete Port.

    • ftp_subdirectory – das Unterverzeichnis des Standard-FTP-Verzeichnisses, das für den FTP-Snapshot verwendet wird.

    • ftp_login – der Anmeldename, der zum Herstellen einer Verbindung mit dem FTP-Server verwendet wird.

    • ftp_password – das Kennwort für die FTP-Anmeldung.

  2. (Optional) Wiederholen Sie Schritt 1 für jede zu ändernde FTP-Einstellung.

  3. (Optional) Um die Übermittlung von FTP-Momentaufnahmen zu deaktivieren, führen Sie sp_changepublication beim Publisher in der Veröffentlichungsdatenbank aus. Geben Sie einen enabled_for_internet-Wert für @property und einen false-Wert für @value an.

So ändern Sie die Einstellungen der FTP-Momentaufnahmeübermittlung für eine Mergeveröffentlichung

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_changemergepublicationaus. Geben Sie einen der folgenden Werte für @property und einen neuen Wert dieser Einstellung für @value an:

    • ftp_address – die Adresse des FTP-Servers, der für die Übermittlung der Momentaufnahme verwendet wird.

    • ftp_port – der vom FTP-Server verwendete Port.

    • ftp_subdirectory – das Unterverzeichnis des Standard-FTP-Verzeichnisses, das für den FTP-Snapshot verwendet wird.

    • ftp_login – der Anmeldename, der zum Herstellen einer Verbindung mit dem FTP-Server verwendet wird.

    • ftp_password – das Kennwort für die FTP-Anmeldung.

  2. (Optional) Wiederholen Sie Schritt 1 für jede zu ändernde FTP-Einstellung.

  3. Optional: Führen Sie in der Veröffentlichungsdatenbank beim Publisher sp_changemergepublication aus, um die Übermittlung von FTP-Momentaufnahmen zu deaktivieren. Geben Sie einen enabled_for_internet-Wert für @property und einen false-Wert für @value an.

Beispiele (Transact-SQL)

Im folgenden Beispiel wird eine Mergeveröffentlichung erstellt, die es Abonnenten ermöglicht, über FTP auf die Snapshotdaten zuzugreifen. Beim Zugreifen auf die FTP-Freigabe sollte der Abonnent eine sichere VPN-Verbindung verwenden. sqlcmd -Skriptvariablen werden verwendet, um Anmelde- und Kennwortwerte anzugeben. Weitere Informationen finden Sie unter Verwenden von sqlcmd mit Skriptvariablen.

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

Im folgenden Beispiel wird ein Abonnement für eine Mergeveröffentlichung erstellt, bei dem der Abonnent die Momentaufnahme über FTP abruft. Beim Zugreifen auf die FTP-Freigabe sollte der Abonnent eine sichere VPN-Verbindung verwenden. sqlcmd -Skriptvariablen werden verwendet, um Anmelde- und Kennwortwerte anzugeben. Weitere Informationen finden Sie unter Verwenden von sqlcmd mit Skriptvariablen.

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