SQL SERVER 2005 使用訂閱發布同步數據庫

作者: jackyong  來源: 博客園  發布時間: 2010-11-07 20:57  閱讀: 3333 次  推薦: 0   原文鏈接   [收藏]  
 
[1] SQL SERVER 2005 使用訂閱發布同步數據庫
[2] SQL SERVER 2005 使用訂閱發布同步數據庫

  這兩天有一個同事在設計項目的時候考慮到數據量查詢和寫入都比較大,問我數據庫該怎么設計,了解了他們的業務后,我給的建議是發布一個訂閱的數據庫來分擔壓力,寫下自己的操作步驟分享給大家。

  數據庫復制涉及

  發布服務器:數據的來源服務器,維護源數據,決定哪些數據將被分發,檢測哪些數據發生了修改,并將這些信息提交給分發服務器。

  分發服務器:分發服務器負責把從發布服務器拿來的數據傳送至訂閱服務器。

  訂閱服務器:訂閱服務器就是發布服務器數據的副本,接收維護數據。

  訂閱類型
  推訂閱:推訂閱是指由發布服務器將所有發生修改過的數據復制給訂閱者,這種在數據同步性價比較高的場合,推薦使用推訂閱。
  拉訂閱:拉訂閱是指訂閱服務器在經過一段時間就會向發布服務器要求復制出版數據庫發生的變化的數據。
  發布,分發,訂閱可以部署在獨立的服務器上面也可以部署在一臺sql server 上面,然而分開部署肯定能提高性能。

  復制代理:

  (1)快照代理
  快照代理在分發者上創建并存儲快照文件,任務是:在分發數據庫中準備已發布表的架構和初始數據以及其他對象、存儲快照文件并記錄出版數據庫和訂閱服務器之間的同步信息,快照代理運行在分發者服務器上,并與出版者相連接。每一個出版物都有自己的快照代理。與各種類型的復制一起使用。

  (2)日志閱讀代理
  日志讀取器代理與事務性復制一起使用。它將發布服務器上的事務日志中標記為復制的事務移至分發數據庫中。使用事務性復制發布的每個數據庫都有自己的日志讀取器代理,該代理運行于分發服務器上并與發布服務器連接(分發服務器與發布服務器可以是同一臺計算機)。

  (3)分發代理
  分發代理與快照復制和事務性復制一起使用。它將初始快照應用于訂閱服務器,并將分發數據庫中保存的事務移至訂閱服務器。分發代理既可以運行于分發服務器(對于推送訂閱),也可運行于訂閱服務器(對于請求訂閱)。

  (4)合并代理:   
  合并代理與合并復制一起使用。它將初始快照應用于訂閱服務器,并移動和協調所發生的增量數據更改。每個合并訂閱都有自己的合并代理,該代理同時連接到發布服務器和訂閱服務器并對它們進行更新。合并代理既可以運行于分發服務器(對于推送訂閱),也可以運行于訂閱服務器(對于請求訂閱)。默認情況下,合并代理將訂閱服務器上的更改上載到發布服務器,然后將發布服務器上的更改下載到訂閱服務器。

  (5)隊列閱讀代理
  隊列讀取器代理與包含排隊更新選項的事務性復制一起使用。該代理運行于分發服務器,并將訂閱服務器上所做更改移回至發布服務器。與分發代理和合并代理不同,只有一個隊列讀取器代理的實例為給定分發數據庫的所有發布服務器和發布提供服務。

  復制類型:
  SQL SEVER提供了三大類復制類型:快照復制、事務復制、合并復制。可以在實際應用中使用相應的復制類型,每一種復制類型都在不同程序上實現數據的一致性。

  (1)快照復制
  如其名字所言,快照復制指在某一時刻給出版數據庫中的出版數據照相,然后將數據復制到訂閱者服務器。快照復制實現較為簡單,其所復制的只是某一時刻數據庫的瞬間數據,快照復制是將整個出版物傳送給訂閱者,就是在某一時刻將出版數據進行一次“照相”,生成一個描述出版數據庫中數據的當前狀態的一個文件,然后在相應的時間將其復制到訂閱都的數據庫上,快照復制并不是不停的監視出版數據庫中發生的變化情況,它是對出版數據庫進行一次掃描,把所有出版數據中的數據從源數據庫送至目標數據庫,而不僅僅是變化的數據。如果數據量很大,那么要復制的數據就很多。因此對網絡資源要求很高,不僅要有較快的傳輸速度,而且要保證傳輸的可靠性。

  快照復制是最為簡單的一種復制類型,能夠在出版者和訂閱者之間保證數據的一致性。快照復制通常使用在以下場合:
  在一定時間內出現大量的更改的操作,但數據總量不大,變化周期較長。
  (2)事務復制
  快照復制是將整個數據集發送給訂閱服務器,由于體積大而造成復制周期較長,會形成復制滯后問題。那么事務復制使用事務日志來生成將復制到訂閱服務器的事務,因為它只復制事務也就是變化,所以滯后也比快照復制低得多,因為將不斷地在訂閱服務器處得到及時應用。
  事務復制有三個組件:快照代理,它生成架構,數據以及跟蹤復制過程所需的數據;
  分發代理:它分發快照和隨后的命令;
  日志讀取器代理:它讀取發布數據的事務日志。
  在事務復制中,當出版數據庫發生變化時,這種變化就會立即傳遞給訂閱者。并在較短時間內完成(幾秒),而不是像快照復制那樣要經過很長一段時間間隔。因此,事務復制是一種接近實時地從源到目標分發數據的方法。由于某種原因事務復制的頻率較高。所以必須保證在訂閱者與出版者之間要有可靠的網絡連接。
  (3)合并復制
  合并復制是為移動用戶設計的,可以在發布服務器或是訂閱服務器處執行修改,在合并代理運行時,這些修改將同步,多用于發布服務器與訂閱服務都修改數據的情況下。工作原理如下:在要復制的每個表上實現觸發器,并使用包含GUID列唯一標識要復制的表中的每一行。對其中的任何一個表進行修改時,都會將更改將記錄一個數據表中,在合并代理運行時,它收集數據表中的GUID,這些GUID指出了在發布服務器和訂閱服務器處修改過的行。對于只在發布服務器或是訂閱端修改的數據則直接進行相應操作,如INSERT,UPDATE,DELETE,如果雙方都有GUID則按照用戶指定的方式解決沖突,默認發布服務器伏先。
  配置復制:
  無論是快照復制,事務性復制還是合并復制,創建復制都要經過以下幾個步驟:
  1.創建發布服務器。選擇要發布的服務器。如果有條件的,也可以分發服務器,在這里我們就將發布服務器和分發服務器設置在同一臺計算機上。
  2.不論是發布服務器還是訂閱服務器必須開啟代理服務。
  3.創建一個發布。即將需要的數據庫及對象發布出來。
  4.選擇一個適合自己的發布類型。
  5.設置復制代理及安全,即指定可以運行代理的用戶帳號。
  創建可以使用此發布的訂閱服務器。

  測試服務器的版本是企業版 Enterprise Edition

  select @@version

  Microsoft SQL Server 2005 - 9.00.4035.00 (X64)   Nov 24 2008 16:17:31   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)

  查看服務器的名是否和數據庫一致,不一致需要統一計算機名.

  select @@servername

  統計命名語句,統一完命名需要重新啟動數據庫。

 
if serverproperty('servername') <> @@servername
begin
declare @server sysname
set @server = @@servername
exec sp_dropserver @server = @server
set @server = cast(serverproperty('servername') as sysname)
exec sp_addserver @server = @server , @local = 'LOCAL'
end

 

[第1頁][第2頁]
0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()