Доставка моментального снимка через FTP
В этом разделе описывается доставка snapshot через FTP в SQL Server 2014 с помощью SQL Server Management Studio или Transact-SQL.
Ограничения
- Агент моментальных снимков должен иметь разрешения на запись в указанный каталог, а агент распространителя или агент слияния должен иметь разрешения на чтение из этого каталога. При использовании подписок по запросу следует указать в качестве пути, соответствующего соглашению об универсальном назначении имен (UNC), общий каталог, например \\ftpserver\home\snapshots. Дополнительные сведения см. в статье Организация безопасности папки моментальных снимков.
Предварительные требования
- Для передачи файлов моментальных снимков с использованием протокола FTP (File Transfer Protocol) необходимо настроить FTP-сервер. Дополнительные сведения см. в документации служб IIS Microsoft .
Безопасность
В целях повышения безопасности рекомендуется реализовать частную виртуальную сеть (VPN) при доставке моментальных снимков по протоколу FTP через Интернет. Дополнительные сведения см. в статье Публикация данных через Интернет с помощью виртуальных частных сетей.
Для обеспечения безопасности рекомендуется запретить анонимный вход на FTP-сервер. Агент моментальных снимков должен иметь разрешения на запись в указанный каталог, а агент распространителя или агент слияния должен иметь разрешения на чтение из этого каталога. При использовании подписок по запросу следует указать в качестве пути, соответствующего соглашению об универсальном назначении имен (UNC), общий каталог, например \\ftpserver\home\snapshots. Дополнительные сведения см. в статье Организация безопасности папки моментальных снимков.
По возможности запрашивайте у пользователей учетные данные в среде выполнения приложения. Если учетные данные хранятся в файле скрипта, необходимо защитить этот файл.
Использование среды SQL Server Management Studio
После настройки FTP-сервера укажите сведения о каталоге и безопасности для этого сервера в диалоговом окне Публикация свойств <публикации> . Дополнительные сведения о доступе к этому диалоговому окну см. в разделе Просмотр и изменение свойств публикации.
Указание сведений FTP
- В диалоговом окне Свойства публикации — <публикация> выберите Разрешить подписчикам скачивать snapshot файлы с помощью FTP на одной из следующих страниц:
- Страница моментальных снимков FTP для публикаций snapshot и транзакций, а также публикаций слиянием для издателей, работающих с версиями до Microsoft SQL Server 2005.
- Страница Моментальный снимок FTP и Интернет для публикаций слиянием от издателей, работающих SQL Server 2005 или более поздней версии.
- Укажите значения для свойств Имя FTP-сервера, Номер порта, Путь из корневой папки FTP, Имя входаи Пароль.
Например, если корневой каталог FTP-сервера — \\ftpserver\home и вы хотите, чтобы моментальные снимки хранились в папке \\ftpserver\home\snapshots, укажите \snapshots\ftp в качестве свойства Path из корневой папки FTP (репликация добавляет "ftp" в путь к папке snapshot при создании snapshot файлов). - Укажите, что агент моментальных снимков должен записывать файлы моментальных снимков в каталог, указанный на шаге 2. Например, чтобы агент моментальных снимков записывал файлы моментальных снимков в «\\ftpserver\home\snapshots\ftp», следует указать путь «\\ftpserver\home\snapshots» в одном из двух мест:
- Расположение моментальных снимков по умолчанию для распространителя, связанного с этой публикацией.
Дополнительные сведения об указании расположения snapshot по умолчанию см. в разделе Указание расположения моментального снимка по умолчанию. - Альтернативное расположение папки моментальных снимков для данной публикации. Если моментальный снимок сжимается, необходимо альтернативное расположение папки.
Введите путь в текстовое поле Поместить файлы в следующую папку на странице Моментальный снимок диалогового окна Свойства публикации — <публикация> .
- Расположение моментальных снимков по умолчанию для распространителя, связанного с этой публикацией.
- Нажмите кнопку ОК.
Использование Transact-SQL
Можно установить параметр, который сделает доступными файлы моментальных снимков на сервере, а настройки FTP можно изменить программно с помощью хранимых процедур репликации. Эта процедура зависит от типа публикации. Доставка моментальных снимков по протоколу FTP используется только с подписками по запросу.
Включение доставки моментальных снимков по протоколу FTP для публикации моментальных снимков или публикации транзакций
На издателе в базе данных публикации выполните хранимую процедуру sp_addpublication. Укажите @publication, значение
true
для @enabled_for_internet и соответствующие значения для следующих параметров:- @ftp_address — адрес FTP-сервера, используемого для доставки snapshot.
- @ftp_port — порт, используемый FTP-сервером (необязательно);
- @ftp_subdirectory — вложенный каталог в каталоге FTP по умолчанию, назначенном для имени входа на FTP-сервер (необязательно). Например, если корнем FTP-сервера является \\ftpserver\home и требуется хранить моментальные снимки в папке \\ftpserver\home\snapshots, укажите \snapshots\ftp для @ftp_subdirectory (репликация добавляет "ftp" в путь к папке snapshot при создании snapshot файлов).
- @ftp_login — учетная запись входа, используемая для соединения с FTP-сервером (необязательно);
- @ftp_password — пароль для имени входа на FTP-сервер (необязательно).
Таким образом создается публикация, использующая протокол FTP. Дополнительные сведения см. в разделе Create a Publication.
Включение доставки моментальных снимков по протоколу FTP для публикации слиянием
На издателе в базе данных публикации выполните процедуру sp_addmergepublication. Укажите @publication, значение
true
для @enabled_for_internet и соответствующие значения для следующих параметров:- @ftp_address — адрес FTP-сервера, используемого для доставки snapshot.
- @ftp_port — порт, используемый FTP-сервером (необязательно);
- @ftp_subdirectory — вложенный каталог в каталоге FTP по умолчанию, назначенном для имени входа на FTP-сервер (необязательно). Например, если корнем FTP-сервера является \\ftpserver\home и требуется хранить моментальные снимки в папке \\ftpserver\home\snapshots, укажите \snapshots\ftp для @ftp_subdirectory (репликация добавляет "ftp" в путь к папке snapshot при создании snapshot файлов).
- @ftp_login — учетная запись входа, используемая для соединения с FTP-сервером (необязательно);
- @ftp_password — пароль для имени входа на FTP-сервер (необязательно).
Таким образом создается публикация, использующая протокол FTP. Дополнительные сведения см. в разделе Create a Publication.
Создание подписки по запросу на публикацию моментальных снимков или публикацию транзакций, использующую доставку моментальных снимков по протоколу FTP
На подписчике в базе данных подписки выполните хранимую процедуру sp_addpullsubscription. Укажите @publisher и @publication.
- На подписчике в базе данных подписки выполните хранимую процедуру sp_addpullsubscription_agent. Укажите @publisher, @publisher_db, @publication учетные данные Microsoft Windows, с которыми выполняется агент распространения на подписчике для @job_login и @job_password, и значение
true
для @use_ftp.
- На подписчике в базе данных подписки выполните хранимую процедуру sp_addpullsubscription_agent. Укажите @publisher, @publisher_db, @publication учетные данные Microsoft Windows, с которыми выполняется агент распространения на подписчике для @job_login и @job_password, и значение
Чтобы зарегистрировать подписку по запросу, выполните на издателе в базе данных публикации хранимую процедуру sp_addsubscription . Дополнительные сведения см. в статье Создание подписки по запросу.
Создание подписки по запросу на публикацию слиянием, использующую доставку моментальных снимков по протоколу FTP
- В базе данных подписки на издателе выполните процедуру sp_addmergepushsubscription_agent. Укажите @publisher и @publication.
- На подписчике в базе данных подписки выполните хранимую процедуру sp_addmergepullsubscription_agent. Укажите @publisher, @publisher_db@publication, учетные данные Windows, с которыми выполняется агент распространения на подписчике для @job_login и @job_password, и значение
true
для @use_ftp. - Чтобы зарегистрировать подписку по запросу, выполните на издателе в базе данных публикации хранимую процедуру sp_addmergesubscription . Дополнительные сведения см. в статье Создание подписки по запросу.
Изменение одной или нескольких доставок моментальных снимков по протоколу FTP для публикации моментальных снимков или публикации транзакций
На издателе в базе данных публикации выполните процедуру sp_changepublication. Выберите одно из следующих значений в параметре @property и укажите новое значение этого параметра в параметре @value:
ftp_address
— адрес FTP-сервера, который используется для доставки моментального снимка;ftp_port
— порт FTP-сервера;ftp_subdirectory
— подкаталог FTP-каталога по умолчанию, в котором хранится моментальный снимок;ftp_login
— имя входа для подключения к FTP-серверу;ftp_password
— пароль для имени входа.
Повторите шаг 1 для каждого изменяемого параметра FTP-соединения (необязательно).
Чтобы отключить доставку моментальных снимков по протоколу FTP, выполните на издателе в базе данных публикации хранимую процедуру sp_changepublication (необязательно). Укажите значение
enabled_for_internet
для параметра @property и значениеfalse
для параметра @value.
Изменение настроек доставки моментальных снимков по протоколу FTP для публикации слиянием
В базе данных публикации на издателе выполните процедуру sp_changemergepublication. Выберите одно из следующих значений в параметре @property и укажите новое значение этого параметра в параметре @value:
ftp_address
— адрес FTP-сервера, который используется для доставки моментального снимка;ftp_port
— порт FTP-сервера;ftp_subdirectory
— подкаталог FTP-каталога по умолчанию, в котором хранится моментальный снимок;ftp_login
— имя входа для подключения к FTP-серверу;ftp_password
— пароль для имени входа.
Повторите шаг 1 для каждого изменяемого параметра FTP-соединения (необязательно).
Чтобы отключить доставку моментальных снимков по протоколу FTP, выполните на издателе в базе данных публикации хранимую процедуру sp_changemergepublication (необязательно). Укажите значение
enabled_for_internet
для параметра @property и значениеfalse
для параметра @value.
Примеры (Transact-SQL)
В следующем примере создается публикация слиянием, позволяющая подписчикам получить доступ к данным моментального снимка с помощью протокола FTP. Для доступа к общей папке FTP подписчик должен использовать защищенное VPN-соединение. Для передачи значений имени входа и пароля используются переменные скриптовsqlcmd . Дополнительные сведения см. в статье Использование программы sqlcmd с переменными скрипта.
-- 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
В следующем примере создается подписка на публикацию слиянием, в которой подписчик получает моментальный снимок с помощью протокола FTP. Для доступа к общей папке FTP подписчик должен использовать защищенное VPN-соединение. Для передачи значений имени входа и пароля используются переменные скриптовsqlcmd . Дополнительные сведения см. в статье Использование программы sqlcmd с переменными скрипта.
-- 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
См. также:
Replication System Stored Procedures Concepts
Передача моментальных снимков через FTP
Изменение свойств публикации и статьи
Инициализация подписки с помощью моментального снимка