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 沖突檢測出版數據庫中的存儲過程使用時間戳來進行檢測,以確定某列被復制到訂購者之後是否又被修改。當訂購者提交立即更新事務時,它會把某行的所有列(包括時間戳列)送回到出版者,出版者利用存儲過程將該行當前(屬於出版者數據庫)的時間戳值與從訂購者送回的時間戳值進行比較,如果相同,表明在復制給訂購者之後沒有發生修改,則接收事務(用從訂購者送回的行值來修改該行的當前值)。
5 環路檢測環路檢測主要是基於以下考慮而被提出的,即如果訂購者的立即更新事務在出版者和訂購者都被成功提交後,出版者要在以後的某一時刻將該事務復制到其它訂購者,但是由於提交立即更新事務的訂購者已成功提交了該事務,因此也就沒有必要再將此事務從出版者那裡復制給該訂購者。如何解決該問題呢?環路檢測就是用來確定一事務是否已在某訂購者服務器處被成功提交,從而避免該事務又一次應用於訂購者服務器,最終因破壞了完整性約束(如向同一表中插入同一行)導致復制中止。
16.6.2 排隊更新訂購者排隊更新選項是SQL Server 2000 的新增功能。與立即更新訂購者一樣,排隊更新允許快照復制或事務復制的訂購者對復制數據的修改,然後將修改反映到出版者那裡。但不同的是,排隊更新並不要求訂購者與出版者之間的網絡連接一直處於激活狀態。
通常在創建出版物時對該復制選項進行設置,如果使用了排隊更新選項,那麼訂購者對復制數據的修改是保存在一個隊列中。當訂購者與出版者之間的網絡連接恢復時,這些隊列中的事務將按先後順序被應用到出版者。
由於訂購者對復制數據的修改是以異步的方式反映到出版者那裡的,所以,一旦同一數據被出版者或其它的訂購者修改,則容易出現復制數據的修改沖突。在創建出版物時,我們通常也要決定沖突的解決策略,從而對可以出現的沖突提供解決方案,保證復制數據的一致性。
如果用戶經常讀到數據,並且偶爾修改數據,則在該情況下推薦使用排隊修改,這樣訂購者即使在離線的情況下仍可以對復制數據進行修改。
在SQL Server 2000 中,若設置了立即更新訂購者選項,則需要以下組件的支持:
觸發器
隊列
存儲過程
隊列閱讀代理
1 觸發
觸發器依附在訂購者的出版表上,當進行排隊更新時,觸發器用來捕捉訂購者上執行的事務,然後將這些事務包在消息中並傳送到隊列中。
2 存儲過程
在創建出版物時,若指定了排隊更新選項,則在出版數據庫中對出版表執行插入、刪除、更新的存儲過程將自動生成。隊列閱讀代理將調用存儲過程在出版者上執行隊列中的事務,並進行沖突檢,測如有必要則產生一些補充命令,這些命令首先傳給分發數據庫,然後傳送給訂購者。除此之外,在出版者上仍要創建記錄沖突信息,並將沖突信息傳遞給相關訂購者的存儲過程,如果檢測到沖突,這些存儲過程將由隊列閱讀代理調用。
3 隊列
隊列主要用來存儲包含訂購者事務的消息,訂購者與分發者都有一個消息隊列。在網絡斷開的情況下,包含訂購者事務的消息首先存儲在訂購者消息隊列,然後在網絡接通時被傳送到分發者消息隊列。隊列閱讀代理讀到這些消息並將消息中的事務應用到出版者。
4 隊列閱讀代理
隊列閱讀代理運行在分發者上多線程代理,其主要任務就是從消息隊列中讀取信息並將事務應用到出版者。
16.6.3 轉換復制數據
轉換復制數據是SQL Server 2000 新增的功能。用可轉換訂購(Transformable subscriptions)來實現復制數據的轉換。可轉換訂購主要是利用數據轉換服務(DTS)所提供的功能,如數據移動、傳遞映射、過濾等,從而可以根據每個訂購者的具體要求來定制、發送復制數據。它可以在快照復制和事務復制中使用。比如,在以下情況下我們應該使用轉換復制數據選項:
根據每一訂購者對出版數據進行列或水平分割
在SQL Server 2000 以前的版本中,由於不同的訂購者需要不同的數據(這裡訂購者所需要的數據是指表在垂直或水平分割後的某一部分),所以必須把數據分割成不同的數據塊,從而在創建快照復制或事務復制時,也要分別為每一個訂購者創建不同的出版物。這給復制的管理和配置帶來極大的不便,由此可增加系統的負擔。但是在SQL Server 2000 中,可轉換訂購允許為同一出版物創建定制的數據分割(列或行分割),即同一出版物支持多個訂購,從而滿足不同訂購者對出版數據的不同需求。
創建數據轉換,如數據類型匹配、列操作(如兩列
您正在看的SQLserver教程是:SQL Server數據庫技術(111)。合成一列)、字符串操作、用戶自定義函數等。
使用可轉換訂購在出版者與訂購者之間進行基本的、簡單的數據轉換和列操作主要包括以下幾個方面:
改變數據類型(除主鍵列外)
重新命名某列
從某列提取子字符串或向某列添加額外的字符
對某列使用函數
在創建出版物時設置該選項。完成該選項設置後,將創建一個復制DTS 包,訂購者將把該DTS 包作為出版物的一部分。
下面我們將介紹在Enterprise Manager 中如何創建可轉換訂購。
首先,在創建出版物時要設置Transform Published Data 選項,在創建出版物的step6 (見16.3 快照復制圖16-24),在Updatable Subscriptions 對話框中不選中任何選項,然後單擊“下一步”,會打開Transform Published Data 對話框,如圖16-55。 所示在該對話框中選擇Yes, transform the data。 然後完成出版物的創建。
歡迎光臨
學網,
收藏本篇文章 [1] [2] [3] [4]
其次,在Enterprise Manager 創建可轉換訂購需要執行以下操作:
(1) 啟動SQL Server Enterprise Manager, 登錄到指定的服務器,順次打開 Replication、 Publication 文件夾。從中選擇設置了Transform Published Data 選項的出版物。
(2) 右擊該出版物,在彈出菜單中選擇Define Transformation of Publication 選項,打開Welcome to Transform Published Data 對話框,如圖16-56 所示。(有關該向導的余下操作請參看數據轉換服務DTS 一章)。
最後,按照訂購出版物的步驟向訂購者推出出版物。
16.6.4 代替同步伙伴(Alternate Synchronization Partners)
代替同步伙伴的功能使用合並復制的訂購者不僅可與創建訂購的出版者進行數據同步,而且也可以與其它訂購者服務器進行數據同步,即使主出版者不能繼續使用。當使用交替同步伙伴時,需要注意以下要求:
- 只有合並復制才可使用該新特征;
- 代替同步伙伴必須有訂購所需要的數據和論文結構;
- 在代替同步伙伴上的出版物最好是在原始出版者上所創建的出版物的克隆;
- 必須將出版物的屬性定義為訂購者可與其它出版者進行數據同步;
- 對於命名訂購,必須保證該訂購者也是代替同步伙伴的訂購者,這樣訂購者才能與其它出版者進行數據同步;
- 對於命名訂購,代替同步伙伴上自動添加與原始出版者上訂購具有相同屬性的新訂購;
16.6.5 過濾復制數據
過濾復制數據實質就是對出版表進行垂直、水平分割,在創建出版物時,我們需要確定使用怎樣的過濾策略。雖然過渡復制數據與可轉換訂購都提供了對數據的分割功能,但兩者仍存在一定的區別,主要表現在:可轉換訂購是根據每一訂購者對復制數據的需求,對同一出版物進行分割,從而創建不同的訂購,其中僅涉及到一個出版物;而過濾復制數據是在創建出版物時需要確定的選項,其分割的對象是出版表。
過濾復制數據主要能夠帶來以下幾個好處:
- 使通過網絡傳送的數據量最小化;
- 減少訂購者所需要的存儲空間;
- 根據每一個訂購者具體的要求定制出版物;
- 由於分割後的不同的數據塊復制到不同的訂購者,從而避免或減少了沖突產生的可能性。
過濾復制數據包括四種過濾類型:列過濾、行過濾、動態過濾和聯合過濾。其中列和行過濾可在快照復制、事務復制和合並復制中使用,但動態過濾和聯合過濾卻僅能在合並復制中使用。
1 行過濾(Row Filter)使用行過濾就是把某些特定的行發送給訂購者,清除那些用戶不必(或不應)看到的數據行,從而能為不同的訂購者創建不同的出版物。同時,由於不同的訂購者訂購是來自同一表的不同數據行,因此有助於避免因多個訂購者修改同一數據而導致的修改沖突。
行過濾可在合並復制、快照復制和事務復制中使用,但是,在事務復制中由於針對版表的每一數據操作語句(INSERT、 DELETE、 UPDATA) 都要使用過濾條件語句來進行驗證,以確定是否打上“復制”標志,所以,使用行過濾會極大地增加系統負載。
2 列過濾(Column Filter)
列過濾實質就是對表進行垂直分割。使用列過濾能夠減少訂購者需要的存儲空間,減少向訂購者傳送數據修改的時間。但是有些列不能從出版物中過濾出去,它們是:有主鍵約束的列;
沒有缺省值的非空列;
包含在惟一索引中的列;
合並復制以及立即更新訂購者的快照復制或事務復制中的ROWGUID 列。
3 動態過濾(Dynamic Filter)
動態過濾是指在合並復制的處理過程中,根據從訂購者那裡得到的數據值對出版表進行數據過濾。在合並復制中使用動態過濾能帶來以下好處:
出版者上幾乎不必存儲出版物從而減少因管理多個出版物而帶來的系統負載;
在動態過濾中使用用戶自定義的函數,這樣根據訂購者的屬性來進行數據過濾,從而使訂購者僅獲得必要的信息。
4 聯合過濾(Joint Filter)
聯合過濾允許在合並處理過程中定義兩個出版表中的關系。它常與行過濾一同使用,並在合並處理中保持聯合出版表之間的參照完整性。如果某一使用筆過濾的出版表被另外的出版表的外鍵所引用,那麼,外鍵表的論文必須要有一個聯合過濾器來代表其對主鍵表的依賴關系。
聯合過濾並不僅限於主鍵/外鍵關系,事實上也可以針對任何兩個不同的出版表的數據間的比較關系設置聯合過濾。