이 항목에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server 2014에서 FTP를 통해 스냅샷을 전달하는 방법을 설명합니다.
한계 및 제한사항
- 스냅샷 에이전트에는 지정한 디렉터리에 대한 쓰기 권한이 있어야 하며 배포 에이전트 또는 병합 에이전트에는 읽기 권한이 있어야 합니다. 끌어오기 구독을 사용하는 경우 공유 디렉터리를 \\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 이전 버전을 사용하는 게시자에 대한 스냅샷 및 트랜잭션 게시, 그리고 병합 게시를 위한 FTP 스냅샷 페이지입니다.
- FTP 스냅샷 및 인터넷 페이지는 SQL Server 2005 이상을 실행하는 게시자의 병합 게시용입니다.
-
FTP 서버 이름, 포트 번호, FTP 루트 폴더의 경로, 로그인 및 암호 값을 지정합니다.
예를 들어 FTP 서버 루트가 \\ftpserver\home이고 스냅샷을 \\ftpserver\home\snapshots에 저장하려는 경우 FTP 루트 폴더의 속성 경로 에 대해 \snapshots\ftp를 지정합니다(복제는 스냅샷 파일을 만들 때 스냅샷 폴더 경로에 'ftp'를 추가함). - 스냅샷 에이전트가 2단계에서 지정한 디렉터리에 스냅샷 파일을 작성하도록 지정합니다. 예를 들어 스냅샷 에이전트가 \\ftpserver\home\snapshots\ftp에 스냅샷 파일을 쓰도록 하려면 다음 두 위치 중 하나에서 \\ftpserver\home\snapshots 경로를 지정해야 합니다.
- 이 게시와 연결된 배포자의 기본 스냅샷 위치입니다.
기본 스냅샷 위치를 지정하는 방법에 대한 자세한 내용은 기본 스냅샷 위치 지정을 참조하세요. - 이 게시의 대체 스냅샷 폴더 위치입니다. 스냅샷이 압축된 경우 대체 위치가 필요합니다.
게시 속성 - <게시> 대화 상자의 스냅샷 페이지에서 다음 폴더에 파일 배치라는 텍스트 상자에 경로를 입력합니다.
- 이 게시와 연결된 배포자의 기본 스냅샷 위치입니다.
- OK를 클릭합니다.
Transact-SQL 사용
FTP 서버에서 스냅샷 파일을 사용할 수 있도록 하는 옵션을 설정할 수 있으며 복제 저장 프로시저를 사용하여 이러한 FTP 설정을 프로그래밍 방식으로 수정할 수 있습니다. 사용되는 프로시저는 게시 유형에 따라 달라집니다. FTP 스냅샷 배달은 끌어오기 구독에서만 사용됩니다.
스냅샷 또는 트랜잭션 게시에 FTP 스냅샷 배달을 사용하도록 설정하려면
게시 데이터베이스의 게시자에서 sp_addpublication 실행합니다. @publication,
true로 @enabled_for_internet 값 및 다음 매개 변수에 적절한 값을 지정합니다.- @ftp_address - 스냅샷을 전달하는 데 사용되는 FTP 서버의 주소입니다.
- (선택 사항) @ftp_port - FTP 서버에서 사용하는 포트입니다.
- (선택 사항) @ftp_subdirectory - FTP 로그인에 할당된 기본 FTP 디렉터리의 하위 디렉터리입니다. 예를 들어 FTP 서버 루트가 \\ftpserver\home이고 스냅샷을 \\ftpserver\home\snapshots에 저장하려는 경우 @ftp_subdirectory\snapshots\ftp를 지정합니다(복제는 스냅샷 파일을 만들 때 스냅샷 폴더 경로에 '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에 저장하려는 경우 @ftp_subdirectory\snapshots\ftp를 지정합니다(복제는 스냅샷 파일을 만들 때 스냅샷 폴더 경로에 '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 자격 증명 및 @use_ftp 값을
true지정합니다.
- 구독 데이터베이스의 구독자에서 sp_addpullsubscription_agent 실행합니다.
@publisher, @publisher_db, @publication, 구독자에서 배포 에이전트가 @job_login 및 @job_password 대해 실행되는 Microsoft Windows 자격 증명 및 @use_ftp 값을
게시 데이터베이스의 게시자에서 sp_addsubscription 실행하여 끌어오기 구독을 등록합니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
FTP 스냅샷 배달을 사용하는 병합 게시에 대한 끌어오기 구독을 만들려면
- 구독 데이터베이스의 구독자에서 sp_addmergepullsubscription 실행합니다. @publisher 지정하고 @publication.
- 구독 데이터베이스의 구독자에서 sp_addmergepullsubscription_agent 실행합니다.
@publisher, @publisher_db, @publication, 구독자에서 배포 에이전트가 @job_login 및 @job_password 대해 실행되는 Windows 자격 증명 및 @use_ftp 값을
true지정합니다. - 게시 데이터베이스의 게시자에서 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 실행합니다.
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
또한 참조하십시오
복제 시스템 저장 프로시저 개념
FTP를 통해 스냅샷 전송
게시 및 아티클 속성 변경
스냅샷을 사용하여 구독 초기화