共用方式為


啟用交易式發行集的更新訂閱

本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 2014 中啟用交易式發行集的更新訂閱。

備註

這項功能將在未來的 SQL Server Microsoft 版本中移除。 請避免在新的開發工作中使用此功能,並計劃修改目前使用此功能的應用程式。

開始之前

安全

可能的話,會在執行階段提示使用者輸入安全性認證。 如果您必須將認證儲存在指令碼檔案中,則必須維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。

使用 SQL Server Management Studio

在 [新增發行集精靈] 的 [ 發行集類型 ] 頁面上啟用交易式發行集的更新訂閱。 如需使用此精靈的詳細資訊,請參閱 建立發行集。 建立發行集之後,您無法啟用訂閱更新功能。

若要使用更新訂閱,您也必須在 [新增訂閱精靈] 中設定選項。 若要獲取更多資訊,請參閱 建立可更新的交易出版物訂閱

啟用更新訂閱

  1. 在 [新增發行集精靈] 的 [ 發行集類型 ] 頁面上,選取 [具有可更新訂閱的交易式發行集]。

  2. 在 [ 代理程式安全性] 頁面上,除了快照集代理程式和記錄讀取器代理程式之外,還要指定佇列讀取器代理程式的安全性設定。 如需佇列讀取器代理程序執行之帳戶所需許可權的詳細資訊,請參閱 複寫代理程式安全性模型

    備註

    即使您僅使用立即更新的訂閱,佇列讀取器代理程式也會被設定。

使用 Transact-SQL

使用複寫預存程式以程序設計方式建立交易式發行集時,您可以啟用立即或佇列更新訂閱。

建立支持訂閱可立即更新的刊物

  1. 如有必要,請為發行集資料庫設立日誌讀取代理作業。

    • 如果發行資料庫已經有記錄讀取器代理程式作業,請繼續進行步驟 2。

    • 如果您不確定發行資料庫是否存在日誌讀取器代理程式工作,請在發行資料庫的發行者執行sp_helplogreader_agent(Transact-SQL)。 如果結果集為空,則必須建立日誌讀取代理程式任務。

    • 在發行者上,執行 sp_addlogreader_agent (Transact-SQL) 。 指定代理程式在Microsoft Windows下執行的認證,包括@job_name和@password。 如果代理程式在連接到發行者時會使用 SQL Server 驗證,您也必須針對 @publisher_security_mode 指定 0 的值,以及@publisher_login@publisher_password的 Microsoft SQL Server 登入資訊。

  2. 執行 sp_addpublication (Transact-SQL),指定參數@allow_sync_trantrue 值。

  3. 在發行者上,執行 sp_addpublication_snapshot (Transact-SQL) 。 指定步驟 2 中用於 @publication 的發行集名稱,以及快照集代理 程式執行@job_name@password的 Windows 認證。 如果代理程式在連接到發行者時會使用 SQL Server 驗證,您也必須針對 @publisher_security_mode 指定 0 值,以及@publisher_login@publisher_password的 SQL Server 登入資訊。 這會為發行建立快照代理程式工作。

  4. 將文章新增到出版物中。 如需詳細資訊,請參閱 定義發行項

  5. 在訂閱者端,建立此發行集的更新訂閱。 如需詳細資訊,請參閱 建立可更新的交易出版訂閱

建立支持佇列更新訂閱的出版物

  1. 如有必要,請為發行資料庫建立記錄讀取器代理工作。

    • 如果發行集資料庫已經有記錄讀取器代理程式作業,請繼續進行步驟 2。

    • 如果您不確定發行的資料庫是否有記錄讀取器代理程序作業存在,請在發行集資料庫的發行者端執行sp_helplogreader_agent (Transact-SQL)。 如果結果集為空,則必須建立日誌讀取代理工作。

    • 在發行者上,執行 sp_addlogreader_agent (Transact-SQL) 。 指定執行 @job_name 的代理程式所需的 Windows 認證,並輸入 @password。 如果代理程式在連接到發行者時會使用 SQL Server 驗證,您也必須針對 @publisher_security_mode 指定 0 值,以及@publisher_login@publisher_password的 SQL Server 登入資訊。

  2. 如有必要,請為發行者建立佇列讀取器代理程序作業。

    • 如果散發資料庫中已存在佇列讀取器代理作業,請進行步驟 3。

    • 如果您不確定散發資料庫是否有佇列讀取器代理程序作業存在,請在散發資料庫的散發者端執行sp_helpqreader_agent (Transact-SQL)。 如果結果集為空,則必須創建佇列讀取代理作業。

    • 在散發者端,執行 sp_addqreader_agent (Transact-SQL) 。 指定代理程式以 Windows 認證來執行 @job_name 並設置密碼 @password。 當佇列讀取器代理程式連接到發行者和訂閱者時,會使用這些認證。 如需詳細資訊,請參閱 複寫代理程式安全性模型

  3. 執行 sp_addpublication (Transact-SQL),針對參數@allow_queued_tran指定 true 值,並針對 @conflict_policy 指定 pub winssub reinitsub wins 的值。

  4. 在發行者上,執行 sp_addpublication_snapshot (Transact-SQL) 。 指定步驟 3 中用於 @publication 的發行集名稱,以及快照集代理程式針對 @snapshot_job_name@password執行的 Windows 認證。 如果代理程式在連接到發行者時會使用 SQL Server 驗證,您也必須針對 @publisher_security_mode 指定 0 值,以及@publisher_login@publisher_password的 SQL Server 登入資訊。 這會為發行建立快照代理程式工作。

  5. 新增文章至出版物。 如需詳細資訊,請參閱 定義發行項

  6. 在訂閱者端,建立此發行集的更新訂閱。 如需詳細資訊,請參閱 建立交易式發行集的可更新訂閱

變更允許佇列更新訂閱的發行集衝突原則

  1. 在出版物資料庫的出版者上,執行sp_changepublication(Transact-SQL)。 針對@property指定conflict_policy值,並針對@value指定酒吧獲勝子重新初始化子取勝所需的衝突原則模式。

範例 (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)
交易式複製的發行類型
事務複製的可更新訂閱
創建出版物
建立交易式發行集的可更新訂閱
事務複製的可更新訂閱
搭配腳本變數使用 sqlcmd