搜尋本站文章

2017-02-12

[SQL Server 複寫]:產生「快照集(Snapshot)」期間,不會產生「共用鎖定(share locks)」


在「快照式複寫/交易式複寫」於建立「快照集(Snapshot)」期間,將設置「共用鎖定(share locks)」於發行集內所有資料表,其目的是避免去更新正在發行中的資料表。

若要避開「共用鎖定(share locks)」所造成的影響,可以使用幾個方式:


  • 「並行快照集處理(Concurrent Snapshot Processing)」、「資料庫快照集(database snapshot)」。
  • 調整複寫預存程序 sp_addpublication 的 @sync_method參數來達成:concurrent、database snapshot


(1)「並行快照集處理(Concurrent Snapshot Processing)」


  • 使用「並行快照集處理(Concurrent Snapshot Processing)」(此為交易式複寫的預設行為)。
  • 在建立整個快照集期間,不會產生「共用鎖定(share locks)」,這可以讓使用者在複寫於建立與初始化快照集期間,不受到影響繼續作業。
  • 產生所有資料表的原生模式大量複製程式輸出,但在快照集期間,不鎖定資料表。
  • 只支援交易式發行集使用這個項目。 不支援 Oracle 發行者使用這個值。


(2)使用「資料庫快照集(database snapshot)」


  • 從資料庫快照集產生所有資料表的原生模式大量複製程式輸出。
  • SQL Server 2005 Enterprise版本,開始支援資料庫快照,並非每一個版本都可以使用。
  • SQL Server 2016 SP1 Enterprise、Standard、Web、Express with Advanced Services、Express等版本,開始支援。






示範環境
SQL Server 2016 SP1 Enterprise Edition

(1)「快照式複寫」的發行集,sp_addpublication 的 @sync_method參數,預設使用:native

-- 31_快照式複寫_發行集_Native



使用 SQL Trace 觀察「DatabaseName」

  • Application Name:Snapshot BCP thread #3 for publication Pubs_Tran
  • DatabaseName: pubs



-- 32_Trace_快照式複寫_發行集_Native



-- 33_Trace_快照式複寫_發行集_Native


-- 34_系統檢視表_快照式複寫_發行集_Native






(2)「交易式複寫」的發行集,sp_addpublication 的 @sync_method參數,預設使用:concurrent

-- 41_交易式複寫_發行集_concurrent



-- 42_交易式複寫_發行集_database snapshot




使用 SQL Trace 觀察「DatabaseName」

  • ApplicationName:Snapshot BCP thread #3 for publication NW_Snapshot
  • DatabaseName: Replicatin Snapshot - NW_Snapshot - Northwind


-- 43_交易式複寫_發行集_database snapshot



-- 44_系統檢視表_交易式複寫_發行集_database snapshot






參數說明





錯誤訊息

訊息 14100,層級 16,狀態 1,行 142
當使用並行的快照集處理來訂閱發行集時,請指定所有的發行項。





參考資料

異動複寫
https://msdn.microsoft.com/zh-tw/library/ms151176.aspx

交易式複寫的運作方式
https://technet.microsoft.com/zh-tw/library/ms151706(v=sql.105).aspx

sp_addpublication (Transact-SQL)
https://msdn.microsoft.com/zh-tw/library/ms188738(v=sql.105).aspx

SQL Server 2012 版本支援的功能
https://msdn.microsoft.com/zh-tw/library/cc645993(v=sql.110).aspx

Transactional FAQs
http://www.replicationanswers.com/transactional.asp

sp_changepublication (Transact-SQL)
https://msdn.microsoft.com/zh-tw/library/ms188413.aspx

sp_addsubscription
https://msdn.microsoft.com/zh-tw/library/ms181702.aspx

Does Transactional Replication Include Structural Changes Made to a Database
http://www.sql-server-performance.com/2015/transactional-replication-replicates-the-structural-changes/

Adding Article in Existing Tranactional Replication -- Step by Step
http://ansqldba.blogspot.tw/2012/02/adding-new-article-to-existing.html

Specify all articles when subscribing to a publication using concurrent snapshot processing.
https://blogs.msdn.microsoft.com/repltalk/2012/04/04/specify-all-articles-when-subscribing-to-a-publication-using-concurrent-snapshot-processing/

SQL Server Transacational Replication Issue while adding a new article
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/4e57cc76-8ed4-4b27-b5f0-35b60a239b2d/sql-server-transacational-replication-issue-while-adding-a-new-article?forum=sqlreplication

Replication – Snapshot is not getting generated
https://learnsqlteam.com/2016/05/26/replication-snapshot-issue/

資料庫快照集 (SQL Server)
https://msdn.microsoft.com/zh-tw/library/ms175158.aspx

How to use ‘database snapshot’ sync_mode while creating a new Tran/snapshot publication using sp_addpublication
https://blogs.msdn.microsoft.com/mangeshd/2008/05/30/how-to-use-database-snapshot-sync_mode-while-creating-a-new-transnapshot-publication-using-sp_addpublication/

資料庫快照集 (Database Snapshot) 壞了、損毀,對於原本資料庫的影響?
http://sharedderrick.blogspot.tw/2008/09/database-snapshot.html