複製(1) SQLServer 複製簡介

2021-06-21 07:41:26 字數 1132 閱讀 7293

sqlserver的複製技術最少從sqlserver2000時代已經出現,當初是為了分布式計算,不是為了高可用。但是到了今天,複製也成為了一種高可用技術,並且被廣泛使用。很多問題都通過複製得以解決。

複製說白了就是一種發布/訂閱模式,但是這種模式並不容易理解。下面介紹一下複製技術的一些概念。提醒一下,這裡的複製在英文中不是copy,而是replication。它包含三個元件:發布者、分發者和訂閱者。三者缺一不可,並且均以在發布和訂閱中定義的專案為操作單元。

圖中上半部分是分發者和發布者均在乙個例項上的情況,下半部分是三者都分開例項。

粗略來說,sqlserver有三種主要的複製型別:快照複製、合併複製和事務複製。這裡先簡單介紹,後續會詳細並演示每一種型別。

每次執行時,會建立被發布物件的完整副本及其資料,並使用sqlserver的bcp工具把每個表的內容寫入到快照資料夾中。這類快照資料夾是由分發者建立的共享資料夾。複製過程中的所有參與者都必須能夠訪問快照資料夾。

每次快照複製開始執行後,分發者會從發布中抓取已配置的發布項的當前快照,並傳送給訂閱者,然後應用到訂閱資料庫中,當應用新快照時,訂閱資料庫上的專案會被刪除並按新快照的內容重建,這個過程只會在每次快照複製啟動時執行一次,發布和訂閱端之間沒有持續的資料流,並且這個過程是高頻寬和儲存開銷的操作。

預設情況下,其他型別的複製會在初始化時通過分發者,通過快照來同步所有的訂閱項。這種型別的複製最適合用於相對靜態的資料環境。

基於事務的一種複製型別,每個在發布項中的已提交的事務都會被掃瞄,並通過分發者傳輸到訂閱端。這個掃瞄操作是由日誌讀取器**(log reader agent)通過讀取發布資料庫中的事務日誌完成。如果已發布項中有修改,會把修改記錄在分發者的分發資料庫中。然後從分發資料庫上,按照當前的訂閱型別,應用到訂閱者中。

事務複製可以接近實時同步,並只占用少量的發布者空間。同時,這種型別的複製可以配置成資料雙向移動,但是事務複製的最初設計是僅僅用於單向的。

最初的設計是用於允許修改發生在發布者和訂閱者上。同時,合併複製在訂閱者不能持續連到發布者,可能隔天連一次這種情景下也很有用。這種情景下,可以每天晚上同步,但是當乙個資料被同時來自於不同發布者的資料所修改時,就會產生衝突。可以通過一些配置來解決。

1 sqlserver修改表結構

增加字段 alter table 表名 add 新增欄位名 字段型別 預設值 alter table stu add jj int default 0刪除字段 alter table 表名 drop column 欄位名 alter table stu drop column jj 如果字段設定了預...

sql server複製程式設計

unit unit1 inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,olectrls,sqlmergxlib tlb,stdctrls,buttons type tfor...

1 sql server 中merge的用法

merge 要更新的表名 as target using 這裡是用什麼資料來源來跟新 as source 這裡是資料來源的所有列名 on 這裡是要更新的表和資料來源的匹配條件when matched then update set contractsize source.contractsize,c...