次の方法で共有


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

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

制限事項と制約事項

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