FTP를 통해 스냅샷 배달
적용 대상: SQL Server
이 주제에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 FTP를 통해 스냅샷을 배달하는 방법을 설명합니다.
기본적으로 스냅샷은 UNC(범용 명명 규칙) 공유로 정의된 폴더에 저장됩니다. 복제를 사용하면 UNC 공유 대신 FTP(파일 전송 프로토콜) 공유를 지정할 수도 있습니다. FTP를 사용하려면 FTP 서버를 구성한 다음 FTP를 사용할 하나의 게시와 하나 이상의 구독을 구성합니다. FTP 서버 구성 방법은 인터넷 정보 서비스(IIS) 설명서를 참조하십시오. 게시에 FTP 정보를 지정하는 경우 해당 게시에 대한 구독은 기본적으로 FTP를 사용합니다. FTP는 IIS를 실행하는 컴퓨터가 방화벽에 의해 배포자와 분리되어 있는 경우에만 웹 동기화에 사용됩니다. 이 경우 FTP를 사용하여 배포자와 IIS를 실행하는 컴퓨터에서 스냅샷을 전송할 수 있습니다. (스냅샷은 항상 HTTPS를 사용하여 구독자에게 전송됩니다.)
Important
FTP 비밀번호를 저장해야 하고 웹 동기화를 사용하는 경우에 IIS를 실행하는 컴퓨터나 구독자에서 일반 텍스트로 FTP 서버에 비밀번호를 전송하므로 FTP 공유 대신 Microsoft Windows 인증 및 UNC 공유를 사용하는 것이 좋습니다. 또한 단일 계정이 스냅샷 공유에 대한 액세스를 제어하기 때문에 필터링된 병합 게시에 대한 구독자가 해당 데이터 파티션의 스냅샷 파일에만 액세스할 수 있는지 확인할 수 없습니다.
제한 사항
- 스냅샷 에이전트는 지정한 디렉터리에 대한 쓰기 권한이 있어야 하며 배포 에이전트 또는 병합 에이전트에 읽기 권한이 있어야 합니다. 끌어오기 구독을 사용하는 경우 공유 디렉터리를 \\ftpserver\home\snapshots와 같이 UNC(범용 명명 규칙) 경로로 지정해야 합니다. 자세한 내용은 스냅샷 폴더 보안 설정을 참조하세요.
필수 조건
- FTP(파일 전송 프로토콜)를 사용하여 스냅샷 파일을 전송하려면 먼저 FTP 서버를 구성해야 합니다. 자세한 내용은 Microsoft IIS(인터넷 정보 서비스) 설명서를 참조하세요.
보안
보안을 향상하려면 인터넷을 통해 FTP 스냅샷 배달을 사용할 때 VPN(가상 사설망)을 구현하는 것이 좋습니다. 자세한 내용은 VPN을 사용하여 인터넷을 통해 데이터 게시를 참조하세요.
보안 모범 사례로 FTP 서버에 익명 로그인을 허용하지 않습니다. 스냅샷 에이전트는 지정한 디렉터리에 대한 쓰기 권한이 있어야 하며 배포 에이전트 또는 병합 에이전트에 읽기 권한이 있어야 합니다. 끌어오기 구독을 사용하는 경우 공유 디렉터리를 \\ftpserver\home\snapshots와 같이 UNC(범용 명명 규칙) 경로로 지정해야 합니다. 자세한 내용은 스냅샷 폴더 보안 설정을 참조하세요.
가능하면 런타임 시 사용자에게 자격 증명을 입력하라는 메시지가 표시됩니다. 스크립트 파일에 자격 증명을 저장하는 경우 파일을 보호해야 합니다.
SQL Server Management Studio 사용
FTP 서버를 구성한 후 게시 속성 <게시> 대화 상자에서 이 서버에 디렉터리 및 보안 정보를 지정합니다. 이 대화 상자에 액세스하는 방법은 게시 속성 보기 및 수정을 참조하세요.
FTP 정보를 지정하려면
게시 속성 - <게시> 대화 상자에서 다음 페이지 중 하나에서 구독자가 FTP를 사용하여 스냅샷 파일을 다운로드할 수 있도록 허용을 선택합니다.
Microsoft SQL Server 2005(9.x) 이전 버전을 실행하는 게시자에 대한 스냅샷 및 트랜잭션 게시 및 병합 게시에 대한 FTP 스냅샷 페이지입니다.
SQL Server 2005(9.x) 이상을 실행하는 게시자의 병합 게시에 대한 FTP 스냅샷 및 인터넷 페이지입니다.
FTP 서버 이름, 포트 번호, FTP 루트 폴더에서의 경로, 로그인및 암호에 대한 값을 지정합니다.
예를 들어 FTP 서버 루트가 \\ftpserver\home이고 스냅샷을 \\ftpserver\home\snapshots에 저장하려면 FTP 루트 폴더에서의 경로 속성에 \snapshots\ftp를 지정합니다(복제는 스냅샷 파일을 만들 때 스냅샷 폴더 경로에 'ftp'를 추가합니다).
스냅샷 에이전트가 2단계에서 지정한 디렉터리에 스냅샷 파일을 작성하도록 지정합니다. 예를 들어 스냅샷 에이전트에서 \\ftpserver\home\snapshots\ftp에 스냅샷 파일을 쓰도록 하려면 다음 두 위치 중 하나에서 \\ftpserver\home\snapshots 경로를 지정해야 합니다.
- 이 게시와 연결된 배포자의 기본 스냅샷 위치입니다.
- 이 게시의 대체 스냅샷 폴더 위치입니다. 스냅샷이 압축된 경우 대체 위치가 필요합니다.
스냅샷 폴더 위치 속성을 수정하는 방법에 대한 자세한 내용은 스냅샷 옵션을 참조하세요.
- 확인을 선택합니다.
Transact-SQL 사용
FTP 서버에서 스냅샷 파일을 사용할 수 있도록 하는 옵션을 설정할 수 있으며 복제 저장 프로시저를 사용하여 이러한 FTP 설정을 프로그래밍 방식으로 수정할 수 있습니다. 사용되는 절차는 게시 유형에 따라 달라집니다. FTP 스냅샷 배달은 끌어오기 구독에서만 사용됩니다.
스냅샷 또는 트랜잭션 게시에 FTP 스냅샷 배달을 사용하도록 설정하려면
게시 데이터베이스의 게시자에서 sp_addpublication을 실행합니다.
@publication
을 지정하고,@enabled_for_internet
에 true 값을 지정하며, 다음 매개 변수에 적절한 값을 지정합니다.@ftp_address
- 스냅샷을 제공하는 데 사용되는 FTP 서버의 주소입니다.(선택 사항)
@ftp_port
- FTP 서버에서 사용하는 포트입니다.(선택 사항)
@ftp_subdirectory
- FTP 로그인에 할당된 기본 FTP 디렉터리의 하위 디렉터리입니다. 예를 들어 FTP 서버 루트가 \\ftpserver\home이고 스냅샷을 \\ftpserver\home\snapshots에 저장하려면 \snapshots\ftp를@ftp_subdirectory
에 지정합니다(복제는 스냅샷 파일을 만들 때 스냅샷 폴더 경로에 'ftp'를 추가합니다).(옵션)
@ftp_login
- FTP 서버에 연결할 때 사용되는 로그인 계정입니다.(옵션)
@ftp_password
- FTP 로그인의 암호입니다.
이렇게 하면 FTP를 사용하는 게시가 만들어집니다. 자세한 내용은 게시물 만들기를 참조하세요.
병합 게시에 대한 FTP 스냅샷 배달을 설정하려면
게시 데이터베이스의 게시자에서 sp_addmergepublication을 실행합니다.
@publication
을 지정하고,@enabled_for_internet
에 true 값을 지정하며 다음 매개 변수에 적절한 값을 지정합니다.@ftp_address
- 스냅샷을 제공하는 데 사용되는 FTP 서버의 주소입니다.(선택 사항)
@ftp_port
- FTP 서버에서 사용하는 포트입니다.(선택 사항)
@ftp_subdirectory
- FTP 로그인에 할당된 기본 FTP 디렉터리의 하위 디렉터리입니다. 예를 들어 FTP 서버 루트가 \\ftpserver\home이고 스냅샷을 \\ftpserver\home\snapshots에 저장하려면 \snapshots\ftp를@ftp_subdirectory
에 지정합니다(복제는 스냅샷 파일을 만들 때 스냅샷 폴더 경로에 'ftp'를 추가합니다).(옵션)
@ftp_login
- FTP 서버에 연결할 때 사용되는 로그인 계정입니다.(옵션)
@ftp_password
- FTP 로그인의 암호입니다.
이렇게 하면 FTP를 사용하는 게시가 만들어집니다. 자세한 내용은 게시물 만들기를 참조하세요.
FTP 스탭샷 배달을 사용하는 스냅샷 또는 트랜잭션 게시에 끌어오기 구독을 만들려면
구독 데이터베이스의 구독자에서 sp_addpullsubscription을 실행합니다.
@publisher
및@publication
를 지정합니다.- 구독 데이터베이스의 구독자에서 sp_addpullsubscription_agent 실행합니다.
@publisher
,@publisher_db
,@publication
을 지정하고,@job_login
및@job_password
에 구독자에서 배포 에이전트가 실행되는 Microsoft Windows 자격 증명을 지정하며, true 값을@use_ftp
에 지정합니다.
- 구독 데이터베이스의 구독자에서 sp_addpullsubscription_agent 실행합니다.
게시 데이터베이스의 게시자에서 sp_addsubscription을 실행하여 끌어오기 구독을 등록합니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
FTP 스냅샷 배달을 사용하는 병합 게시에 끌어오기 구독을 만들려면
구독 데이터베이스의 구독자에서 sp_addmergepullsubscription을 실행합니다.
@publisher
및@publication
를 지정합니다.구독 데이터베이스의 구독자에서 sp_addmergepushsubscription_agent를 실행합니다.
@publisher
,@publisher_db
,@publication
을 지정하고,@job_login
및@job_password
에 구독자에서 배포 에이전트가 실행되는 Windows 자격 증명을 지정하며,true
값을@use_ftp
에 지정합니다.게시 데이터베이스의 게시자에서 sp_addmergesubscription를 실행하여 끌어오기 구독을 등록합니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
스냅샷 또는 트랜잭션 게시에 대한 하나 이상의 FTP 스냅샷 배달 설정을 변경하려면
게시 데이터베이스의 게시자에서 sp_changepublication을 실행합니다.
@property
에 다음 중 한 가지 값을 지정하고, 이 설정의 새 값을@value
에 지정합니다.ftp_address
- 스냅샷을 제공하는 데 사용되는 FTP 서버의 주소입니다.ftp_port
- FTP 서버에서 사용하는 포트입니다.ftp_subdirectory
- FTP 스냅샷에 사용되는 기본 FTP 디렉터리의 하위 디렉터리입니다.ftp_login
- FTP 서버에 연결하는 데 사용되는 로그인입니다.ftp_password
- FTP 로그인의 비밀번호입니다.
(선택 사항) 변경되는 각 FTP 설정에 대해 1단계를 반복합니다.
(옵션) FTP 스냅샷 배달을 해제하려면 게시 데이터베이스의 게시자에서 sp_changepublication 을 실행합니다. 이때
@property
에enabled_for_internet
값,@value
에false
값을 지정합니다.
병합 게시에 대한 FTP 스냅샷 배달 설정을 변경하려면
게시 데이터베이스의 게시자에서 sp_changemergepublication을 실행합니다.
@property
에 다음 중 한 가지 값을 지정하고, 이 설정의 새 값을@value
에 지정합니다.ftp_address
- 스냅샷을 제공하는 데 사용되는 FTP 서버의 주소입니다.ftp_port
- FTP 서버에서 사용하는 포트입니다.ftp_subdirectory
- FTP 스냅샷에 사용되는 기본 FTP 디렉터리의 하위 디렉터리입니다.ftp_login
- FTP 서버에 연결하는 데 사용되는 로그인입니다.ftp_password
- FTP 로그인의 비밀번호입니다.
(선택 사항) 변경되는 각 FTP 설정에 대해 1단계를 반복합니다.
(옵션) FTP 스냅샷 배달을 해제하려면 게시 데이터베이스의 게시자에서 sp_changemergepublication을 실행합니다. 이때
@property
에enabled_for_internet
값,@value
에false
값을 지정합니다.
예시(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