Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Dit onderwerp beschrijft hoe een snapshot via FTP in SQL Server geleverd kunt worden met behulp van SQL Server Management Studio of Transact-SQL.
Standaard worden snapshots opgeslagen in mappen die worden gedefinieerd als Universal Naming Convention (UNC) shares. Replicatie stelt je ook in staat om een File Transfer Protocol (FTP) share te specificeren in plaats van een UNC-share. Om FTP te gebruiken, moet je een FTP-server configureren en vervolgens een publicatie en één of meer abonnementen configureren voor het gebruik van FTP. Voor informatie over hoe een FTP-server te configureren, zie de documentatie van Internet Information Services (IIS). Als je FTP-informatie voor een publicatie opgeeft, gebruiken abonnementen op die publicatie standaard FTP. FTP wordt alleen gebruikt met websynchronisatie wanneer de computer die IIS draait door een firewall van de Distributor wordt gescheiden. In dit geval kan FTP worden gebruikt om de snapshot over te dragen van de distributeur en de computer die IIS draait. (De snapshot wordt altijd overgedragen aan de abonnee via HTTPS.)
Important
We raden aan om Microsoft Windows Authentication en een UNC share te gebruiken in plaats van een FTP-share, omdat FTP-wachtwoorden moeten worden opgeslagen, en het wachtwoord wordt verzonden vanaf de abonnee of de computer die IIS draait wanneer deze websynchronisatie gebruikt naar de FTP-server in platte tekst. Bovendien, omdat één account de toegang tot de snapshot-share beheert, is het niet mogelijk om te garanderen dat een abonnee van een gefilterde mergepublicatie alleen toegang heeft tot de snapshotbestanden vanuit hun datapartitie.
Beperkingen en beperkingen
- De Snapshot Agent moet schrijfrechten hebben voor de door u gespecificeerde map, en de Distribution Agent of Merge Agent moeten leesrechten hebben. Als pull-abonnementen worden gebruikt, moet je een gedeelde map specificeren als een universal naming convention (UNC) pad, zoals \\ftpserver\home\snapshots. Voor meer informatie, zie de map Momentopname beveiligen.
Prerequisites
- Om snapshotbestanden over te zetten met File Transfer Protocol (FTP), moet je eerst een FTP-server configureren. Voor meer informatie, zie de Microsoft Internet Information Services (IIS) documentatie.
Security
Om de beveiliging te verbeteren, raden we aan om een virtueel privénetwerk (VPN) te implementeren wanneer je FTP-snapshotlevering via het internet gebruikt. Zie Gegevens publiceren via internet via VPN voor meer informatie.
Als beveiligingsbest practice staat je geen anonieme inloggegevens toe op de FTP-server. De Snapshot Agent moet schrijfrechten hebben voor de door u gespecificeerde map, en de Distribution Agent of Merge Agent moeten leesrechten hebben. Als pull-abonnementen worden gebruikt, moet je een gedeelde map specificeren als een universal naming convention (UNC) pad, zoals \\ftpserver\home\snapshots. Voor meer informatie, zie de map Momentopname beveiligen.
Vraag gebruikers indien mogelijk om tijdens runtime hun inloggegevens in te voeren. Als je inloggegevens opslaat in een scriptbestand, moet je het bestand beveiligen.
SQL Server Management Studio gebruiken
Nadat de FTP-server is geconfigureerd, specificeer je directory- en beveiligingsinformatie voor deze server in het dialoogvenster Publicatie-eigenschappen<>. Zie Publicatie-eigenschappen weergeven en wijzigen voor meer informatie over het openen van dit dialoogvenster.
Om FTP-informatie te specificeren
Selecteer in het dialoogvenster Publicatie-eigenschappen - <Publicatie> ' Abonnees toestaan snapshotbestanden te downloaden via FTP vanaf een van de volgende pagina's:
De FTP Snapshot-pagina, voor snapshot- en transactionele publicaties, en samenvoegpublicaties voor uitgevers die versies draaiden vóór Microsoft SQL Server 2005 (9.x).
De pagina FTP-snapshot en internet, voor samenvoegpublicaties van Publishers waarop SQL Server 2005 (9.x) of hoger wordt uitgevoerd.
Specificeer waarden voor FTP-servernaam, poortnummer, pad vanuit de FTP-hoofdmap, Login en Wachtwoord.
Als bijvoorbeeld de FTP-server root \\ftpserver\home is en je snapshots wilt opslaan bij \\ftpserver\home\snapshots, specificeer \snapshots\ftp voor het property Path vanuit de FTP-rootmap (replicatie voegt 'ftp' toe aan het snapshot-map pad wanneer het snapshotbestanden aanmaakt).
Specificeer dat de Snapshot Agent de snapshotbestanden naar de map moet schrijven die in stap 2 is opgegeven. Om bijvoorbeeld de Snapshot Agent de snapshotbestanden te laten schrijven naar \\ftpserver\home\snapshots\ftp, moet je het pad \\ftpserver\home\snapshots op een van twee plaatsen specificeren:
- De standaard snapshotlocatie voor de distributeur die aan deze publicatie is gekoppeld.
- Een alternatieve maplocatie voor momentopnamen voor deze publicatie. Een alternatieve locatie is vereist als de snapshot wordt gecomprimeerd.
Voor meer informatie over het wijzigen van de locatie-eigenschappen van de snapshotmap, zie Snapshot-opties.
- Kies OK.
Transact-SQL gebruiken
De optie om snapshotbestanden beschikbaar te maken op een FTP-server kan worden ingesteld en deze FTP-instellingen kunnen programmatisch worden aangepast met replicatie-opgeslagen procedures. De gebruikte procedure hangt af van het type publicatie. FTP snapshot delivery wordt alleen gebruikt bij pull subscriptions.
FTP-snapshotlevering inschakelen voor een snapshot- of transactionele publicatie
Voer bij de Publisher op de publicatiedatabase sp_addpublication uit. Geef
@publicationop, een waarde van true voor@enabled_for_internet, en geschikte waarden voor de volgende parameters:@ftp_address- het adres van de FTP-server die werd gebruikt om de snapshot te leveren.(Optioneel)
@ftp_port- de poort die door de FTP-server wordt gebruikt.(Optioneel)
@ftp_subdirectory- de submap van de standaard FTP-directory die is toegewezen aan een FTP-login. Als bijvoorbeeld de FTP-server root \\ftpserver\home is en je wilt dat snapshots worden opgeslagen bij \\ftpserver\home\snapshots, specificeer \snapshots\ftp voor@ftp_subdirectory(replicatie voegt 'ftp' toe aan het snapshotmappad wanneer het snapshotbestanden aanmaakt).(Optioneel)
@ftp_login- een inlogaccount dat wordt gebruikt bij het verbinden met de FTP-server.(Optioneel)
@ftp_password- het wachtwoord voor de FTP-login.
Dit creëert een publicatie die FTP gebruikt. Zie Een publicatie maken voor meer informatie.
Om FTP-snapshotlevering mogelijk te maken voor een samengevoegde publicatie
Voer sp_addmergepublication uit op de Publisher-server in de publicatiedatabase. Geef
@publicationop, een waarde van true voor@enabled_for_interneten passende waarden voor de volgende parameters:@ftp_address- het adres van de FTP-server die werd gebruikt om de snapshot te leveren.(Optioneel)
@ftp_port- de poort die door de FTP-server wordt gebruikt.(Optioneel)
@ftp_subdirectory- de submap van de standaard FTP-directory die is toegewezen aan een FTP-login. Als bijvoorbeeld de FTP-server root \\ftpserver\home is en je wilt dat snapshots worden opgeslagen bij \\ftpserver\home\snapshots, specificeer \snapshots\ftp voor@ftp_subdirectory(replicatie voegt 'ftp' toe aan het snapshotmappad wanneer het snapshotbestanden aanmaakt).(Optioneel)
@ftp_login- een inlogaccount dat wordt gebruikt bij het verbinden met de FTP-server.(Optioneel)
@ftp_password- het wachtwoord voor de FTP-login.
Dit creëert een publicatie die FTP gebruikt. Zie Een publicatie maken voor meer informatie.
Een pull-abonnement maken voor een snapshot- of transactionele publicatie die gebruikmaakt van FTP-bezorging van snapshots
Voer bij de abonnee in de abonnementsdatabase sp_addpullsubscription uit. Specificeer
@publisheren@publication.- Voer sp_addpullsubscription_agent uit bij de abonnee in de abonnementsdatabase. Geef
@publisher,@publisher_db,@publication, de Microsoft Windows-aanmeldingsgegevens op waaronder de Distribution Agent op de Abonnee wordt uitgevoerd voor@job_loginen@job_password, en een waarde van true voor@use_ftp.
- Voer sp_addpullsubscription_agent uit bij de abonnee in de abonnementsdatabase. Geef
Voer op de Publisher in de publicatiedatabase sp_addsubscription uit om het pull-abonnement te registreren. Zie Een pull-abonnement maken voor meer informatie.
Om een pull-abonnement aan te maken op een merge-publicatie die FTP-snapshotlevering gebruikt
Voer bij de Abonnee op de abonnementsdatabase sp_addmergepullsubscription uit. Specificeer
@publisheren@publication.Voer sp_addmergepullsubscription_agent uit bij de abonnee in de abonnementsdatabase. Specificeer
@publisher,@publisher_db,@publication, de Windows-inloggegevens waaronder de Distribution Agent bij de abonnee draait voor@job_loginen@job_password, en een waarde vantrue.@use_ftpVoer bij de Publisher op de publicatiedatabase sp_addmergesubscription uit om het pull-abonnement te registreren. Zie Een pull-abonnement maken voor meer informatie.
Om één of meer FTP-snapshot-leveringsinstellingen voor een snapshot of transactionele publicatie te wijzigen
Voer op de Publisher in de publicatiedatabase sp_changepublication uit. Specificeer een van de volgende waarden voor
@propertyen een nieuwe waarde van deze instelling voor@value:ftp_address- het adres van de FTP-server die werd gebruikt om de snapshot te leveren.ftp_port- de poort die door de FTP-server wordt gebruikt.ftp_subdirectory- de submap van de standaard FTP-directory die wordt gebruikt voor de FTP-snapshot.ftp_login- een login die wordt gebruikt om verbinding te maken met de FTP-server.ftp_password- het wachtwoord voor de FTP-login.
(Optioneel) Herhaal stap 1 voor elke FTP-instelling die wordt aangepast.
(Optioneel) Als u de levering van FTP-snapshots wilt uitschakelen, voert u sp_changepublication uit op de Publisher in de publicatiedatabase. Specificeer een waarde van
enabled_for_internetvoor@propertyen een waarde vanfalsevoor@value.
Om FTP-snapshot-leveringsinstellingen voor een mergepublicatie te wijzigen
Voer op de Publisher in de publicatiedatabase sp_changemergepublication uit. Specificeer een van de volgende waarden voor
@propertyen een nieuwe waarde van deze instelling voor@value:ftp_address- het adres van de FTP-server die werd gebruikt om de snapshot te leveren.ftp_port- de poort die door de FTP-server wordt gebruikt.ftp_subdirectory- de submap van de standaard FTP-directory die wordt gebruikt voor de FTP-snapshot.ftp_login- een login die wordt gebruikt om verbinding te maken met de FTP-server.ftp_password- het wachtwoord voor de FTP-login.
(Optioneel) Herhaal stap 1 voor elke FTP-instelling die wordt aangepast.
(Optioneel) Om de levering van FTP-snapshots uit te schakelen, voert u sp_changemergepublication uit op de Publisher in de publicatiedatabase. Specificeer een waarde van
enabled_for_internetvoor@propertyen een waarde vanfalsevoor@value.
Voorbeelden (Transact-SQL)
Het volgende voorbeeld creëert een mergepublicatie waarmee abonnees toegang krijgen tot de snapshotgegevens via FTP. De abonnee moet een beveiligde VPN-verbinding gebruiken bij het openen van de FTP-share. SQLCMD-scriptvariabelen worden gebruikt om inlog- en wachtwoordwaarden te leveren. Voor meer informatie, zie Gebruik sqlcmd met scriptvariabelen.
-- 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
Het volgende voorbeeld creëert een abonnement op een samengevoegde publicatie, waarbij de abonnee de snapshot verkrijgt via FTP. De abonnee moet een beveiligde VPN-verbinding gebruiken bij het openen van de FTP-share. SQLCMD-scriptvariabelen worden gebruikt om inlog- en wachtwoordwaarden te leveren. Voor meer informatie, zie Gebruik sqlcmd met scriptvariabelen.
-- 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