設定快照集屬性 (複寫 Transact-SQL 程式設計)
適用於:SQL Server Azure SQL 受控執行個體
可以使用複寫預存程序來以程式設計的方式定義及修改快照集屬性,使用的預存程序將取決於發行集的類型而定。
在建立快照式或交易式發行集時,設定快照集屬性
在發行者上,執行 sp_addpublication。 針對
@publication
指定發行集名稱、針對@repl_freq
指定 snapshot 或 continuous 的值,並指定下列其中一或多個快照集相關的參數:@alt_snapshot_folder
- 如果從該位置 (而不是從快照集預設資料夾) 存取這個發行集的快照集,則指定路徑。@compress_snapshot
- 如果替代快照集資料夾中的快照集檔案已壓縮成 Microsoft CAB 檔案格式,請指定 true 值。@pre_snapshot_script
- 指定在套用初始快照集之前的初始化期間,將於訂閱者上執行之 .sql 檔案的檔案名稱和完整路徑。@post_snapshot_script
- 指定在套用初始快照集之後的初始化期間,將於訂閱者上執行之 .sql 檔案的檔案名稱和完整路徑。@snapshot_in_defaultfolder
- 如果快照集只能在非預設位置中使用時,請指定 false 的值。
如需有關建立發行集的詳細資訊,請參閱< Create a Publication>。
在建立合併式發行集時,設定快照集屬性
在發行者端,執行 sp_addmergepublication。 針對
@publication
指定發行集名稱、針對@repl_freq
指定 snapshot 或 continuous 的值,並指定下列其中一或多個快照集相關的參數:- alt_snapshot_folder - 如果從該位置 (而不是從快照集預設資料夾) 存取這個發行集的快照集,請指定路徑。
@compress_snapshot
- 如果替代快照集資料夾中的快照集檔案壓縮成 CAB 檔案格式,請指定 true 的值。@pre_snapshot_script
- 指定在套用初始快照集之前的初始化期間,將於訂閱者上執行之 .sql 檔案的檔案名稱和完整路徑。@post_snapshot_script
- 指定在套用初始快照集之後的初始化期間,將於訂閱者上執行之 .sql 檔案的檔案名稱和完整路徑。@snapshot_in_defaultfolder
- 如果快照集只能在非預設位置中使用時,請指定 false 的值。
如需有關建立發行集的詳細資訊,請參閱< Create a Publication>。
修改現有快照式或交易式發行集的快照集屬性
在發行集資料庫的發行者上,執行 sp_changepublication。 針對
@force_invalidate_snapshot
指定 1 的值,並針對@property
指定下列其中一個值:- alt_snapshot_folder - 也針對
@value
指定替代快照集資料夾的新路徑。 - compress_snapshot - 也針對
@value
指定 true 或 false 的值,以指示替代快照集資料夾中的快照集檔案是否壓縮成 CAB 檔案格式。 - pre_snapshot_script - 也針對
@value
指定在套用初始快照集之前的初始化期間,將於訂閱者上執行之 .sql 檔案的檔案名稱和完整路徑。 - post_snapshot_script - 也針對
@value
指定在套用初始快照集之後的初始化期間,將於訂閱者上執行之 .sql 檔案的檔案名稱和完整路徑。 - snapshot_in_defaultfolder - 也指定 true 或 false 的值,以指示快照集是否可在非預設位置中使用。
- alt_snapshot_folder - 也針對
(選擇性) 在發行集資料庫的發行者上,執行 sp_changepublication_snapshot。 指定
@publication
及正在變更之一或多個排程或安全性認證參數。重要
可能的話,會在執行階段提示使用者輸入安全性認證。 如果您必須將認證儲存在指令碼檔案中,則必須維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。
從命令提示字元執行 Replication Snapshot Agent 或是啟動快照集代理程式作業來產生新的快照集。 如需詳細資訊,請參閱 建立和套用初始快照集。
修改現有合併式發行集的快照集屬性
在發行集資料庫的發行者上,執行 sp_changemergepublication。 針對
@force_invalidate_snapshot
指定 1 的值,並針對@property**
指定下列其中一個值:- alt_snapshot_folder - 也針對
@value
指定替代快照集資料夾的新路徑。 - compress_snapshot - 也針對
@value
指定 true 或 false 的值,以指示替代快照集資料夾中的快照集檔案是否壓縮成 CAB 檔案格式。 - pre_snapshot_script - 也針對
@value
指定在套用初始快照集之前的初始化期間,將於訂閱者上執行之 .sql 檔案的檔案名稱和完整路徑。 - post_snapshot_script - 也針對
@value
指定在套用初始快照集之後的初始化期間,將於訂閱者上執行之 .sql 檔案的檔案名稱和完整路徑。 - snapshot_in_defaultfolder - 也指定 true 或 false 的值,以指示快照集是否可在非預設位置中使用。
- alt_snapshot_folder - 也針對
從命令提示字元執行 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