可以使用复制存储过程以编程方式定义和修改快照属性,其中使用的存储过程取决于发布的类型。
在创建快照或事务发布时,设置快照属性配置
在发布服务器上,执行 sp_addpublication。 为 @publication 指定发布名称,为 @repl_freq 选择 快照 或 连续 作为值,并指定以下一个或多个与快照相关的参数:
@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快照或连续值,以及以下一个或多个与快照相关的参数:
@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 -also 为 @value指定备用快照文件夹的新路径。
compress_snapshot - 还指定 @value的值为 true 或 false,以指示备用快照文件夹中的快照文件是否以 CAB 文件格式压缩。
pre_snapshot_script - 也用于 @value 指定将在初始化期间初始快照应用之前在订阅服务器上执行的 .sql 文件的文件名和完整路径。
post_snapshot_script - 还用于 @value 指定在应用初始快照后在订阅服务器上执行的 .sql 文件的文件名和完整路径。
snapshot_in_defaultfolder - 还指定值为 true 或 false ,以指示快照是否仅在非默认位置可用。
(可选)在发布服务器上,对发布数据库执行 sp_changepublication_snapshot。 指定 @publication 和一个或多个正在被更改的计划或安全凭据参数。
重要
如果可能,请提示用户在运行时输入安全凭据。 如果必须在脚本文件中存储凭据,则必须保护该文件以防止未经授权的访问。
从命令提示符运行 复制快照代理 ,或启动快照代理作业以生成新快照。 有关详细信息,请参阅 “创建并应用初始快照”。
修改现有合并发布的快照属性设置
在发布服务器上,对发布数据库执行 sp_changemergepublication。 为@force_invalidate_snapshot指定值 1,并为@property指定以下值之一:
alt_snapshot_folder -also 为 @value指定备用快照文件夹的新路径。
compress_snapshot - 还指定 @value的值为 true 或 false,以指示备用快照文件夹中的快照文件是否以 CAB 文件格式压缩。
pre_snapshot_script - 同时也用于@value指定在初始快照应用之前在订阅服务器上执行的.sql文件的文件名和完整路径。
post_snapshot_script - 还用于 @value 指定在应用初始快照后在订阅服务器上执行的 .sql 文件的文件名和完整路径。
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