スナップショットのプロパティを構成する方法 (レプリケーション Transact-SQL プログラミング)
スナップショットのプロパティは、レプリケーションのストアド プロシージャを使用し、プログラムから定義および変更できます。使用するストアド プロシージャは、パブリケーションの種類によって異なります。
スナップショット パブリケーションまたはトランザクション パブリケーションを作成するときにスナップショットのプロパティを構成するには
パブリッシャで sp_addpublication を実行します。このとき、@publication にパブリケーション名を、@repl_freq に snapshot と continuous のいずれかの値を指定し、次のスナップショット関連のパラメータを少なくとも 1 つ指定します。
@alt_snapshot_folder - このパブリケーションのスナップショットが既定のスナップショット フォルダ以外の場所 (または既定のスナップショット フォルダに追加された場所) に保存されている場合のパスを指定します。
@compress_snapshot - 代替スナップショット フォルダ内のスナップショット ファイルを Microsoft CAB ファイル形式で圧縮する場合は true を指定します。
@pre_snapshot_script - 初期化時、初期スナップショットが適用される前にサブスクライバ側で実行される .sql ファイルのファイル名と完全パスを指定します。
@post_snapshot_script - 初期化時、初期スナップショットが適用された後にサブスクライバ側で実行される .sql ファイルのファイル名と完全パスを指定します。
@snapshot_in_defaultfolder - スナップショットを既定のフォルダ以外の場所に格納する場合は、false を指定します。
パブリケーション作成の詳細については、「パブリケーションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
マージ パブリケーションを作成するときにスナップショットのプロパティを構成するには
パブリッシャで sp_addmergepublication を実行します。このとき、@publication にパブリケーション名を、@repl_freq に snapshot と continuous のいずれかの値を指定し、次のスナップショット関連のパラメータを少なくとも 1 つ指定します。
@alt_snapshot_folder - このパブリケーションのスナップショットが既定のスナップショット フォルダ以外の場所 (または既定のスナップショット フォルダに追加された場所) に保存されている場合のパスを指定します。
@compress_snapshot - 代替スナップショット フォルダ内のスナップショット ファイルを CAB ファイル形式で圧縮する場合は true を指定します。
@pre_snapshot_script - 初期化時、初期スナップショットが適用される前にサブスクライバ側で実行される .sql ファイルのファイル名と完全パスを指定します。
@post_snapshot_script - 初期化時、初期スナップショットが適用された後にサブスクライバ側で実行される .sql ファイルのファイル名と完全パスを指定します。
@snapshot_in_defaultfolder - スナップショットを既定のフォルダ以外の場所に格納する場合は、false を指定します。
パブリケーション作成の詳細については、「パブリケーションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
既存のスナップショット パブリケーションまたはトランザクション パブリケーションに対してスナップショットのプロパティを変更するには
パブリッシャのパブリケーション データベースで sp_changepublication を実行します。このとき、@force_invalidate_snapshot に 1 を指定し、次のいずれかの値を @property に指定します。
alt_snapshot_folder - @value に代替スナップショット フォルダの新しいパスを指定します。
compress_snapshot - 代替スナップショット フォルダ内のスナップショット ファイルを CAB ファイル形式で圧縮するかを示す true または false を @value に指定します。
pre_snapshot_script - 初期化時、初期スナップショットが適用される前にサブスクライバ側で実行される .sql ファイルのファイル名と完全パスを @value に指定します。
post_snapshot_script - 初期化時、初期スナップショットが適用された後にサブスクライバ側で実行される .sql ファイルのファイル名と完全パスを @value に指定します。
snapshot_in_defaultfolder - スナップショットを既定の場所に格納するかどうかを true または false で指定します。
(省略可) パブリッシャのパブリケーション データベースで sp_changepublication_snapshot を実行します。このとき、@publication を指定し、変更の対象となる、スケジュールまたはセキュリティ資格情報関連のパラメータを少なくとも 1 つ指定します。
セキュリティに関する注意 可能であれば、実行時にセキュリティ資格情報の入力を求めるメッセージを表示します。スクリプト ファイルに資格情報を格納する必要がある場合、不正なアクセスを防ぐために、ファイルをセキュリティ保護する必要があります。
コマンド プロンプトからレプリケーション スナップショット エージェントを実行するか、スナップショット エージェント ジョブを起動して新しいスナップショットを生成します。詳細については、「初期スナップショットを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
既存のマージ パブリケーションに対してスナップショットのプロパティを変更するには
パブリッシャのパブリケーション データベースで sp_changemergepublication を実行します。このとき、@force_invalidate_snapshot に 1 を指定し、次のいずれかの値を @property に指定します。
alt_snapshot_folder - @value に代替スナップショット フォルダの新しいパスを指定します。
compress_snapshot - 代替スナップショット フォルダ内のスナップショット ファイルを CAB ファイル形式で圧縮するかを示す true または false を @value に指定します。
pre_snapshot_script - 初期化時、初期スナップショットが適用される前にサブスクライバ側で実行される .sql ファイルのファイル名と完全パスを @value に指定します。
post_snapshot_script - 初期化時、初期スナップショットが適用された後にサブスクライバ側で実行される .sql ファイルのファイル名と完全パスを @value に指定します。
snapshot_in_defaultfolder - スナップショットを既定の場所に格納するかどうかを true または false で指定します。
コマンド プロンプトからレプリケーション スナップショット エージェントを実行するか、スナップショット エージェント ジョブを起動して新しいスナップショットを生成します。詳細については、「初期スナップショットを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
使用例
次の例では、代替スナップショット フォルダと圧縮スナップショットを使用したパブリケーションを作成します。
-- 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 @article AS sysname;
DECLARE @owner AS sysname;
DECLARE @snapshot_share AS sysname;
SET @publicationDB = N'AdventureWorks';
SET @publication = N'AdvWorksSalesOrdersMergeAltSnapshot';
SET @article = N'SpecialOffer';
SET @owner = N'Sales';
SET @snapshot_share = '\\' + $(InstanceName) + '\AltSnapshotFolder';
-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption
@dbname = @publicationDB,
@optname=N'merge publish',
@value = N'true';
-- Create new merge publication with an alternate snapshot location.
USE [AdventureWorks]
EXEC sp_addmergepublication
-- required parameters
@publication = @publication,
@snapshot_in_defaultfolder = N'false',
@alt_snapshot_folder = @snapshot_share,
@compress_snapshot = N'true';
-- Create the snapshot job for the publication.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = $(Login),
@job_password = $(Password);
-- Add an article.
EXEC sp_addmergearticle
@publication = @publication,
@article = @article,
@source_object = @article,
@type = N'table',
@source_owner = @owner,
@destination_owner = @owner;
-- Start the snapshot job.
EXEC sp_startpublication_snapshot
@publication = @publication;
GO