前言: SQLServer的復(fù)制技術(shù)最少從SQLServer2000時代已經(jīng)出現(xiàn),當(dāng)初是為了分布式計算,不是為了高可用。但是到了今天,復(fù)制也成為了一種高可用技術(shù),并且被廣泛使用。很多問題都通過復(fù)制得以解決。 復(fù)制組件: 復(fù)制說白了就是一種發(fā)布/訂閱模式,但是這種模
SQLServer的復(fù)制技術(shù)最少從SQLServer2000時代已經(jīng)出現(xiàn),當(dāng)初是為了分布式計算,不是為了高可用。但是到了今天,復(fù)制也成為了一種高可用技術(shù),并且被廣泛使用。很多問題都通過復(fù)制得以解決。
復(fù)制說白了就是一種發(fā)布/訂閱模式,但是這種模式并不容易理解。下面介紹一下復(fù)制技術(shù)的一些概念。提醒一下,這里的復(fù)制在英文中不是COPY,而是Replication。它包含三個組件:發(fā)布者、分發(fā)者和訂閱者。三者缺一不可,并且均以在發(fā)布和訂閱中定義的項目為操作單元。
圖中上半部分是分發(fā)者和發(fā)布者均在一個實(shí)例上的情況,下半部分是三者都分開實(shí)例。
粗略來說,SQLServer有三種主要的復(fù)制類型:快照復(fù)制、合并復(fù)制和事務(wù)復(fù)制。這里先簡單介紹,后續(xù)會詳細(xì)并演示每一種類型。
每次運(yùn)行時,會創(chuàng)建被發(fā)布對象的完整副本及其數(shù)據(jù),并使用SQLServer的BCP工具把每個表的內(nèi)容寫入到快照文件夾中。這類快照文件夾是由分發(fā)者創(chuàng)建的共享文件夾。復(fù)制過程中的所有參與者都必須能夠訪問快照文件夾。
每次快照復(fù)制開始運(yùn)行后,分發(fā)者會從發(fā)布中抓取已配置的發(fā)布項的當(dāng)前快照,并傳送給訂閱者,然后應(yīng)用到訂閱數(shù)據(jù)庫中,當(dāng)應(yīng)用新快照時,訂閱數(shù)據(jù)庫上的項目會被刪除并按新快照的內(nèi)容重建,這個過程只會在每次快照復(fù)制啟動時執(zhí)行一次,發(fā)布和訂閱端之間沒有持續(xù)的數(shù)據(jù)流,并且這個過程是高帶寬和存儲開銷的操作。
默認(rèn)情況下,其他類型的復(fù)制會在初始化時通過分發(fā)者,通過快照來同步所有的訂閱項。這種類型的復(fù)制最適合用于相對靜態(tài)的數(shù)據(jù)環(huán)境。
基于事務(wù)的一種復(fù)制類型,每個在發(fā)布項中的已提交的事務(wù)都會被掃描,并通過分發(fā)者傳輸?shù)接嗛喍?。這個掃描操作是由日志讀取器代理(log reader agent)通過讀取發(fā)布數(shù)據(jù)庫中的事務(wù)日志完成。如果已發(fā)布項中有修改,會把修改記錄在分發(fā)者的分發(fā)數(shù)據(jù)庫中。然后從分發(fā)數(shù)據(jù)庫上,按照當(dāng)前的訂閱類型,應(yīng)用到訂閱者中。
事務(wù)復(fù)制可以接近實(shí)時同步,并只占用少量的發(fā)布者空間。同時,這種類型的復(fù)制可以配置成數(shù)據(jù)雙向移動,但是事務(wù)復(fù)制的最初設(shè)計是僅僅用于單向的。
最初的設(shè)計是用于允許修改發(fā)生在發(fā)布者和訂閱者上。同時,合并復(fù)制在訂閱者不能持續(xù)連到發(fā)布者,可能隔天連一次這種情景下也很有用。這種情景下,可以每天晚上同步,但是當(dāng)一個數(shù)據(jù)被同時來自于不同發(fā)布者的數(shù)據(jù)所修改時,就會產(chǎn)生沖突??梢酝ㄟ^一些配置來解決。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com