スナップショットのプロパティの構成 (レプリケーション 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 を指定します。
パブリケーション作成の詳細については、「パブリケーションの作成」を参照してください。
マージ パブリケーションを作成するときにスナップショットのプロパティを構成するには
パブリッシャーで 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 を指定します。
パブリケーションの作成の詳細については、「パブリケーションの作成」を参照してください。
既存のスナップショット パブリケーションまたはトランザクション パブリケーションに対してスナップショットのプロパティを変更するには
パブリッシャーのパブリケーション データベースで 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 つ指定します。
セキュリティに関する注意
可能であれば、実行時にセキュリティ資格情報の入力を求めるメッセージを表示します。 スクリプト ファイルに資格情報を格納する必要がある場合、不正なアクセスを防ぐために、ファイルをセキュリティ保護する必要があります。
コマンド プロンプトからレプリケーション スナップショット エージェントを実行するか、スナップショット エージェント ジョブを起動して新しいスナップショットを生成します。 詳細については、「初期スナップショットの作成および適用」を参照してください。
既存のマージ パブリケーションに対してスナップショットのプロパティを変更するには
パブリッシャーのパブリケーション データベースで 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 で指定します。
コマンド プロンプトからレプリケーション スナップショット エージェントを実行するか、スナップショット エージェント ジョブを起動して新しいスナップショットを生成します。 詳細については、「初期スナップショットの作成および適用」を参照してください。
使用例
次の例では、代替スナップショット フォルダーと圧縮スナップショットを使用したパブリケーションを作成します。
-- 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'AdventureWorks2012';
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