sql server將複製方式分為三大類,每乙個發布只能有一種複製型別,分別為:快照複製,事務複製和合併複製,如下圖。
快照複製
快照複製將發布的資料庫所有表的某個瞬間資料做成乙個映象,然後一次性複製到訂閱伺服器。中間的更新不會像其它複製型別那樣自動傳送到訂閱伺服器。由此可以看出選擇快照複製的的合格環境是:
1、使用者允許訂閱伺服器使用相對己過時的資料副本並且需要複製的整體資料量較小。
2、資料庫在短期內出現了大量更改並且需要複製的整體資料量較小。
事務複製
快照複製每次同步的是整個訂閱的內容。如果發布包括非常大的表,那麼勢必每次同步都需要生成很大的快照資料夾並將這些快照資料夾逐一匯入要訂閱資料庫中,因此同步時間和同步間隔都會很長。事務複製能夠有效地解決快照複製的這些缺陷。實現快速的資料同步。
事務複製在第一次設定好事務複製後,發布的表、儲存過程等都會被映象,之後每次對於發布伺服器所做的更改都會以日誌的方式傳送到訂閱伺服器。使得發布伺服器和訂閱伺服器幾乎可以保持同步(具體的工作方式將在下面繼續說明)。因此,可以看出事務複製的特點是:
1、發布伺服器和訂閱伺服器內容基本可以同步
2、發布伺服器,分發伺服器,訂閱伺服器之間的網路連線要保持暢通
3、訂閱伺服器也可以設定成請求訂閱,使得訂閱伺服器也可以不用一直和分發伺服器保持連線
4、適用於要求實時性的環境
合併複製:
合併複製即允許發布伺服器更新資料庫,也允許訂閱伺服器更新資料。定期將這些更新進行合併,使得發布的資料在所有的節點上保持一致。因此,有可能發布伺服器和訂閱伺服器更新了同樣的資料,當衝突產生時,並不是完全按照發布伺服器優先來處理衝突,而是根據設定進行處理。
由上面可以看出sql servre複製架構包含發布伺服器、分發伺服器、訂閱伺服器3種伺服器角色。配置sql server複製時,需要在發布伺服器上標識需要發布的專案(資料庫物件,這些物件構成乙個或者多個發布),然後在訂閱發布伺服器上發布。當完成上述配置後,複製**負責讀取發布器上發布物件的變更(根據發布物件的不同和配置的差異,變更可能是資料的變化情況將發布的變化傳送每個訂閱伺服器上。根據配置發布時所選擇的複製型別,上述過程會略有差異)
在實際的配置中,我們需要根據具體的需求選擇合適的複製型別。下面是複製的模型,會講一些複製的基本術語,避免在配置的時候不知所云。
複製的模型
專案:專案是sql server資料庫中的物件,它可以是表、檢視、儲存過程、自定義函式和其他物件。如果專案是乙個表,你可以通過新增篩選條件來過濾掉表中的某些行和列。
發布:發布是專案的乙個或多個專案的集合。一次發布可以包括不同型別的專案。通常我們將邏輯上相關聯的資料庫物件(比如外來鍵和被外來鍵關聯的兩個表)組合在一起形成乙個發面,這樣可以確保被複製的內容在邏輯上一致。
發布伺服器:發布伺服器是乙個資料庫例項,上面配了乙個或多個發布。這些發布中的物件和資料通過複製傳送給其它的伺服器或客戶端。
分發伺服器:也是乙個資料庫例項,它服務於乙個或多個發布伺服器。每個發布伺服器都對應分發伺服器中的乙個資料庫,這種關聯的資料庫被稱為分發資料庫。分發資料庫上儲存著狀態資訊以及每個發布的元資料。從發布伺服器發信訂閱者的資料會在分發伺服器上排除,依次傳送出去。
訂閱:訂閱就是將發布從分發伺服器傳送到訂閱伺服器上,根據資料傳送的方式,訂閱有兩種型別:推送訂閱和請求訂閱。
1) 推送訂閱(push):發布伺服器或分發伺服器(取決於所使用的複製型別)主動將資料更改傳送到訂閱伺服器,而無須訂閱伺服器發布請求。你有三種選擇來決定何時把發布推送到訂閱伺服器上:手動傳送、連續傳送、按計畫時間定期傳送。
2) 請求訂閱(pull):訂閱伺服器主動請求去獲得發布伺服器上所做的更改。這種模式下,接收發布的時間是由訂閱伺服器來確定的。
訂閱伺服器:訂閱伺服器是接收複製資料的資料庫例項。訂閱伺服器可以接收來自多個發布伺服器的資料。根據所選的複製型別,使用者可以在訂閱伺服器上對複製過來的資料做修改,然後將修改傳送回發布伺服器或者將資料重新發布到其它訂閱伺服器上。訂閱伺服器不一定是sql server,oraqcle 和ibm也可以使用攝像頭訂閱方式來訂閱『快照』和『事務發布』。
C List列表的深複製,引用型別深複製
student實體類 public class student public int age 準備乙個list列表,裡面放兩個元素。list originallist new list student s1 new student originallist.add s1 student s2 new...
C List列表的深複製,引用型別深複製
需求 深複製該列表。student實體類 public class student public int age 準備乙個list列表,裡面放兩個元素。list originallist new list student s1 new student originallist.add s1 stud...
ArrayList 的深複製與淺複製
arraylist是我在c 裡用得最多的乙個資料結構。其使用簡單,並且功能強大。arraylist 的容量是根據需要自動擴充套件的,能動態建立各種資料格式的鍊錶,以及對鍊錶裡面的元素進行新增 刪除等操作。arraylist的使用方法都比較簡單,容易搞錯的就是arraylist的複製問題。複製 arr...