次の方法で共有


スナップショットのプロパティの構成 (レプリケーション Transact-SQL プログラミング)

適用対象: SQL Server Azure SQL Managed Instance

スナップショットのプロパティは、レプリケーションのストアド プロシージャを使用し、プログラムから定義および変更できます。使用するストアド プロシージャは、パブリケーションの種類によって異なります。

スナップショット パブリケーションまたはトランザクション パブリケーションを作成するときにスナップショットのプロパティを構成するには

  1. パブリッシャーで sp_addpublicationを実行します。 @publication にパブリケーション名を、@repl_freqsnapshotcontinuous のいずれかの値を指定し、次のスナップショット関連のパラメーターを少なくとも 1 つ指定します。

    • @alt_snapshot_folder - このパブリケーションのスナップショットが、既定のスナップショット フォルダー以外の場所、または既定のスナップショット フォルダーに追加された場所からアクセスされる場合のパスを指定します。
    • @compress_snapshot - 代替スナップショット フォルダー内のスナップショット ファイルを Microsoft CAB ファイル形式で圧縮する場合は true を指定します。
    • @pre_snapshot_script - 初期化時、初期スナップショットが適用される前にサブスクライバーで実行される .sql ファイルのファイル名と完全パスを指定します。
    • @post_snapshot_script - 初期化時、初期スナップショットが適用される後にサブスクライバーで実行される .sql ファイルのファイル名と完全パスを指定します。
    • @snapshot_in_defaultfolder - スナップショットが既定以外の場所でのみ使用できる場合は、値に false を指定します。

    パブリケーションの作成の詳細については、「 Create a Publication」を参照してください。

マージ パブリケーションを作成するときにスナップショットのプロパティを構成するには

  1. パブリッシャーで sp_addmergepublicationを実行します。 @publication にパブリケーション名を、@repl_freqsnapshotcontinuous のいずれかの値を指定し、次のスナップショット関連のパラメーターを少なくとも 1 つ指定します。

    • alt_snapshot_folder - このパブリケーションのスナップショットが、既定のスナップショット フォルダー以外の場所、または既定のスナップショット フォルダーに追加された場所からアクセスされる場合のパスを指定します。
    • @compress_snapshot - 代替スナップショット フォルダー内のスナップショット ファイルを CAB ファイル形式で圧縮する場合は true を指定します。
    • @pre_snapshot_script - 初期化時、初期スナップショットが適用される前にサブスクライバーで実行される .sql ファイルのファイル名と完全パスを指定します。
    • @post_snapshot_script - 初期化時、初期スナップショットが適用される後にサブスクライバーで実行される .sql ファイルのファイル名と完全パスを指定します。
    • @snapshot_in_defaultfolder - スナップショットが既定以外の場所でのみ使用できる場合は、値に false を指定します。
  2. パブリケーションの作成の詳細については、「 Create a Publication」を参照してください。

既存のスナップショット パブリケーションまたはトランザクション パブリケーションに対してスナップショットのプロパティを変更するには

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

    • alt_snapshot_folder - @value に代替スナップショットへの新しいパスも指定します。
    • compress_snapshot - 代替スナップショット フォルダー内のスナップショット ファイルを CAB ファイル形式で圧縮するかどうかを示すには、@valuetrue または false も指定します。
    • pre_snapshot_script - 初期化時、初期スナップショットが適用される前にサブスクライバーで実行される .sql ファイルのファイル名と完全パスも @value に指定します。
    • post_snapshot_script - 初期化時、初期スナップショットが適用される後にサブスクライバーで実行される .sql ファイルのファイル名と完全パスも @value に指定します。
    • snapshot_in_defaultfolder - スナップショットを既定の場所に格納するかどうかを true または false で指定します。
  2. (省略可) パブリッシャーのパブリケーション データベースで sp_changepublication_snapshotを実行します。 @publication を指定し、変更の対象となる、スケジュールまたはセキュリティ資格情報関連のパラメーターを少なくとも 1 つ指定します。

    重要

    可能であれば、実行時、ユーザーに対してセキュリティ資格情報の入力を要求します。 スクリプト ファイルに資格情報を格納する必要がある場合は、不正アクセスを防ぐために、ファイルを保護します。

  3. コマンド プロンプトから Replication Snapshot Agent を実行するか、スナップショット エージェント ジョブを起動して新しいスナップショットを生成します。 詳しくは、「 初期スナップショットの作成および適用」をご覧ください。

既存のマージ パブリケーションに対してスナップショットのプロパティを変更するには

  1. パブリッシャー側のパブリケーション データベースに対して sp_changemergepublicationを実行します。 @force_invalidate_snapshot の値に 1 および @property** に次のいずれかの値を指定します。

    • alt_snapshot_folder - @value に代替スナップショットへの新しいパスも指定します。
    • compress_snapshot - 代替スナップショット フォルダー内のスナップショット ファイルを CAB ファイル形式で圧縮するかどうかを示すには、@valuetrue または false も指定します。
    • pre_snapshot_script - 初期化時、初期スナップショットが適用される前にサブスクライバーで実行される .sql ファイルのファイル名と完全パスも @value に指定します。
    • post_snapshot_script - 初期化時、初期スナップショットが適用される後にサブスクライバーで実行される .sql ファイルのファイル名と完全パスも @value に指定します。
    • snapshot_in_defaultfolder - スナップショットを既定の場所に格納するかどうかを true または false で指定します。
  2. コマンド プロンプトから Replication Snapshot Agent を実行するか、スナップショット エージェント ジョブを起動して新しいスナップショットを生成します。 詳しくは、「 初期スナップショットの作成および適用」をご覧ください。

次の例では、代替スナップショット フォルダーと圧縮スナップショットを使用したパブリケーションを作成します。

-- 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'AdventureWorks2022'; 
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