日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

SQL Server 的分散式資料複寫技術

發(fā)布時間:2025/4/5 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 的分散式資料複寫技術 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:楊先民

本頁內(nèi)容

前言
資料庫複寫(Replication)的介紹與使用時機(jī)
如何建置資料庫複寫
複寫代理程式 (Replication Agent) 的功能
複寫的種類與使用的時機(jī)
設(shè)計(jì)一個安全的複寫環(huán)境(Secure Replication)
結(jié)論

前言

經(jīng)常有朋友希望能夠?qū)⒐緝?nèi)部的資料庫分散到其他臺的 SQL Server 資料庫系統(tǒng),原因可能是因?yàn)槠匠]有備份資料庫的習(xí)慣,希望能夠利用資料庫分散的方式,把資料「備份」到另外一臺機(jī)器中,以達(dá)到實(shí)質(zhì)備份的目的。

在企業(yè)內(nèi)部有非常多機(jī)會可能需要將資料分散,本期文章將為您探討 SQL Server 中資料庫的複寫 (Replication) 技術(shù)。

本期文章會討論以下的主題:

  • 資料庫複寫(Replication)的介紹與使用時機(jī)

  • 如何建置資料庫複寫

  • 介紹複寫代理程式(Replication Agent)的功能

  • 設(shè)計(jì)一個安全的複寫環(huán)境(Secure Replication)


?

資料庫複寫(Replication)的介紹與使用時機(jī)

我們?nèi)舨幌忍岬?SQL Server 資料庫所提供的複寫技術(shù),光就名詞上來定義複寫的動作,實(shí)際上複寫只是很單純的將 A 資料庫的內(nèi)容複製一份到 B資料庫,換句話說,無論是 A 資料庫或是 B 資料庫,都會有一模一樣的資料。

得知了這樣的理論之後,我們想看看,其實(shí)在實(shí)務(wù)中,有很多中方式能夠達(dá)到上述的情境,例如:

(a) 定期利用 DTS 將資料複製到第二臺機(jī)器中。

(b) 定期備份 A 的資料庫到 B 的資料庫。

(c) 用 SQL Server 所提供的複寫功能。

換句話講,資料庫複製一份的觀念,並不是只能利用 SQL Server 所提供的複寫功能才能達(dá)到,應(yīng)該會有很多種方法,都能達(dá)到類似的相同功能。

但是,為什麼會需要用到 SQL Server 所提供的複寫功能呢?主要的原因是資料的自治 (Autonomy) 與延遲 (Latency) 上的考量。

SQL Server 所提供的複製機(jī)制,主要的考量點(diǎn)在於時間上的差異,也就是「同一時間,未必能看到兩臺 SQL Server 有相同的資料」,但是卻能夠確保最後的資料是一致的。

由這樣的理論來看,複製複寫能夠應(yīng)用的商業(yè)環(huán)境就有以下情形:

(a) 有多人需要存取或多臺資料庫需要相同資料庫的環(huán)境:

  • 讓遠(yuǎn)端使用者就地利之便取得資料,避免透過不穩(wěn)定或慢速的網(wǎng)路存取資料。

  • 行動裝置的使用者 (例如 Pocket PC) 在離線狀態(tài)時也能使用資料庫,並且在重新與網(wǎng)路連接時再將異動的資料同步回主資料庫中。

  • (b) 需要提升效能的環(huán)境

  • 將需要大量讀取的資料放在一臺機(jī)器,而需要大量寫入的資料放在另一臺機(jī)器,讓使用者可以執(zhí)行查詢與分析,不需要中斷原先資料庫的交易處理。

  • 根據(jù)不同業(yè)務(wù)單位所需要的資料不同,而進(jìn)行資料的散佈,例如會計(jì)部門只需要會計(jì)的相關(guān)資訊,就不需要散佈人事相關(guān)會用到的資料。

  • (c) 可以當(dāng)作待命伺服器

  • 一般的小企業(yè)沒有錢建立叢集伺服器,但又希望資料庫能夠有備援的機(jī)制,這時可以利用複寫達(dá)成這樣的功能。


  • ?

    如何建置資料庫複寫

    在建置 SQL Server 2000 的複寫之前,首先必需了解一些複寫的基本術(shù)語,我們只要將複寫當(dāng)成是一般出版業(yè)的相關(guān)名詞即可,請先參照圖一的內(nèi)容。


    圖一:複寫之中三個關(guān)係的示意圖。

    複寫在建置之前,必需先確定三種角色,分為是發(fā)行者 (Publisher)、散發(fā)者 (Distributor)、訂閱者 (Subscriber)。

    發(fā)行者(Publisher):

    • 維護(hù)來源資料庫。

    • 確保發(fā)行集資料可用於進(jìn)行複寫作業(yè)。

    • 維護(hù)該站臺中關(guān)於發(fā)行集的所有資訊。

    • 偵測有異動的發(fā)行集資料。

    • 將有異動的資料傳送給散發(fā)者(可以是位於同一臺或是不同的伺服器上)。

    散發(fā)者(Distributor):

    • 包含有散佈系統(tǒng)資料庫(Distribution System Database)。

    • 負(fù)責(zé)儲存歷程記錄資料及/或交易與中繼資料。

    • 可支援多個發(fā)行者。

    訂閱者(Subscriber):

    • 接收複寫資料(也就是發(fā)行集)的伺服器。

    • 保存資料副本。

    在發(fā)行者-訂閱者(Publisher-Subscriber)的觀念中,資料是組織成為發(fā)行集(Publication)與發(fā)行項(xiàng)(Article)。

    如果你以「書店買書」的觀念來看這些專有名詞的話,問題就簡單多了,首先發(fā)行者就是書店的老闆,他可以決定要賣什麼書給你 (發(fā)行項(xiàng)),但書依規(guī)定是要放在一個專櫃中出售的 (發(fā)行集),客人可以上門來買書,或是老闆定期將新的書用快遞 (散發(fā)者) 寄送到訂閱者的手中。

    在定義完角色之後,接下來再定義要發(fā)行何種內(nèi)容,就是所謂的發(fā)行項(xiàng)與發(fā)行集:

    發(fā)行項(xiàng) (Article):

    發(fā)行項(xiàng)可以是整個資料表、資料表的特定部分資料、預(yù)存程序、檢視表、預(yù)存程序、或是使用者自訂函數(shù)等等。

    何謂發(fā)行集 (Publication):

    發(fā)行集是一個或是多個發(fā)行項(xiàng) (Article) 的集合。也是訂閱資料的基本單位。舉例來說:你可以建立一個 Products 發(fā)行集,包含有資料表、預(yù)存程序以及與訂單有相關(guān)的資料。

    複寫必須要以發(fā)行集為單位,當(dāng)作訂閱的基本單位,不可以單獨(dú)僅訂閱特定的發(fā)行項(xiàng)。若要複寫的發(fā)行項(xiàng)有引用其他的資料庫物件,則也必須發(fā)行該物件所引用的物件。例如,如果發(fā)行特定一個檢視表(View),則必須將該檢視表所引用資料表,當(dāng)作此發(fā)行集的一部份。

    訂閱 (Subscription):

    訂閱是向複製資料庫的一項(xiàng)請求。可由「發(fā)行者」或「訂閱者」來發(fā)起此一程序。如果是由「發(fā)行者」發(fā)起的程序,稱為發(fā)送訂閱 (push),如果是由「訂閱者」發(fā)起的程序,稱為提取訂閱 (pull),有關(guān)發(fā)送訂閱與提取訂閱,如圖二:


    圖二:發(fā)送訂閱以及提取訂閱。

    如果把複寫當(dāng)成是購買書籍的話,發(fā)送訂閱就像雜誌社定期送書到讀者家中,而提取訂閱則是讀者自己走到書店買書,選用的時機(jī)如下表一:

    發(fā)送訂閱 (push)

    提取訂閱 (pull)

    誰發(fā)起訂閱工作

    發(fā)行者

    訂閱者

    安全性

    較高 (必需由發(fā)行者設(shè)定)

    較低 (允許匿名訂閱)

    訂閱者機(jī)器需求

    較低

    較高

    容納訂閱數(shù)量

    較低

    較高

    表一:發(fā)送訂閱以及提取訂閱的比較。


    ?

    複寫代理程式 (Replication Agent) 的功能

    SQL Server 的複寫機(jī)制,實(shí)際上是透過代理程式 (Agent) 來幫忙完成的,換句話說,在使用複寫功能時,必需要將 SQL Server Agent 服務(wù)啟動,才能順利進(jìn)行複寫的工作。

    SQL Server 所提供的複寫有三種類型,底層都有搭配的代理程式,如表二:

    快照式

    交易式

    合併式

    快照集代理程式

    快照集代理程式

    快照集代理程式

    散發(fā)代理程式

    散發(fā)代理程式

    ?
    ?

    記錄讀取代理程式

    合併代理程式

    ?

    佇列助讀員代理程式

    ?

    表二:各種複寫對應(yīng)到代理程式。

    快照集代理程式:

    這個代理程式主要會向雙方的機(jī)器確認(rèn)彼此的架構(gòu),並且傳遞發(fā)行者目前資料到訂閱者的機(jī)器中。

    散發(fā)代理程式:

    發(fā)行者透過散發(fā)代理程式定期將資料傳送到訂閱者的機(jī)器中。

    記錄讀取代理程式:

    這個代理程式守候在交易日誌 (log) 中,查詢是否有新增修改以及刪除的記錄。

    佇列助讀員代理程式:

    所有交易的動作都是循序的,為了確保 SQL Server 不會漏掉任何一筆交易記錄,得利用佇列助讀員確保最後資料一定會傳送到訂閱者資料庫。

    合併代理程式:

    用來處理合併式複寫的動作,以及衝突管理。


    ?

    複寫的種類與使用的時機(jī)

    由上得知,SQL Server 內(nèi)是利用代理程式定期做資料的複製複寫工作,而隨代理程式的不同,而有三種的複寫種類:

    快照式 (Snapshot) 複寫

    Snapshot,翻譯成快照,就好像照相一樣,將目前資料庫裡面當(dāng)下的所有資料喀嚓照下來,然後原封不動的寫到另一臺機(jī)器中。快照式複寫的使用時機(jī)是原本資料庫的內(nèi)容不常更新時,而因?yàn)橘Y料量的關(guān)係,會花較長的時間將資料傳送到訂閱者機(jī)器,而設(shè)定快照式複寫時,資料庫的欄位不需要設(shè)定主鍵 (Primary Key)。

    交易式 (Transactional) 複寫

    交易式複寫顧名思義是當(dāng)發(fā)行者資料庫有任何交易動作 (例如新增、修改、刪除動作),都會被散發(fā)到訂閱者資料庫中。當(dāng)使用交易式複寫時,資料的初始快照集會先傳送到訂閱者機(jī)器中,之後的交易記錄就會循序的傳送到訂閱者機(jī)器中。

    選用交易式複寫的時機(jī)在於,資料複寫的延遲性能壓到最小,兩臺機(jī)器資料一樣的時間能夠愈短,愈能做有效的資料處理,但在設(shè)定交易式複寫時,要確定資料表上有設(shè)定主鍵。

    合併式 (Merge) 複寫

    合併式複寫,是能夠讓訂閱者與發(fā)行者,可以互相修改彼此的資料。就好像現(xiàn)在的手機(jī)都有通訊錄,能和桌上型電腦的 Outlook 同步是一樣的道理。當(dāng)你修改手機(jī)上的資料,可以同步到桌上型的 Outlook,而修改桌上型 Outlook 資料,也可以同步到手機(jī)上。

    在使用合併式複寫的時機(jī)在於,雙方的資料庫需要互相異動,並且訂閱者常會處於離線的網(wǎng)路環(huán)境下,例如業(yè)務(wù)帶著客戶資料外出,可能會修改一些資料,最後再同步回發(fā)行者資料庫中。


    ?

    設(shè)計(jì)一個安全的複寫環(huán)境(Secure Replication)

    設(shè)計(jì) SQL Server 的複寫工作之前,首先請先確認(rèn)環(huán)境的建置,大多數(shù)無法順利建立複寫的原因,是因?yàn)榘踩缘脑O(shè)定不正確,而導(dǎo)致複寫無法順利設(shè)定完成。

    在設(shè)定複寫環(huán)境之前,我們只要想一下複寫的動作,自然就會了解為何安全性是如此的重要。

    如果複寫的環(huán)境設(shè)定不出來,不妨先簡化環(huán)境的設(shè)定。舉例來說,先把發(fā)行者、散發(fā)者與訂閱者三種角色都由一臺 SQL Server 扮演,這樣就一定能先測試成功,再來再慢慢的增加難度,以期能達(dá)到發(fā)行者、散發(fā)者與訂閱者分別用一臺機(jī)器來扮演。

    你可以用下面的步驟來檢視一下你的權(quán)限是否有設(shè)定正確:

  • A 機(jī)器要傳送資料到 B 機(jī)器,尤其是要利用代理程式幫忙傳送,一定得設(shè)定好權(quán)限。所以 SQL Server Agent 的登入帳號的權(quán)限不能太小,如果 A 機(jī)器與 B 機(jī)器都沒有加入網(wǎng)域的話,那麼你所設(shè)定的登入帳號必需要能完全存取 C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA 目錄的權(quán)限,如圖三與圖四。


    圖三:到控制臺的服務(wù),檢查一下登入帳號。


    圖四:設(shè)定 REPLDATA 的權(quán)限,確定登入帳號能完全控制。

  • 如果 A 機(jī)器與 B 機(jī)器有加入到網(wǎng)域,則 A 機(jī)器的登入帳號就用網(wǎng)域帳號進(jìn)行登入,同樣的也必需要設(shè)定 REPLDATA 目錄的安全性。

  • 將你要設(shè)定的散發(fā)者與訂閱者機(jī)器,利用 Enterprise Manager 註冊進(jìn)來。

  • 接下來就可以利用精靈來設(shè)定複寫了。

    複寫的設(shè)定的步驟如下:

  • 建立發(fā)行集。

  • 設(shè)定 push 或是 pull 發(fā)行集。

    因?yàn)檫@兩個動作所要做的步驟都是用精靈完成,而每個步驟所要做的事情都蠻重要的,所以就用一個步驟一個步驟介紹,分別是圖五到圖二十。


    圖五:利用工具 → 複寫建立與管理發(fā)行集。


    圖六:選擇想要散發(fā)的資料庫,然後按下建立發(fā)行集。

    精靈的好處在這裡,如果你並沒有完成一些工作,某些按鈕就沒有辦法按下。


    圖七:選擇散發(fā)者的機(jī)器,如果你事先已經(jīng)將其他臺的 SQL Server 先註冊進(jìn)來的話,你可以選擇其他臺 SQL Server 當(dāng)作散發(fā)伺服器,如果沒有的話,你也可以用本機(jī)電腦作為散發(fā)者, SQL Server 會幫你在該臺機(jī)器中建立一個 distribution 資料庫。


    圖八:預(yù)設(shè)會將所有資料庫的資料,利用快照集資夾進(jìn)行傳送,所以要先確認(rèn)一下這個資料夾是否 SQL Server Agent 具備有存取的權(quán)限,換句話來說,資料之間的搬移複製動作,都是透過這個資料夾暫存相關(guān)的資訊。


    圖九:選擇要散發(fā)的資料庫,這裡是以 Northwind 資料庫為例。


    圖十:你可以選擇 SQL Server 複寫的對象是何種類型的資料庫,可以是 SQL Server 2000、SQL Server 7.0 或是非 SQL Server 的關(guān)連式資料庫,例如你可以選擇是 Oracle,或是 Access 資料庫。(不過若是選擇異質(zhì)資料庫,則只能用 push 的方式將資料發(fā)送到異質(zhì)資料庫,而不能使用 pull 的方式提取資料庫)。


    圖十一:選擇想要散發(fā)的資料表或是檢視表、預(yù)存程序,如果是交易式複寫,則資料表必需要有主索引鍵。


    圖十二:設(shè)定發(fā)行集的名稱,因?yàn)橐粋€資料庫可能會有數(shù)個發(fā)行集。


    圖十三:精靈正在建立發(fā)行集的設(shè)定。


    圖十四:設(shè)定完發(fā)行集後,就可以設(shè)定資料集的訂閱工作,只要選擇發(fā)行集名稱,再按下「發(fā)送新的訂閱」,就會出現(xiàn)設(shè)定精靈。


    圖十五:從清單選出訂閱者的名稱,如果訂閱者名稱很多,則必需一個一個先將這些訂閱者利用 Enterprise Manager 註冊進(jìn)來。


    圖十六:選擇要複寫到訂閱者機(jī)器上的哪一個資料庫。


    圖十七:選擇更新訂閱的頻率,如果是交易式複寫的話,可以選擇「連續(xù)」,不然可以使用排程,使得快照集資料定期傳送到訂閱者端。


    圖十八:如果訂閱者端沒有資料,則要選擇初始化結(jié)構(gòu)描述與資料,以及啟動快照集代理程式以立即開始初始化處理,這樣訂閱者端資料庫才會初始資料。


    圖十九:精靈開始執(zhí)行,將訂閱者端的資料初始化。


    圖二十:可以在複寫監(jiān)視器中,查看發(fā)行集是否已經(jīng)產(chǎn)生了快照集,並且將資料傳送到訂閱者的資料庫端。


    這時後,可以透過複寫監(jiān)視器中,看到 test 資料庫已經(jīng)將快照集準(zhǔn)備好了,可以切換到 test 資料庫看一下裡面的內(nèi)容,如圖二十一:


    圖二十一:在 test 資料庫中的 Employees 資料庫,目前已經(jīng)將整個快照集的資料收集過來。

    圖二十一的快照集產(chǎn)生出來的速度,端看你的資料量多寡,以及與訂閱者端網(wǎng)路的頻寬決定,所以快照集代理程式這個動作,在實(shí)務(wù)上是最花費(fèi)時間的動作。

    不管你是使用哪一種複寫方式,都會有快照集的產(chǎn)生,之後資料間的異動,就看複寫的特性了。

    本例是用交易式的複寫,所以我在發(fā)行者端 Employees資料庫做個異動之後,再檢查複寫監(jiān)視器,即可看到如圖二十二的內(nèi)容:


    圖二十二:交易複寫的改變。

    由圖二十二可以發(fā)現(xiàn),只要發(fā)行者有任何異動,都會被記錄助讀員發(fā)現(xiàn),進(jìn)而將該筆交易資料送到訂閱者資料庫中,完成資料庫複寫的工作。


  • ?

    結(jié)論

    資料庫複寫機(jī)制,是一個相當(dāng)實(shí)用的功能,它的運(yùn)用範(fàn)圍非常的廣泛,也適用在各種不同的環(huán)境之下,如果企業(yè)中的資料,因?yàn)椴煌蚨稚⒊啥鄠€地方存放,可以考慮使用 SQL Server 2000 所提供的複寫機(jī)制完成你的需求。

    ?

    PS【轉(zhuǎn)者加】:以下語句可以查找 Local Publications Local Subscriptions

        --發(fā)行集
          select publisher_db,publication,description from distribution.dbo.MSpublications
        --訂閱集
          select name,publication,subscriber_db,creation_date from dbo.MSdistribution_agents

    ?

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/jxcia_Lai/archive/2011/01/06/1927749.html

    總結(jié)

    以上是生活随笔為你收集整理的SQL Server 的分散式資料複寫技術的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。