啟用交易式發行集的可更新訂閱
本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 2014 中啟用交易式發行集的更新訂閱。
注意
未來的 Microsoft SQL Server 版本將移除這項功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
開始之前
安全性
可能的話,會在執行階段提示使用者輸入安全性認證。 如果您必須將認證儲存在指令碼檔案中,則必須維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。
使用 SQL Server Management Studio
在「新增發行集精靈」的 [發行集類型] 頁面上,為交易式發行集啟用更新訂閱。 如需使用此精靈的詳細資訊,請參閱建立發行集。 建立發行集之後您將無法啟用更新訂閱。
若要使用更新訂閱,您還必須在「新增訂閱精靈」中設定選項。 如需詳細資訊,請參閱 建立交易式發行集的可更新訂閱。
若要啟用更新訂閱
在「新增發行集精靈」的 [發行集類型] 頁面上,選取 [具有可更新訂閱的交易式發行集]。
在 [代理程式安全性] 頁面上,為「佇列讀取器代理程式」、「快照集代理程式」和「記錄讀取器代理程式」指定安全性設定。 如需「佇列讀取器代理程式」執行時使用帳戶所需權限的詳細資訊,請參閱< Replication Agent Security Model>。
注意
即使您僅使用立即更新訂閱,也會設定「佇列讀取器代理程式」。
使用 TRANSACT-SQL
當您以程式設計方式使用複寫預存程序來建立交易式發行集時,可以啟用立即訂閱或佇列更新訂閱。
建立可支援立即更新訂閱的發行集
必要時,請為發行集資料庫建立記錄讀取器代理程式作業。
如果記錄讀取器代理程式作業已存在發行集資料庫中,請繼續進行步驟 2。
如果您不確定發行的資料庫是否有記錄讀取器代理程式作業存在,請在發行集資料庫的發行者端執行 sp_helplogreader_agent (Transact-SQL)。 如果結果集是空的,就必須建立記錄讀取器代理程式作業。
在發行者端,執行 sp_addlogreader_agent (Transact-SQL)。 指定代理程式執行 @job_name 和 @password的 Microsoft Windows 認證。 如果代理程式會在連線到發行者時使用 SQL Server 驗證,您也必須為 @publisher_security_mode 指定 0 值,並為 @publisher_login 和 @publisher_password 指定 Microsoft SQL Server 的登入資訊。
執行sp_addpublication (Transact-SQL) ,指定參數@allow_sync_tran的true值。
在發行者端,執行 sp_addpublication_snapshot (Transact-SQL)。 針對 @publication 指定步驟 2 中所使用的發行集名稱,以及針對 @job_name 和 @password指定快照集代理程式執行時所使用的 Windows 認證。 如果代理程式會在連線到發行者時使用 SQL Server 驗證,您也必須為 @publisher_security_mode 指定 0 值,並為 @publisher_login 和 @publisher_password 指定 SQL Server 的登入資訊。 這麼做會為發行集建立快照集代理程式作業。
將發行項加入至發行集。 如需詳細資訊,請參閱 定義發行項。
在訂閱者上,建立此發行集的更新訂閱。 如需詳細資訊,請參閱 建立交易式發行集的可更新訂閱。
建立可支援佇列更新訂閱的發行集
必要時,請為發行集資料庫建立記錄讀取器代理程式作業。
如果記錄讀取器代理程式作業已存在發行集資料庫中,請繼續進行步驟 2。
如果您不確定發行的資料庫是否有記錄讀取器代理程式作業存在,請在發行集資料庫的發行者端執行 sp_helplogreader_agent (Transact-SQL)。 如果結果集是空的,就必須建立記錄讀取器代理程式作業。
在發行者端,執行 sp_addlogreader_agent (Transact-SQL)。 針對 @job_name 和 @password指定執行代理程式所使用的 Windows 認證。 如果代理程式會在連線到發行者時使用 SQL Server 驗證,您也必須為 @publisher_security_mode 指定 0 值,並為 @publisher_login 和 @publisher_password 指定 SQL Server 的登入資訊。
必要時,請為散發者建立佇列讀取器代理程式作業。
如果佇列讀取器代理程式作業已存在散發資料庫中,請繼續進行步驟 3。
如果您不確定散發資料庫的佇列讀取器代理程式作業是否存在,請在散發資料庫的散發者端執行 sp_helpqreader_agent (Transact-SQL) 。 如果結果集是空的,就必須建立佇列讀取器代理程式作業。
在散發者端,執行 sp_addqreader_agent (Transact-SQL) 。 針對 @job_name 和 @password指定執行代理程式所使用的 Windows 認證。 當佇列讀取器代理程式連接到發行者和訂閱者時,會使用這些認證。 如需詳細資訊,請參閱 複寫代理程式安全性模型。
執行sp_addpublication (Transact-SQL) ,針對參數指定true值@allow_queued_tran,並為@conflict_policy指定pub wins、sub reinit或sub wins的值。
在發行者端,執行 sp_addpublication_snapshot (Transact-SQL)。 指定步驟 3 中用於@publication的發行集名稱,以及快照集代理程式針對@snapshot_job_name和@password執行的 Windows認證。 如果代理程式會在連線到發行者時使用 SQL Server 驗證,您也必須為 @publisher_security_mode 指定 0 值,並為 @publisher_login 和 @publisher_password 指定 SQL Server 的登入資訊。 這麼做會為發行集建立快照集代理程式作業。
將發行項加入至發行集。 如需詳細資訊,請參閱 定義發行項。
在訂閱者上,建立此發行集的更新訂閱。 如需詳細資訊,請參閱 建立交易式發行集的可更新訂閱。
針對允許佇列更新訂閱的發行集變更衝突原則
- 在發行集資料庫的發行者上,執行 sp_changepublication (Transact-SQL) 。 為 @property 指定 conflict_policy 的值,以及為 @value指定所需的衝突原則模式 pub wins、 sub reinit 或 sub wins。
範例 (Transact-SQL)
此範例會建立一個發行集,它同時支援立即訂閱和佇列更新提取訂閱。
-- To avoid storing the login and password in the script file, the values
-- are passed into SQLCMD as scripting variables. 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 transactional publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2012';
SET @publication = N'AdvWorksProductTran';
SET @login = $(Login);
SET @password = $(Password);
USE [AdventureWorks]
-- Enable transactional replication on the publication database.
EXEC sp_replicationdboption
@dbname=@publicationDB,
@optname=N'publish',
@value = N'true';
-- Execute sp_addlogreader_agent to create the agent job.
EXEC sp_addlogreader_agent
@job_login = @login,
@job_password = @password,
-- Explicitly specify the use of Windows Integrated Authentication (default)
-- when connecting to the Publisher.
@publisher_security_mode = 1;
-- Create a transactional publication that supports immediate updating,
-- queued updating, and pull subscriptions.
EXEC sp_addpublication
@publication = @publication,
@status = N'active',
@allow_sync_tran = N'true',
@allow_queued_tran = N'true',
@allow_pull = N'true',
@independent_agent = N'true',
-- Explicitly declare the related default properties
@conflict_policy = N'pub wins';
-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password,
-- Explicitly specify the use of Windows Integrated Authentication (default)
-- when connecting to the Publisher.
@publisher_security_mode = 1;
GO
--Declarations for adding an article.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @owner = N'Production';
-- Add a horizontally and vertically filtered article for the Product table.
USE [AdventureWorks2012]
EXEC sp_addarticle
@publication = @publication,
@article = @article,
@source_table = @article,
@vertical_partition = N'false',
@type = N'logbased',
@source_owner = @owner,
@destination_owner = @owner;
GO
另請參閱
設定佇列的更新衝突解決選項 (SQL Server Management Studio)
異動複寫的發行集類型
Updatable Subscriptions for Transactional Replication
建立發行集
建立交易式發行集的可更新訂閱
Updatable Subscriptions for Transactional Replication
以指令碼變數使用 sqlcmd