FTP でのスナップショットの配信

適用対象:SQL Server

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

既定では、スナップショットは、UNC (Universal Naming Convention) 共有として定義されたフォルダーに格納されます。 レプリケーションでは、UNC 共有ではなく、FTP (File Transfer Protocol) 共有を指定することもできます。 FTP を使用するには、FTP サーバーを構成してから、FTP を使用するためのパブリケーションと 1 つ以上のサブスクリプションを構成する必要があります。 FTP サーバーの構成方法の詳細については、インターネット インフォメーション サービス (IIS) のドキュメントを参照してください。 パブリケーションに対して FTP 情報を指定すると、そのパブリケーションに対するサブスクリプションでは、既定で FTP を使用します。 IIS が動作しているコンピューターがファイアウォールによってディストリビューターから分離されている場合、FTP は Web 同期との組み合わせでのみ使用されます。 この場合、FTP を使用してディストリビューター、および IIS を実行中のコンピューターからスナップショットを転送できます (スナップショットは常に HTTPS を使用してサブスクライバーに転送されます)。

重要

FTP 共有では、FTP パスワードを格納する必要があり、このパスワードがプレーン テキストでサブスクライバー (Web 同期が使用されている場合は、IIS が動作しているコンピューター) から FTP サーバーに送信されるため、FTP 共有ではなく Microsoft Windows 認証と UNC 共有を使用することをお勧めします。 また、1 つのアカウントがスナップショット共有へのアクセスを制御するため、フィルター選択されたマージ パブリケーションへのサブスクライバーだけに、スナップショット ファイルのデータ パーティションからスナップショット ファイルへのアクセス権が与えられていることを確認することはできません。

制限事項と制約事項

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

前提条件

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

セキュリティ

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

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

可能であれば、実行時に資格情報の入力を求めるメッセージを表示します。 資格情報をスクリプト ファイルに保存する場合、ファイルをセキュリティ保護する必要があります。

SQL Server Management Studio を使用する

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

FTP 情報を指定するには

  1. [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストの次のいずれかのページで、[ファイル転送プロトコル (FTP) を使用したスナップショット ファイルのダウンロードをサブスクライバーに許可する] を選択します。

    • [FTP スナップショット] ページ。スナップショット パブリケーション、トランザクション パブリケーション、 Microsoft SQL Server 2005 (9.x) より前のバージョンを実行しているパブリッシャーの統合出版物の場合。

    • [FTP スナップショットとインターネット] ページ。 SQL Server 2005 (9.x) 以降を実行しているパブリッシャーからの統合 出版物の場合。

  2. [FTP サーバー名][ポート番号][FTP ルート フォルダーからのパス][ログイン]、および [パスワード]の値を指定します。

    たとえば、FTP サーバーのルートが \\ftpserver\home で、スナップショットを \\ftpserver\home\snapshots に格納する場合は、[FTP ルート フォルダーからのパス] には「\snapshots\ftp」と指定します (レプリケーションでは、スナップショット ファイルが作成されるときにスナップショット フォルダーのパスに "ftp" が追加されます)。

  3. スナップショット エージェントが、手順 2. で指定したディレクトリにスナップショット ファイルを書き込むように指定します。 たとえば、スナップショット エージェントがスナップショット ファイルを \\ftpserver\home\snapshots\ftp に書き込むようにするには、次の 2 つの内いずれかの場所に \\ftpserver\home\snapshots というパスを指定する必要があります。

    • このパブリケーションに関連付けられているディストリビューターの既定のスナップショットの場所。
    • このパブリケーションの代替スナップショット フォルダーの場所。 スナップショットが圧縮されている場合、別の場所が必要です。

スナップショット フォルダーの場所のプロパティ変更の詳細については、スナップショットのオプションに関する記事を参照してください。

  1. [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_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_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 を実行し、プル サブスクリプションを登録します。 詳細については、「 プル サブスクリプションの作成」をご覧ください。

スナップショット パブリケーションまたはトランザクション パブリケーションの 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 スクリプト変数を使用して、ログインとパスワードの値が入力されます。 詳細については、「Use sqlcmd with Scripting Variables」(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 スクリプト変数を使用して、ログインとパスワードの値が入力されます。 詳細については、「Use sqlcmd with Scripting Variables」(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
パブリケーションおよびアーティクルのプロパティの変更
Initialize a Subscription with a Snapshot (スナップショットを使用したサブスクリプションの初期化)