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 공유를 사용하는 것이 좋습니다. 또한 단일 계정이 스냅샷 공유에 대한 액세스를 제어하기 때문에 필터링된 병합 게시에 대한 구독자가 해당 데이터 파티션의 스냅샷 파일에만 액세스할 수 있도록 할 수 없습니다.

제한 사항

  • 스냅샷 에이전트 지정한 디렉터리에 대한 쓰기 권한이 있어야 하며 배포 에이전트 또는 병합 에이전트 읽기 권한이 있어야 합니다. 끌어오기 구독을 사용하는 경우 공유 디렉터리를 UNC(범용 명명 규칙) 경로(예: \\ftpserver\home\스냅샷s)로 지정해야 합니다. 자세한 내용은 스냅샷 폴더 보안을 참조 하세요.

필수 조건

  • FTP(파일 전송 프로토콜)를 사용하여 스냅샷 파일을 전송하려면 먼저 FTP 서버를 구성해야 합니다. 자세한 내용은 IIS(Microsoft 인터넷 정보 서비스) 설명서를 참조하세요.

보안

보안을 향상하려면 인터넷을 통한 FTP 스냅샷 배달을 사용할 때 VPN(가상 사설망)을 구현하는 것이 좋습니다. 자세한 내용은 VPN을 사용하여 인터넷을 통해 데이터 게시를 참조하세요.

보안 모범 사례로 FTP 서버에 익명 로그인을 허용하지 않습니다. 스냅샷 에이전트 지정한 디렉터리에 대한 쓰기 권한이 있어야 하며 배포 에이전트 또는 병합 에이전트 읽기 권한이 있어야 합니다. 끌어오기 구독을 사용하는 경우 공유 디렉터리를 UNC(범용 명명 규칙) 경로(예: \\ftpserver\home\스냅샷s)로 지정해야 합니다. 자세한 내용은 스냅샷 폴더 보안을 참조 하세요.

가능하면 런타임에 자격 증명을 입력하라는 메시지를 사용자에게 표시합니다. 스크립트 파일에 자격 증명을 저장하는 경우 파일을 보호해야 합니다.

SQL Server Management Studio 사용

FTP 서버를 구성한 후 게시 속성 <게시> 대화 상자에서 이 서버에 대한 디렉터리 및 보안 정보를 지정합니다. 이 대화 상자에 액세스하는 방법은 게시 속성 보기 및 수정을 참조하세요.

FTP 정보를 지정하려면

  1. 게시 속성 - <게시> 대화 상자에서 구독자가 다음 페이지 중 하나에서 FTP를 사용하여 스냅샷 파일을 다운로드하도록 허용을 선택합니다.

    • MICROSOFT SQL Server 2005(9.x) 이전 버전을 실행하는 게시자의 스냅샷 및 트랜잭션 게시 및 병합 게시에 대한 FTP 스냅샷 페이지입니다.

    • SQL Server 2005(9.x) 이상을 실행하는 게시자의 병합 게시에 대한 FTP 스냅샷 및 인터넷 페이지입니다.

  2. FTP 서버 이름, 포트 번호, FTP 루트 폴더에서의 경로, 로그인암호에 대한 값을 지정합니다.

    예를 들어 FTP 서버 루트가 \\ftpserver\home이고 스냅샷 \\ftpserver\home\스냅샷s에 저장하려는 경우 FTP 루트 폴더의 속성 경로에 \스냅샷s\ftp를 지정합니다(복제본(replica)스냅샷 파일을 만들 때 스냅샷 폴더 경로에 'ftp'가 추가됨).

  3. 스냅샷 에이전트 2단계에서 지정한 디렉터리에 스냅샷 파일을 작성하도록 지정합니다. 예를 들어 스냅샷 에이전트 스냅샷 파일을 \\ftpserver\home\스냅샷s\ftp에 쓰도록 하려면 다음 두 위치 중 하나에서 \\ftpserver\home\스냅샷 경로를 지정해야 합니다.

    • 이 게시와 연결된 배포자의 기본 스냅샷 위치입니다.
    • 이 게시의 대체 스냅샷 폴더 위치입니다. 스냅샷 압축된 경우 대체 위치가 필요합니다.

스냅샷 폴더 위치 속성을 수정하는 방법에 대한 자세한 내용은 스냅샷 옵션을 참조하세요.

  1. 확인을 선택합니다.

Transact-SQL 사용

FTP 서버에서 스냅샷 파일을 사용할 수 있도록 하는 옵션을 설정할 수 있으며 이러한 FTP 설정은 복제본(replica)tion 저장 프로시저를 사용하여 프로그래밍 방식으로 수정할 수 있습니다. 사용되는 절차는 게시 유형에 따라 달라집니다. FTP 스냅샷 배달은 끌어오기 구독에서만 사용됩니다.

스냅샷 또는 트랜잭션 게시에 FTP 스냅샷 배달을 사용하도록 설정하려면

  1. 게시 데이터베이스의 게시자에서 sp_addpublication 실행합니다. 다음 매개 변수에 대해 @enabled_for_internettrue과 적절한 값을 지정@publication합니다.

    • @ftp_address- 스냅샷 전달하는 데 사용되는 FTP 서버의 주소입니다.

    • (선택 사항) @ftp_port - FTP 서버에서 사용하는 포트입니다.

    • (선택 사항) @ftp_subdirectory - FTP 로그인에 할당된 기본 FTP 디렉터리의 하위 디렉터리입니다. 예를 들어 FTP 서버 루트가 \\ftpserver\home이고 스냅샷 \\ftpserver\home\스냅샷s에 저장하려는 경우 \스냅샷s\ftp@ftp_subdirectory 지정합니다(복제본(replica)스냅샷 파일을 만들 때 스냅샷 폴더 경로에 'ftp'가 추가됨).

    • (옵션) @ftp_login - FTP 서버에 연결할 때 사용되는 로그인 계정입니다.

    • (옵션) @ftp_password - FTP 로그인의 암호입니다.

    그러면 FTP를 사용하는 게시가 만들어집니다. 자세한 내용은 게시 만들기를 참조하세요.

병합 게시에 대한 FTP 스냅샷 배달을 설정하려면

  1. 게시 데이터베이스의 게시자에서 sp_addmergepublication 실행합니다. 다음 매개 변수에 대해 @enabled_for_internet true과 적절한 값을 지정@publication합니다.

    • @ftp_address- 스냅샷 전달하는 데 사용되는 FTP 서버의 주소입니다.

    • (선택 사항) @ftp_port - FTP 서버에서 사용하는 포트입니다.

    • (선택 사항) @ftp_subdirectory - FTP 로그인에 할당된 기본 FTP 디렉터리의 하위 디렉터리입니다. 예를 들어 FTP 서버 루트가 \\ftpserver\home이고 스냅샷 \\ftpserver\home\스냅샷s에 저장하려는 경우 \스냅샷s\ftp@ftp_subdirectory 지정합니다(복제본(replica)스냅샷 파일을 만들 때 스냅샷 폴더 경로에 'ftp'가 추가됨).

    • (옵션) @ftp_login - FTP 서버에 연결할 때 사용되는 로그인 계정입니다.

    • (옵션) @ftp_password - FTP 로그인의 암호입니다.

    그러면 FTP를 사용하는 게시가 만들어집니다. 자세한 내용은 게시 만들기를 참조하세요.

FTP 스냅샷 배달을 사용하는 스냅샷 또는 트랜잭션 게시에 대한 끌어오기 구독을 만들려면

  1. 구독 데이터베이스의 구독자에서 sp_addpullsubscription 실행합니다. 지정 @publisher@publication.

    • 구독 데이터베이스의 구독자에서 sp_addpullsubscription_agent 실행합니다. , @publisher_db구독자에서 배포 에이전트 실행되는 @job_login Microsoft Windows 자격 증명 및 @job_passwordtrue @use_ftp 값을 지정@publisher@publication합니다.
  2. 게시 데이터베이스의 게시자에서 sp_addsubscription 실행하여 끌어오기 구독을 등록합니다. 자세한 내용은 끌어오기 구독 만들기를 참조 하세요.

FTP 스냅샷 배달을 사용하는 병합 게시에 대한 끌어오기 구독을 만들려면

  1. 구독 데이터베이스의 구독자에서 sp_addmergepullsubscription 실행합니다. 지정 @publisher@publication.

  2. 구독 데이터베이스의 구독자에서 sp_addmergepullsubscription_agent 실행합니다. , @publisher_db, 구독자에서 배포 에이전트 실행되는 @job_login Windows 자격 증명 및 true@use_ftp@job_password값을 지정@publisher@publication합니다.

  3. 게시 데이터베이스의 게시자에서 sp_addmergesubscription 실행하여 끌어오기 구독을 등록합니다. 자세한 내용은 끌어오기 구독 만들기를 참조 하세요.

스냅샷 또는 트랜잭션 게시에 대한 하나 이상의 FTP 스냅샷 배달 설정을 변경하려면

  1. 게시 데이터베이스의 게시자에서 sp_changepublication을 실행합니다. @property에 다음 중 한 가지 값을 지정하고, 이 설정의 새 값을 @value에 지정합니다.

    • ftp_address - 스냅샷 전달하는 데 사용되는 FTP 서버의 주소입니다.

    • ftp_port - FTP 서버에서 사용하는 포트입니다.

    • ftp_subdirectory- FTP 스냅샷 사용되는 기본 FTP 디렉터리의 하위 디렉터리입니다.

    • ftp_login - FTP 서버에 연결하는 데 사용되는 로그인입니다.

    • ftp_password - FTP 로그인의 암호입니다.

  2. (선택 사항) 변경되는 각 FTP 설정에 대해 1단계를 반복합니다.

  3. (옵션) FTP 스냅샷 배달을 해제하려면 게시 데이터베이스의 게시자에서 sp_changepublication 을 실행합니다. 이때 @propertyenabled_for_internet 값, @valuefalse 값을 지정합니다.

병합 게시에 대한 FTP 스냅샷 배달 설정을 변경하려면

  1. 게시 데이터베이스의 게시자에서 sp_changemergepublication 실행합니다. @property에 다음 중 한 가지 값을 지정하고, 이 설정의 새 값을 @value에 지정합니다.

    • ftp_address- 스냅샷 전달하는 데 사용되는 FTP 서버의 주소입니다.

    • ftp_port - FTP 서버에서 사용하는 포트입니다.

    • ftp_subdirectory- FTP 스냅샷 사용되는 기본 FTP 디렉터리의 하위 디렉터리입니다.

    • ftp_login - FTP 서버에 연결하는 데 사용되는 로그인입니다.

    • ftp_password - FTP 로그인의 암호입니다.

  2. (선택 사항) 변경되는 각 FTP 설정에 대해 1단계를 반복합니다.

  3. (선택 사항) FTP 스냅샷 배달을 사용하지 않도록 설정하려면 게시 데이터베이스의 게시자에서 sp_changemergepublication 실행합니다. 이때 @propertyenabled_for_internet 값, @valuefalse 값을 지정합니다.

예제(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
게시 및 아티클 속성 변경
스냅샷을 사용하여 구독 초기화