FTP 経由でスナップショットを配信する方法 (レプリケーション Transact-SQL プログラミング)

更新 : 2006 年 4 月 14 日

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

ms146956.security(ja-jp,SQL.90).gifセキュリティ メモ :
セキュリティを高めるために、インターネット経由の FTP スナップショット配信を使用する場合は仮想プライベート ネットワーク (VPN) を実装してください。詳細については、「VPN を使用したインターネット経由のデータのパブリッシュ」を参照してください。

スナップショット パブリケーションまたはトランザクション パブリケーションで 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 ログイン用のパスワード。
      ms146956.security(ja-jp,SQL.90).gifセキュリティ メモ :
      セキュリティを高めるために、FTP サーバーに対する匿名ログインを許可しないことをお勧めします。
    ms146956.note(ja-jp,SQL.90).gifメモ :
    スナップショット エージェントには、指定したディレクトリに対する書き込み権限が必要です。また、ディストリビューション エージェントまたはマージ エージェントに読み取り権限が必要です。プル サブスクリプションを使用する場合は、共有ディレクトリを UNC (汎用名前付け規則) パス (\\ftpserver\home\snapshots など) として指定する必要があります。詳細については、「スナップショット フォルダのセキュリティ」を参照してください。

    これにより、FTP を使用するパブリケーションが作成されます。詳細については、「パブリケーションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

マージ パブリケーションで 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 ログイン用のパスワード。
      ms146956.security(ja-jp,SQL.90).gifセキュリティ メモ :
      セキュリティを高めるために、FTP サーバーに対する匿名ログインを許可しないことをお勧めします。
    ms146956.note(ja-jp,SQL.90).gifメモ :
    スナップショット エージェントには、指定したディレクトリに対する書き込み権限が必要です。また、ディストリビューション エージェントまたはマージ エージェントに読み取り権限が必要です。プル サブスクリプションを使用する場合は、共有ディレクトリを UNC (汎用名前付け規則) パス (\\ftpserver\home\snapshots など) として指定する必要があります。詳細については、「スナップショット フォルダのセキュリティ」を参照してください。

    これにより、FTP を使用するパブリケーションが作成されます。詳細については、「パブリケーションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

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

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

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

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

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

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

  3. パブリッシャ側のパブリケーション データベースに対して sp_addmergesubscription を実行し、プル サブスクリプションを登録します。詳細については、「プル サブスクリプションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

スナップショット パブリケーションまたはトランザクション パブリケーションの FTP スナップショット配信の設定を変更するには

  1. パブリッシャ側のパブリケーション データベースに対して sp_changepublication を実行します。@property に次のいずれかの値を指定し、この設定の新しい値を @value に指定します。

    • ftp_address - スナップショットの配信に使用する FTP サーバーのアドレス。
    • ftp_port - FTP サーバーで使用されるポート。
    • ftp_subdirectory - FTP スナップショットに使用する既定の FTP ディレクトリのサブディレクトリ。
    • ftp_login - FTP サーバーへの接続に使用されるログイン。
    • ftp_password - FTP ログイン用のパスワード。
    ms146956.security(ja-jp,SQL.90).gifセキュリティ メモ :
    可能であれば、実行時に資格情報の入力を求めるメッセージを表示します。資格情報をスクリプト ファイルに保存する場合、ファイルをセキュリティ保護する必要があります。
  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 ログイン用のパスワード。
    ms146956.security(ja-jp,SQL.90).gifセキュリティ メモ :
    可能であれば、実行時に資格情報の入力を求めるメッセージを表示します。資格情報をスクリプト ファイルに保存する場合、ファイルをセキュリティ保護する必要があります。
  2. (省略可) 変更する各 FTP 設定について手順 1. を実行します。

  3. (省略可) FTP スナップショット配信を無効にするには、パブリッシャ側のパブリケーション データベースに対して sp_changemergepublication を実行します。@propertyenabled_for_internet を指定し、@valuefalse を指定します。

使用例

次の例では、サブスクライバが 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 でスナップショットを配信する方法 (SQL Server Management Studio)
FTP によるスナップショットの転送

ヘルプおよび情報

SQL Server 2005 の参考資料の入手