[SQL SERVER][HA]資料庫複寫#簡介
如果子公司資料庫需要即時知道總公司資料異動(例如保單資料),
這時複寫作業就是很好的高可用性解決方案之一。
這篇我自己來整理一下相關複寫作業資料,
並實際操作如何建置交易式複寫。
複寫概觀
SQL Server 複寫作業,用於將資料和資料庫物件從某個資料庫複製和散發到另一個資料庫(分散式資料處理過程),
然後在兩個資料庫之間進行同步處理以維護一致性,可做為高可用性解決方案之一。
複寫方式類型
交易式複寫:交易式複寫概觀
合併式複寫:合併式複寫概觀
快照式複寫:快照式複寫概觀
複寫主要組成
發行項:
用以識別包含在發行集中資料庫物件的發行項。發行集可包含不同類型的發行項,
其中包括資料表、檢視、預存程序和其他物件。當您將資料表當作發行項來發行時,
您可以利用篩選來限制傳送給訂閱者之資料的資料行和資料列,
複寫作業中的散發資料基本單位。
發行集:
發行集是單一資料庫之一或多個發行項的集合。將多個發行項分組到單一發行集,
會比較容易指定一組當作一個單元來複寫的邏輯相關之資料庫物件和資料,
複寫作業中的傳送單位。
篩選發行的資料:
只會傳送和複寫篩選過的資料列或資料行。可參考篩選發行的資料。
複寫角色
發行者(Publisher):
發行者可以有一或多個發行集,每個發行集各定義一組邏輯相關的物件及要複寫的資料。
負責管理複寫的作業方式並維護複寫的主要資料庫。
訂閱者(Subsecriber):
訂閱者可以接收多個發行者和發行集的資料。依所選的複寫類型而定,
訂閱者也可以將資料變更傳回發行者,或將資料重新發行到其他訂閱者。
散發者(Distributor):
散發者是一個作為儲存器的資料庫執行個體,用於儲存與一或多個「發行者」相關聯的複寫特定資料。
每個發行者都會關聯於散發者端的單一資料庫 (稱為散發資料庫)。
散發資料庫儲存複寫狀態資料和有關發行集的中繼資料,
有時它還作為從發行者移動至訂閱者之資料的佇列。在許多情況下,
單一資料庫伺服器執行個體可同時作為發行者和散發者,稱之為本機散發者。
當在單獨的資料庫伺服器執行個體上設定發行者與散發者時,散發者稱為遠端散發者。
複寫代理程式
複寫使用了許多名為代理程式的獨立程式,以執行與追蹤變更和散發資料有關的工作。
依預設,複寫代理程式作為在 SQL Server Agent 中排定的作業來執行,
且必須執行 SQL Server Agent 方可執行這些作業。
複寫代理程式也可以從命令列執行,或透過使用「複寫管理物件」(RMO) 的應用程式執行。
複寫代理程式可以透過「SQL Server 複寫監視器」和 SQL Server Management Studio 進行管理。
快照集代理程式(Snapshot Agent)
會依照設定在發行者產生資料快照集並傳送至訂閱者。
主程式(C:\Program Files\Microsoft SQL Server\100\COM\snapshot.exe)。
參考複寫快照集代理程式。
紀錄讀取器代理程式(Log Reader Agent)
只能在交易式複寫來使用,它可將標示為複寫的交易,
自發行者的交易記錄寫至散發資料庫中。
每個使用交易式複寫發行的資料庫都擁有其自己的記錄讀取器代理程式,
該代理程式在散發者端執行並連接到發行者
(散發者可與發行者在同一台電腦)。
主程式(C:\Program Files\Microsoft SQL Server\100\COM\logread.exe)。
參考複寫紀錄讀取器代理程式。
散發代理程式(Distribution Agent)
可用在快照式和交易式複寫。兩個主要功能就是套用快照集和傳送交易並散發至所有訂閱者。
主程式(C:\Program Files\Microsoft SQL Server\100\COM\DISTRIB.exe)。
參考複寫散發代理程式。
合併代理程式(Merge Agent)
只能在合併式複寫使用。它可將初始快照集套用到訂閱者,
傳送並使累加的資料變更一致。每個合併訂閱都有其合併代理程式,
以連接發行者和訂閱者,並更新這兩者。
合併代理程式在發送訂閱的散發者端或是提取訂閱的訂閱者端執行。
依預設,合併代理程式將變更從訂閱者上載到發行者,
然後再將變更從發行者下載至訂閱者。
主程式(C:\Program Files\Microsoft SQL Server\100\COM\replmerg.exe)。
參考複寫合併代理程式。
佇列讀取器代理程式(Queue Reader Agent)
只能在快照式和交易式複寫使用。
只存在一個佇列讀取器代理程式的執行個體,
來服務所有的發行者和指定散發資料庫的發行集。
主程式(C:\Program Files\Microsoft SQL Server\100\COM\qrdrsvc.exe)。
參考複寫佇列讀取器代理程式。
複寫代理程式重要參數設定
QueryTimeOut: 這是查詢逾時之前的秒數。預設值是 1800 秒。
ReadBatchSize: 這是每個處理循環中從發行資料庫之交易記錄讀取出的最大交易數目,
預設值為 500。代理程式將繼續以批次方式讀取交易,直到從記錄中讀取所有交易為止。這個參數不支援 Oracle 發行者。
該參數沒有一定的值,請依環境調整到符合需求即可。
PollingInterval: 這是針對複寫交易查詢記錄的頻率 (以秒為單位)。預設值是 5 秒。
預設值5秒或許對於某些環境來說可能查詢太過頻繁。
複寫散發代理程式重要參數設定
CommitBatchSize: 這是發出 COMMIT 陳述式之前,要發送至訂閱者的交易數目。預設值是 100。
提高該參數可能會產生很多Lock,降低該參數可以加強Replication效能,這之間DBA需取得一個平衡。
Performance Tuning and Optimization Resource