Share via


Vorgehensweise: Übermitteln eines Snapshots über FTP (Replikationsprogrammierung mit Transact-SQL)

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

SicherheitshinweisSicherheitshinweis

Implementieren Sie ein virtuelles privates Netzwerk (VPN), wenn Sie FTP-Snapshotü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.

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

  • Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addpublication. Geben Sie @publication, den Wert true 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 des Snapshots 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 Snapshots in \\ftpserver\home\snapshots gespeichert werden sollen, geben Sie \snapshots\ftp für @ftp_subdirectory an (von der Replikation wird beim Erstellen der Snapshotdateien 'ftp' an den Pfad des Snapshotordners 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.

      SicherheitshinweisSicherheitshinweis

      Lassen Sie als bewährte Sicherheitsmethode keine anonymen Anmeldungen am FTP-Server zu.

    HinweisHinweis

    Der Snapshot-Agent muss Schreibberechtigungen für das angegebene Verzeichnis und der Verteilungs-Agent oder Merge-Agent muss Leseberechtigungen besitzen. 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 Snapshotordners.

    Dadurch wird eine Veröffentlichung erstellt, die FTP verwendet. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer Veröffentlichung (Replikationsprogrammierung mit Transact-SQL).

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

  • Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addmergepublication aus. Geben Sie @publication, den Wert true 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 des Snapshots 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 Snapshots in \\ftpserver\home\snapshots gespeichert werden sollen, geben Sie \snapshots\ftp für @ftp_subdirectory an (von der Replikation wird beim Erstellen der Snapshotdateien 'ftp' an den Pfad des Snapshotordners 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.

      SicherheitshinweisSicherheitshinweis

      Lassen Sie als bewährte Sicherheitsmethode keine anonymen Anmeldungen am FTP-Server zu.

    HinweisHinweis

    Der Snapshot-Agent muss Schreibberechtigungen für das angegebene Verzeichnis und der Verteilungs-Agent oder Merge-Agent muss Leseberechtigungen besitzen. 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 Snapshotordners.

    Dadurch wird eine Veröffentlichung erstellt, die FTP verwendet. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer Veröffentlichung (Replikationsprogrammierung mit Transact-SQL).

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

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

    • Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_addpullsubscription_agent aus. 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 auf dem Verleger für die Veröffentlichungsdatenbank sp_addsubscription aus, um das Pullabonnement zu registrieren. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines Pullabonnements (Replikationsprogrammierung mit Transact-SQL).

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

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

  2. Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_addmergepullsubscription_agent aus. Geben Sie @publisher, @publisher_db, @publication, die 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.

  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 Vorgehensweise: Erstellen eines Pullabonnements (Replikationsprogrammierung mit Transact-SQL).

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

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

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

    • ftp_port - der vom FTP-Server verwendete Port.

    • ftp_subdirectory - das Unterverzeichnis des einer FTP-Anmeldung zugewiesenen Standard-FTP-Verzeichnisses.

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

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

    SicherheitshinweisSicherheitshinweis

    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.

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

  3. (Optional) Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_changepublication aus, um die FTP-Snapshotübermittlung zu deaktivieren. Geben Sie den Wert enabled_for_internet für @property und den Wert false für @value an.

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

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

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

    • ftp_port - der vom FTP-Server verwendete Port.

    • ftp_subdirectory - das Unterverzeichnis des einer FTP-Anmeldung zugewiesenen Standard-FTP-Verzeichnisses.

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

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

    SicherheitshinweisSicherheitshinweis

    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.

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

  3. (Optional) Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_changemergepublication aus, um die FTP-Snapshotübermittlung zu deaktivieren. Geben Sie den Wert enabled_for_internet für @property und den Wert false für @value an.

Beispiel

Im folgenden Beispiel wird eine Mergeveröffentlichung erstellt, die Abonnenten ermöglicht, über FTP auf die Snapshotdaten zuzugreifen. Der Abonnent sollte für den Zugriff auf die FTP-Freigabe eine sichere VPN-Verbindung verwenden. Die Werte für den Anmeldenamen und das Kennwort werden mithilfe von sqlcmd-Skriptvariablen bereitgestellt. 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 den Snapshot über FTP abruft. Der Abonnent sollte für den Zugriff auf die FTP-Freigabe eine sichere VPN-Verbindung verwenden. Die Werte für den Anmeldenamen und das Kennwort werden mithilfe von sqlcmd-Skriptvariablen bereitgestellt. 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