次の方法で共有


FTP を使用してスナップショットを配信する

このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、SQL Server 2014 で FTP 経由でスナップショットを配信する方法について説明します。

制限事項と制約条件

  • スナップショット エージェントには、指定したディレクトリに対する書き込みアクセス許可が必要であり、ディストリビューション エージェントまたはマージ エージェントには読み取りアクセス許可が必要です。 プル サブスクリプションを使用する場合は、\\ftpserver\home\snapshots などの汎用名前付け規則 (UNC) パスとして共有ディレクトリを指定する必要があります。 詳細については、「Secure the Snapshot Folder」(スナップショット フォルダーのセキュリティ保護) をご覧ください。

[前提条件]

  • ファイル転送プロトコル (FTP) を使用してスナップショット ファイルを転送するには、最初に FTP サーバーを構成する必要があります。 詳細については、Microsoft インターネット インフォメーション サービス (IIS) のドキュメントを参照してください。

安全

セキュリティを強化するために、インターネット経由で FTP スナップショット配信を使用する場合は、仮想プライベート ネットワーク (VPN) を実装することをお勧めします。 詳細については、「VPN を 使用してインターネット経由でデータを発行する」を参照してください。

セキュリティのベスト プラクティスとして、FTP サーバーへの匿名ログインを許可しないでください。 スナップショット エージェントには、指定したディレクトリに対する書き込みアクセス許可が必要であり、ディストリビューション エージェントまたはマージ エージェントには読み取りアクセス許可が必要です。 プル サブスクリプションを使用する場合は、\\ftpserver\home\snapshots などの汎用名前付け規則 (UNC) パスとして共有ディレクトリを指定する必要があります。 詳細については、「Secure the Snapshot Folder」(スナップショット フォルダーのセキュリティ保護) をご覧ください。

可能な場合は、実行時に資格情報を入力するようにユーザーに求めます。 スクリプト ファイルに資格情報を格納する場合は、ファイルをセキュリティで保護する必要があります。

SQL Server Management Studio の使用

FTP サーバーを構成したら、[ パブリケーションのプロパティ] < [発行> ] ダイアログ ボックスで、このサーバーのディレクトリとセキュリティ情報を指定します。 このダイアログ ボックスへのアクセスの詳細については、「 パブリケーションのプロパティの表示と変更」を参照してください。

FTP 情報を指定するには

  1. [ パブリケーションのプロパティ - <発行> ] ダイアログ ボックスで、[サブスクライバーが次のいずれかのページから FTP を使用してスナップショット ファイルをダウンロードできるようにする ] を選択します。
    • スナップショット パブリケーションとトランザクション パブリケーションの FTP スナップショット ページ、および Microsoft SQL Server 2005 より前のバージョンを実行しているパブリッシャーのマージ パブリケーション。
    • SQL Server 2005 以降を実行しているパブリッシャーからのマージ パブリケーション用の FTP スナップショットとインターネット ページ。
  2. FTP サーバー名ポート番号、FTP ルート フォルダーからのパスログインおよびパスワードの値を指定します。
    たとえば、FTP サーバー ルートが \\ftpserver\home で、スナップショットを \\ftpserver\home\snapshots に格納する場合は、 FTP ルート フォルダーのプロパティ パス に \snapshots\ftp を指定します (レプリケーションでは、スナップショット ファイルの作成時にスナップショット フォルダー パスに "ftp" が追加されます)。
  3. スナップショット エージェントが手順 2 で指定したディレクトリにスナップショット ファイルを書き込む必要があることを指定します。 たとえば、スナップショット エージェントがスナップショット ファイルを \\ftpserver\home\snapshots\ftp に書き込むには、次の 2 つの場所のいずれかでパス \\ftpserver\home\snapshots を指定する必要があります。
    • このパブリケーションに関連付けられているディストリビューターの既定のスナップショットの場所。
      既定のスナップショットの場所の指定の詳細については、「既定のスナップショット の場所を指定する」を参照してください。
    • このパブリケーションの代替スナップショット フォルダーの場所。 スナップショットが圧縮されている場合は、別の場所が必要です。
      [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスの [スナップショット] ページの [次のフォルダーにファイルを配置する] ボックスにパスを入力します。
  4. OK をクリックします。

Transact-SQL の使用

FTP サーバーでスナップショット ファイルを使用できるようにするオプションを設定できます。これらの FTP 設定は、レプリケーション ストアド プロシージャを使用してプログラムで変更できます。 使用するプロシージャは、パブリケーションの種類によって異なります。 FTP スナップショットの配信は、プル サブスクリプションでのみ使用されます。

スナップショット パブリケーションまたはトランザクション パブリケーションに対して FTP スナップショット配信を有効にするには

  1. パブリッシャー側のパブリケーション データベースで、 sp_addpublicationを実行します。 @publication@enabled_for_internettrueの値を指定し、次のパラメーターに適切な値を設定します。

    • @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 スナップショット配信を有効にするには

  1. パブリッシャー側のパブリケーション データベースで、 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 スナップショット配信を利用するスナップショットパブリケーションまたはトランザクションパブリケーションに対してプルサブスクリプションを作成するには

  1. サブスクリプション データベースのサブスクライバーで、 sp_addpullsubscriptionを実行します。 @publisher@publicationを指定します。

    • サブスクリプション データベースのサブスクライバーで、 sp_addpullsubscription_agentを実行します。 @publisher@publisher_db@publication、サブスクライバー側のディストリビューション エージェントが@job_loginと@job_passwordに対して実行される Microsoft Windows 資格情報、および@use_ftptrueの値を指定します。
  2. パブリッシャー側のパブリケーション データベースで、 sp_addsubscription を実行してプル サブスクリプションを登録します。 詳細については、「 プル サブスクリプションの作成」を参照してください

FTP スナップショット配信を使用するマージ パブリケーションへのプル サブスクリプションを作成するには

  1. サブスクリプション データベースのサブスクライバーで、 sp_addmergepullsubscriptionを実行します。 @publisher@publicationを指定します。
  2. サブスクリプション データベースのサブスクライバーで、 sp_addmergepullsubscription_agentを実行します。 @publisher@publisher_db@publication、サブスクライバーのディストリビューション エージェントが@job_loginと@job_passwordに対して実行される Windows 資格情報、および@use_ftptrueの値を指定します。
  3. パブリッシャー側のパブリケーション データベースで、 sp_addmergesubscription を実行してプル サブスクリプションを登録します。 詳細については、「 プル サブスクリプションの作成」を参照してください

スナップショット パブリケーションまたはトランザクション パブリケーションの 1 つ以上の 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 を実行します。 @property に対してenabled_for_internetの値を指定し、@value に対してfalseの値を指定します。

マージ パブリケーションの 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 を実行します。 @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

こちらもご覧ください

レプリケーション システム ストアド プロシージャの概念
FTP 経由でスナップショットを転送する
パブリケーションとアーティクルのプロパティを変更する
スナップショットを使用してサブスクリプションを初期化する