SQL Server 2000 提供了比以前版本更多的復制選項,其中包括立即更新訂購者,排隊更新,以排隊更新作為熱備份的立即更新,傳遞復制數據,過濾出版數據等。其中前三個選項表示可在訂購者處對復制數據進行修改,然後將修改以相應的方式反映到出版者那裡。如果在復制中使用這些復制選項,將使復制的配置和管理更為困難,所以很有必要對這些復制選項有著更為清晰的認識和了解。
16.6.1 立即更新訂購者
所謂立即更新訂購者是指在復制時使用了立即更新選項。通常而言,快照復制和事務復制都是單向數據復制即數據從出版者的源數據庫復制到訂購者的目標數據庫。但是SQL Server 通過允許訂購者來修改復制數據而增強了這種模式的功能。立即更新訂購者選項允許既可以在出版者也可以在訂購者處對復制數據進行修改。立即更新是指對復制數據進行修改的訂購者與出版者之間保持數據的立即更新,即立即將訂購者的修改反映到出版者那裡。並且提供了對其它訂購者而言的潛在事務一致性,即訂購者的修改在立即反映到出版者那裡之後,允許這一修改不必馬上同步到其它訂購者那裡。在創建出版物時對該選項進行設置。
應該強調的是,在對數據進行修改的訂購者與出版者之間使用了兩階段提交協議,從而要求當訂購者對數據的修改在出版者那裡被成功提交之後,這一修改才會在該訂購者處被提交。如果提交成功,然後出版者才會在分發代理執行時(如果是快照復制,則也可以是在快照被刷新時),把這種修改分發到其它的訂購者那裡。
與完全的兩階段提交協議相比,立即更新訂購者選項降低了復制的復雜性以及事務提交失敗的可能性。因為完全的兩階段協議要求所有參與事務的服務器之間必須有可靠的網絡連接,並且對數據的修改只有在所有的參與者中都被成功提交才會生效但當設置立即更新訂購者選項時,由於僅在對復制數據進行修改的訂購者與出版者之間使用了二階段提交協議,所以事務的完整性仍得到很好的維護,而在出版者和其它訂購者之間並不使用二階段提交協議,這樣便取消了所有參與者必須保持數據同步的復雜性。
注意:合並復制不允許使用立即更新訂購者選項。
在SQL Server 2000 中,若設置了立即更新訂購者選項則,需要以下組件的支持;
觸發器
存儲過程
Microsoft 的分布式事務協調器MS DTC
沖突檢測
環路檢測
1 觸發器觸發器位於訂購者,被用來捕捉在訂購者上發生的事務並利用遠程過程調用將事務提交給出版者。由於使用二階段提交協議,從而保證事務在出版者被成功提交後才會在訂購者那裡提交,如果提交失敗,則訂購者事務將回滾,從而使訂購者數據庫與出版者數據庫仍能保持同步。
2 存儲過程存儲過程位於出版者上,如果自訂購者上次接收復制數據以來,出版者數據庫發生的變化與訂購者提交的事務不發生沖突,才允許在出版者提交這些來自訂購者的事務。若有沖突發生,則拒絕事務提交,兩處的事務都將回滾。每篇論文都有為INSERT、 DELETE、 UPDATE 事務創建的存儲過程。
3 Microsoft 的分布式事務協調器(MS DTC)在觸發器使用存儲過程將訂購者事務提交給出版者時,需要Microsoft 的分布式事務協調器(MS DTC) 來管理出版者與訂購者之間的兩階段提交。遠程存儲過程使用BEGIN DISTRIBUTED TRANSACTION 來對MS DTC 進行初始化操作。
4 沖突檢測出版數據庫中的存儲過程使用時間戳來進行檢測,以確定某列被復制到訂購者之後是否又被修改。當訂購者提交立即更新事務時,它會把某行的所有列(包括時間戳列)送回到出版者,出版者利用存儲過程將該行當前(屬於出版者數據庫)的時間戳值與從訂購者送回的時間戳值進行比較,如果相同,表明在復制給訂購者之後沒有發生修改,則接收事務(用從訂購者送回的行值來修改該行的當前值)。