程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 快照復制,SQL Server保障數據一致性的法寶

快照復制,SQL Server保障數據一致性的法寶

編輯:關於SqlServer


  通常情況下,快照復制有如下特點。

  一是從快照這個名詞中,我們也可以看出,照片是一個靜態的過程,即只反映數據庫某個時刻的狀態,而不會反映數據庫的一個變化過程。快照復制知識對數據庫某個設定的時間的數據進行復制,而不會對一段時間內的數據更改進行連續監視。這跟其另一個兄弟“事務復制”有本質的區別。若把快照復制比喻成完全備份的話,則事務復制就是一個差異備份。

  二是快照復制所需要的資源比較大。快照復制是對整個數據庫進行復制,而不管其是否發生了變化。無疑,這復制的時間、傳輸的時間都會比較長,其耗費的服務器與網絡資源也會比較多。所以,快照復制的成本是比較高的。但是,在某些特定的情況下,快照復制反而可以提高效率。如對於不經常更改當數據,或者不要求保持高同步性的數據的情況下,利用快照復制來協調多個數據庫之間的數據一致性反而使比較合理的選擇。

  快照復制雖然是一門比較先進的技術,但是,並不是在所有應用場景中,其都可以起到很好的效果。若使用不當,快照復制技術反而會拖數據庫管理員的後腿。根據筆者的經驗,一般在以下情況下,最好采用快照復制。

  一是當數據更改量大但是不經常發生時,可以采用快照復制。如筆者有一個客戶,在全國各地都有服裝門市店,各個店面的銷售價格基本一致。由於經濟危機的影響,在年底為了盡可能的收回現金,決定在12月24日到1月3日之間下調各個門市店的銷售價格。由於他們的銷售系統都是全國聯網的。價格的下調需要總部的系統來完成。此時,就可以采用快照技術,讓這個價格表跟各個地方的數據庫同步。在價格更改完成後,復制完成的數據庫快照。一般來說,某個表的數據主要是靜態數據,不經常更改。當數據在一個時間發生更改時,將一個全新的數據庫快照發布到服務器上,其效果會更好。

  二是在某些決策支持系統中,采用快照復制技術的比較多。因為決策支持系統,他們只需要查詢數據,而很少對數據進行更改。同時,往往對數據庫的及時性要求也不高。如一個銷售決策系統,他們可能只需要到上個月月底的銷售數據,而不需要到當天的銷售數據。在這種情況下,采用快照復制技術,比起其他的數據同步技術,如事務復制技術,效果會更加的好。通常情況下,在某個時期,如果允許有過時的數據副本,也就是說,對數據的及時性要求不怎麼高的系統,可以考慮采用快照技術。

  三是復制數據比較少的情況下,可以采用快照復制技術。因為快照復制是一次復制整個數據庫,如果數據量比較大的話,則每次復制、傳輸的時間都會比較長。此時,采用事務復制會比較合理。其實,這跟完全備份與差異備份類似。當數據庫容量比較小時,采用完全備份反而比差異備份更加實際。因為維護起來方便。

  四是可以利用快照復制來實現對SQL Server數據庫的異地備份。SQL Server服務器本身沒有異地備份功能。往往是先在本地進行備份,然後把備份文件拷貝到其他主機上。有了快照復制的話,可以解決這個問題。即先建立一個分發服務器,然後每天晚上在空余的時候,對發布服務器進行快照復制,傳輸給分發服務器。如此的話,分發服務器的內容就跟發布服務器上的內容保持一致。再對分發服務器執行備份,就可以完成異地備份的策略了。

  所以,通常情況下,如果企業的應用場景符合上面四種情況的話,采用快照復制的效果會比較好。反之,則就需要考慮采用事務復制等其他的數據同步技術。

  在使用快照復制技術的時候,筆者還有幾個善意的提醒。

  一是快照復制技術可以在一定程度上實現網絡數據庫的功能。SQL Server數據庫到現在的版本為止,都不支持數據庫橫向的擴展。也就是說,不主張采用多個服務器來分擔主服務器的負擔。微軟一直強調的是服務器的縱向拓展,如增加服務器的CPU數、增加內存等等,來改善服務器的性能。使用快照復制技術可以使得數據的分布過程實現自動化,讓多個服務器之間自動實現數據的同步,以適應企業不同程度的需要。當企業擴展時,可以增加額外的數據庫服務器,來減輕主服務器的工作負荷並提高數據的使用效率。這也就在一定程度上實現了多服務器(網絡數據庫)的功能。不過這個功能有個限制,請看下面一個注意點。



  二是快照復制技術基本上是單向的。也就是說,只可以從主服務器上對數據進行快照復制,然後傳遞給其他的數據庫服務器。其他的數據庫服務器只能夠被動的接收主服務器過來的快照。而不能夠把自己服務器的數據的變化情況反饋給主服務器。這就跟我們通常所說的網絡服務器有一個本質的區別。網絡服務器的話,各個子服務器上更改的數據,可以在相互的服務器上進行同步。所以,若要利用快照服務器來實現網絡服務器的功能,以減輕主服務器的負荷,這裡往往有一個部署上的技巧。就是對於子服務器來說,只接受查詢的功能。也就是說,把一些報表生成、數據查詢的任務交給子服務器來做。而把數據更新等任務則仍然交給主服務器來完成。

  三是對一些數據突然變更的情況,可以采用強制復制與強制訂閱。如在發布服務器上(發布服務器是快照復制中對於主服務器的專業稱呼)數據發生了變更,則不管數據庫管理員設置的時間有沒有到,可以強制對發布服務器執行快照復制。並且把它傳輸到分發服務器上,強制采用更新後的數據。這就是強制訂閱。強制訂閱通常用在發生數據更改時必須立即發送更改到訂閱服務器的這種類型的應用中。如在08年1月1日早上1點某個超市要對所有的商品價格進行調價。此時,調價完成後,就必須采用強制訂閱業務,同步其他的一些價格查詢服務器上的數據。當客戶在查詢機上查詢價格的時候,查到的是其調整後的價格。這就是強制訂閱的一種典型應用。但是,若數據變更比較頻繁,則采用這種強制訂閱的話,很可能造成系統或者網絡的癱瘓。數據庫管理員在這一點上要引起重視。

  四是從2005以後的版本中,包括剛推出的2008版本,引入了對Internet技術的支持。通過復制,可以把數據發布到Internet上,提高了數據庫中數據的使用效率。不過在Internet上復制數據時,要注意幾個問題。一是要保證發布服務器和分發服務器在網絡防火牆的同一端,而不能夠位於防火牆的兩側,負責的話,數據復制將不會成功。二是要保證發布服務器和分發服務器有直接的連接,而並發只有互聯網這一種連接方式。三是目前它支持TCP/IP協議。只有這個協議正常運行,才可以進行互聯網上的復制。同時要注意的問題就是互聯網的帶寬問題。帶寬的多少,直接影響著數據復制的效率問題。

  總之,快照復制的出現,為SQL Server各個數據庫之間數據的同步提供了一種捷徑,是保障SQL Server數據一致性的法寶。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved