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

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

このトピックの内容

  • 作業を開始する準備:

    制限事項と制約事項

    前提条件

    セキュリティ

  • FTP でスナップショットを配信するために使用するもの:

    SQL Server Management Studio

    Transact-SQL

作業を開始する準備

制限事項と制約事項

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

前提条件

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

セキュリティ

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

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

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

[トップに戻る] リンクで使用される矢印アイコン[Top]

SQL Server Management Studio の使用

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

FTP 情報を指定するには

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

    • [FTP スナップショット] ページ。スナップショット パブリケーション、トランザクション パブリケーション、および Microsoft SQL Server 2005 より前のバージョンを実行しているパブリッシャーのマージ パブリケーションの場合。

    • [FTP スナップショットとインターネット] ページ。SQL Server 2005 以降を実行しているパブリッシャーからのマージ パブリケーションの場合。

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

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

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

    • このパブリケーションに関連付けられているディストリビューターの既定のスナップショットの場所。

      既定のスナップショットの場所を指定する方法の詳細については、「既定のスナップショットの場所の指定 (SQL Server Management Studio)」を参照してください。

    • このパブリケーションの代替スナップショット フォルダーの場所。 スナップショットが圧縮されている場合、別の場所が必要です。

      [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスの [スナップショット] ページで、[ファイルを次のフォルダーに保存する] ボックスにパスを入力します。 代替スナップショット フォルダーの場所の詳細については、「スナップショット フォルダーの代替位置」を参照してください。

  4. [OK] をクリックします。

[トップに戻る] リンクで使用される矢印アイコン[Top]

Transact-SQL の使用

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

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

  • パブリッシャーのパブリケーション データベースに対して、sp_addpublication を実行します。 @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_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 を指定します。サブスクライバーでディストリビューション エージェントの実行に使用される Microsoft Windows 資格情報を @job_login および @job_password に指定し、@use_ftp に true を指定します。
  2. パブリッシャー側のパブリケーション データベースに対して sp_addsubscription を実行し、プル サブスクリプションを登録します。 詳細については、「プル サブスクリプションの作成」を参照してください。

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

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

  2. サブスクライバー側のサブスクリプション データベースに対して、sp_addmergepullsubscription_agent を実行します。 @publisher@publisher_db@publication を指定します。サブスクライバーでディストリビューション エージェントの実行に使用される Windows 資格情報を @job_login および @job_password に指定し、@use_ftp に true を指定します。

  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 を実行します。 @propertyenabled_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

[トップに戻る] リンクで使用される矢印アイコン[Top]

関連項目

概念

レプリケーション システム ストアド プロシージャの概念

FTP によるスナップショットの転送

パブリケーションおよびアーティクルのプロパティの変更

スナップショットを使用したサブスクリプションの初期化