專利名稱:數(shù)據(jù)庫同步方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)庫技術,尤其涉及數(shù)據(jù)庫同步的方法及系統(tǒng)。
背景技術:
在電信管理網(wǎng)絡中,每個網(wǎng)絡單元都有一個操作維護單元(OMU,Operation & Maintenance Unit),具體可以是安裝OMU軟件的服務器,負責提供該網(wǎng)絡單元的操作維護功能。為維護網(wǎng)絡單元的正常工作,電信運營商對網(wǎng)絡單元的操作維護功能可靠性要求很高,一般都在99.999%以上。因此,為了保證OMU操作維護功能的可靠性,電信設備供應商一般采用對OMU的雙機(Dual System)備份機制。所謂雙機,是由兩臺計算機組成的系統(tǒng),其中,與主用OMU對應的服務器是主用服務器(Active Server,以下簡稱AS),對外提供服務功能;與備用OMU對應的服務器是備用服務器(StandbyServer,以下簡稱SS),為主用服務器提供備份功能、不對外提供服務功能。主用服務器和備用服務器在一定條件下可以發(fā)生倒換,即主用變備用、備用變主用。兩者結合,能夠連續(xù)地對外提供服務功能。
采用雙機備份機制可以保證系統(tǒng)運作的可靠性,在主用服務器因故死機或人為疏忽等影響,而無法對OMU進行操作維護時,備用服務器會立即取代主用服務器的地位,繼續(xù)對OMU進行操作維護。采用這種機制,大大減少系統(tǒng)運作停頓的概率,無論對個人用戶還是企業(yè)用戶,都提供了可靠的保障。另外,采用雙機備份機制,用戶數(shù)據(jù)可以傳遞給兩部主機,獲得妥善的備份,提高了信息處理的安全性。
要實現(xiàn)對網(wǎng)絡單元的操作維護,服務器要處理大量的數(shù)據(jù),例如配置數(shù)據(jù)、告警數(shù)據(jù)、性能統(tǒng)計數(shù)據(jù)等,這些數(shù)據(jù)都存儲于服務器的數(shù)據(jù)庫系統(tǒng)中,OMU服務器上會安裝數(shù)據(jù)庫系統(tǒng)軟件,提供統(tǒng)一的數(shù)據(jù)庫訪問接口。這些存儲于數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)隨著系統(tǒng)的運行,是實時修改的。因此要實現(xiàn)雙機備份功能,必須保證主用服務器數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)和備用服務器數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)之間的實時同步。這樣才能確保主用服務器發(fā)生故障時,備用服務器升級為主用服務器后能提供正確的操作維護功能。
現(xiàn)有技術中,實現(xiàn)雙機數(shù)據(jù)庫同步有如下技術方案方案一利用數(shù)據(jù)庫復制機制,比如SQL復制。所謂復制,是將一組數(shù)據(jù)從一個數(shù)據(jù)源拷貝到多個數(shù)據(jù)源的技術。SQL(Structured Query Language,結構化查詢語言)復制的基本元素包括出版服務器、訂閱服務器、分發(fā)服務器、出版物、文章。源數(shù)據(jù)所在的服務器是出版服務器,負責發(fā)表數(shù)據(jù)。出版服務器把要發(fā)表的數(shù)據(jù)的所有改變情況拷貝復制到分發(fā)服務器,分發(fā)服務器包含有一個分發(fā)數(shù)據(jù)庫,可從出版服務器接收數(shù)據(jù)的所有改變,并保存這些改變,再把這些改變分發(fā)給訂閱服務器。
以Microsoft公司的SQL Server數(shù)據(jù)庫系統(tǒng)為例,該系統(tǒng)提供了三種復制技術,分別是快照復制、事務復制和合并復制。主備服務器之間的數(shù)據(jù)庫實時同步一般采用事務復制技術。采用事務復制需要進行如下配置步驟1.配置一個數(shù)據(jù)庫作為分發(fā)數(shù)據(jù)庫(分發(fā)數(shù)據(jù)庫可以配置在主用服務器,也可以配置在備用服務器上),指定哪些服務器可以使用該數(shù)據(jù)庫;2.在主用服務器上,配置主用服務器使用的分發(fā)數(shù)據(jù)庫;配置主用服務器上允許的訂閱服務器;配置主用服務器上需要發(fā)布的數(shù)據(jù)庫和數(shù)據(jù)庫中需要發(fā)布的數(shù)據(jù)表和字段等;3.在備用服務器上,配置對發(fā)布數(shù)據(jù)庫的訂閱;4.配置各代理進程的調度和屬性,有快照代理進程、分發(fā)代理進程和日志讀取代理進程等;上述配置過程非常復雜,容易出錯且配置時間較長,如果有多個數(shù)據(jù)庫,每個數(shù)據(jù)庫有多張數(shù)據(jù)表進行同步,則配置過程一般需要幾分鐘。同時該配置過程對數(shù)據(jù)庫的屬性進行了修改,對數(shù)據(jù)庫的操作將受到限制,比如配置某數(shù)據(jù)庫為發(fā)布數(shù)據(jù)庫后,就不能刪除該數(shù)據(jù)庫了。
上述配置成功后,主用服務器上的SQL SERVER會把各數(shù)據(jù)庫中需要同步的數(shù)據(jù)表的數(shù)據(jù)自動生成一個快照(類似于數(shù)據(jù)表的數(shù)據(jù)導出文件),該快照信息傳送到分發(fā)數(shù)據(jù)庫中,分發(fā)數(shù)據(jù)庫再分發(fā)到備用服務器,備用服務器將快照中的數(shù)據(jù)導入到訂閱數(shù)據(jù)庫中,這樣主備服務器完成了初始數(shù)據(jù)同步。事務復制配置好之后,先完成初始同步,自動進行實時同步。主用服務器發(fā)生數(shù)據(jù)修改時,發(fā)布數(shù)據(jù)庫會把數(shù)據(jù)修改的日志信息傳送到分發(fā)數(shù)據(jù)庫,分發(fā)數(shù)據(jù)庫再將其分發(fā)給訂閱數(shù)據(jù)庫,訂閱數(shù)據(jù)庫根據(jù)日志信息修改數(shù)據(jù),保證與發(fā)布數(shù)據(jù)庫同步。
該方案的缺陷是1.必須基于SQL Server數(shù)據(jù)庫系統(tǒng),相應的,該系統(tǒng)必須安裝在WINDOWS操作系統(tǒng)上;2.必須在主備服務器間配置事務復制關系,主備服務器發(fā)生倒換需要重新配置事務復制關系。由于事務復制關系非常復雜,對數(shù)據(jù)庫系統(tǒng)的配置過程很復雜。
3.發(fā)布服務器和訂閱服務器完成初始數(shù)據(jù)庫同步時間長。事務復制生成和應用快照的時間與數(shù)據(jù)表的數(shù)量成正比,以數(shù)據(jù)庫中需要同步的數(shù)據(jù)表為500張計算,一般需要30分鐘以上的時間才能完成初始同步。而且訂閱服務器上應用快照是一張表接一張表依次應用的,不是一個事務里完成的。完成初始同步過程前一般不能發(fā)生主備服務器的倒換,否則備用服務器上的數(shù)據(jù)是混亂的。這個時間對于電信運營商難以接收;4.該方案對于服務器有很多限制和影響。事務復制依賴于數(shù)據(jù)庫的日志,對日志做標記,以標識已經(jīng)傳送到分發(fā)數(shù)據(jù)庫以及未傳送的日志,以此保證數(shù)據(jù)庫更改一致。如果備用服務器故障,則主用服務器的數(shù)據(jù)庫日志會不斷增長,導致數(shù)據(jù)庫無法運行;如果主用服務器還原數(shù)據(jù)庫,則會導致日志混亂,事務復制會出現(xiàn)故障。
方案二以Microsoft公司的SQL Server 2000企業(yè)版為例,該系統(tǒng)提供了日志傳送的功能,即不間斷地從源數(shù)據(jù)庫中備份事務日志,然后將它們復制并還原到目的數(shù)據(jù)庫,使目的數(shù)據(jù)庫與源數(shù)據(jù)庫保持同步。與事務復制相比,日志傳送稍為簡單一些。日志傳送保證兩個數(shù)據(jù)庫同步,而事務復制可以使需要同步的數(shù)據(jù)表保持同步,不需要同步的數(shù)據(jù)表可以不進行同步。初始同步方面,SQL SERVER提供了日志傳送操作的向導,在目的服務器上創(chuàng)建源數(shù)據(jù)庫,保證初始數(shù)據(jù)一致。
該方案的缺陷是1.必須基于Sql Server數(shù)據(jù)庫系統(tǒng),相應的,該系統(tǒng)必須安裝在WINDOWS操作系統(tǒng)上;2.日志傳送的實時性較差,實時同步周期一般配置在15分鐘,對于實時性要求較高的服務器不合適;3.日志傳送可靠性不如事務復制,對可靠性要求較高的服務器不合適。
發(fā)明內容
有鑒于此,本發(fā)明實施例要解決的主要問題在于,提供數(shù)據(jù)庫同步的方法和系統(tǒng),可以簡化對服務器配置的修改,數(shù)據(jù)庫同步不受操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的限制,提高了數(shù)據(jù)同步的效率。
本發(fā)明的一個實施例所提供的數(shù)據(jù)庫同步的方法,用于主用服務器數(shù)據(jù)庫和備用服務器數(shù)據(jù)庫的初始同步,主用服務器數(shù)據(jù)庫中設置有包括同步標識號的同步表,該方法包括以下步驟備用服務器向主用服務器發(fā)送初始同步請求;主用服務器根據(jù)接收到的初始同步請求,在同步表中更新同步標識號,并備份主用服務器數(shù)據(jù)庫,生成備份文件;備用服務器獲取更新后的同步標識號和備份文件,用備份文件恢復備用服務器數(shù)據(jù)庫。
本發(fā)明的另一個實施例所提供的數(shù)據(jù)庫同步的方法,用于主用服務器數(shù)據(jù)庫和備用服務器數(shù)據(jù)庫的實時同步,主用服務器數(shù)據(jù)庫中設置有包括同步標識號和SQL語句的同步表,同步標識號根據(jù)數(shù)據(jù)庫操作實時更新,該方法包括以下步驟主用服務器復制需要同步的數(shù)據(jù)庫操作的SQL語句到同步表中;備用服務器從同步表中獲取SQL語句,并用該SQL語句訪問備用服務器數(shù)據(jù)庫。
本發(fā)明的再一個實施例所提供的數(shù)據(jù)庫同步的方法,用于主用服務器數(shù)據(jù)庫和備用服務器數(shù)據(jù)庫的同步,主用服務器數(shù)據(jù)庫中設置有包括同步標識號和SQL語句的同步表,該方法包括A、備用服務器檢查其保存的標識號是否存在于同步表中,如果不存在,則執(zhí)行步驟B、C、D,如果存在,則執(zhí)行步驟E、F;B、向主用服務器發(fā)送初始同步請求;C、主用服務器根據(jù)接收到的請求,在同步表中更新同步標識號,備份主用服務器數(shù)據(jù)庫,生成備份文件;D、備用服務器獲取更新后的同步標識號和備份文件,用備份文件恢復備用服務器數(shù)據(jù)庫;E、主用服務器復制需要同步的數(shù)據(jù)庫操作的SQL語句到同步表中;F、備用服務器從同步表中獲取該SQL語句,并用該SQL語句訪問備用服務器數(shù)據(jù)庫。
本發(fā)明的再一個實施例所提供的數(shù)據(jù)庫同步的系統(tǒng),包括配置有主用服務器數(shù)據(jù)庫的主用服務器,以及配置有備用服務器數(shù)據(jù)庫的備用服務器,主用服務器數(shù)據(jù)庫中設置有包括同步標識號和SQL語句的同步表。
該系統(tǒng)的主用服務器包括備份單元,用于在初始同步階段,在收到備用服務器發(fā)送的初始同步請求后,備份數(shù)據(jù)庫生成備份文件;同步表單元,用于在初始同步階段,在同步表中更新同步標識號,還用于在實時同步階段,更新同步表中的同步標識號,復制需要同步的數(shù)據(jù)庫操作的SQL語句到同步表中;備用服務器包括請求單元,用于向主用服務器發(fā)送初始同步請求;獲取單元,用于在初始同步階段,獲取備份單元生成的備份文件,以及同步表單元在同步表中更新后的同步標識號;同步單元,用于在初始同步階段,從獲取單元獲取備份文件,并用該備份文件恢復備用服務器數(shù)據(jù)庫,還用于在實時同步階段,從同步表中獲取SQL語句,并用該SQL語句訪問備用服務器數(shù)據(jù)庫。
本發(fā)明的實施例所提供的方法及系統(tǒng),利用同步表中的標識號,來判斷是否需要初始同步和保證初始同步后主備服務器保持數(shù)據(jù)一致,采用備用服務器讀取主用服務器上的同步表中的SQL語句的方式,直接獲取主用服務器的數(shù)據(jù)修改。從而簡化對服務器配置的修改,數(shù)據(jù)庫同步不受操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的限制,提高了數(shù)據(jù)同步的效率。
圖1為本發(fā)明實施例中,同步表結構示意圖;圖2為本發(fā)明第一個實施例數(shù)據(jù)庫同步的方法流程圖;圖3為本發(fā)明第二個實施例數(shù)據(jù)庫同步的方法流程圖;
圖4為本發(fā)明第三個實施例數(shù)據(jù)庫同步的方法流程圖;圖5為本發(fā)明第四個實施例數(shù)據(jù)庫同步的系統(tǒng)圖。
具體實施例方式
為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚明白,下面結合實施例和附圖,對本發(fā)明的技術方案進一步詳細說明。
本發(fā)明實施例提供的技術方案,利用同步表,在應用層實現(xiàn)數(shù)據(jù)庫同步,簡化對服務器配置的修改,數(shù)據(jù)庫同步可以不受操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的限制,提高數(shù)據(jù)同步的效率。
圖1為本發(fā)明實施例中,同步表結構示意圖。
如圖1所示,設置于主用服務器數(shù)據(jù)庫中的同步表,包括兩個字段同步標識字段(identity)和SQL語句字段。
同步標識字段一般采用數(shù)據(jù)庫提供的種子屬性,自動遞增。這個字段不需要維護,如果種子屬性設置是從1開始遞增,插入第一條記錄時,不需要制定該字段的值,數(shù)據(jù)庫系統(tǒng)就自動置為1,插入第二條,自動置為2,如果刪除了數(shù)據(jù)庫的所有記錄,下次再插入時,該字段的值是刪除之前的值加1。同步標識字段用來表示同步標識號。
SQL語句字段存放修改數(shù)據(jù)庫的SQL語句。SQL幾乎是所有大型數(shù)據(jù)服務器都支持的數(shù)據(jù)操作語言,它提供一些可以快速執(zhí)行數(shù)據(jù)查詢、更新、刪除等數(shù)據(jù)操作的敘述。就標識和SQL的關系而言,標識是插入每條SQL記錄時給的一個編號,即每插入一條SQL記錄,標識字段的值加1。
本發(fā)明實施例中,通過在主用服務器上設置同步表,同步表的同步標識號和備用服務器的標識號配合比較,檢查是否需要初始同步。通過SQL語句,實現(xiàn)實時同步,同時在實時同步的過程中,實時檢查是否需要初始同步。以此,通過同步表中標識和SQL語句,實現(xiàn)數(shù)據(jù)庫同步。
備用服務器的標識號可以保存在數(shù)據(jù)庫中或保存在配置文件中。該值初始化為0,所以初次啟動時,肯定與主用服務器同步表中最小的標識號是不一樣的,因此會進行初始同步。初始同步完成后,備用服務器保存的標識號就會存在于同步表中。接著進入實時同步,在該過程中,主用服務器每修改一次數(shù)據(jù),在同步表中插入SQL記錄,增加一次同步表記錄,對應增加標識號;實時同步時,備用服務器先刪除主用服務器上同步表中標識號小于自身保存的標識號的記錄,然后讀取主用服務器上同步表中標識號大于自身保存標識號的記錄。備用服務器每執(zhí)行一條讀取過來的記錄前,將自己保存的標識號與讀取過來的記錄的標識號進行檢查,如果其保存的標識號與讀取過來的標識號連續(xù),則說明備用服務器與主用服務器一直保持同步,則執(zhí)行該條記錄,并更新保存的標識號,即,將最新同步過的標識號保存下來。如果不連續(xù),則說明主備用服務器已經(jīng)失去了數(shù)據(jù)同步,備用服務器需要重新開始數(shù)據(jù)同步。判斷備用服務器保存的標識號與讀取過來的標識號是否連續(xù),也即判斷備用服務器保存的標識號是否存在于同步表中。
如果備用服務器發(fā)生重啟,則重啟后檢查其保存的同步標識號在主用服務器同步表中是否仍然存在,如果是,則只需要繼續(xù)實時同步即可。如果備用服務器停止了很長時間,導致主用服務器把同步表清除過,則備用服務器保存的同步標識號在同步表中不存在了,則重新開始初始同步。
本發(fā)明的第一個實施例涉及數(shù)據(jù)庫初始同步的方法,用于主用服務器數(shù)據(jù)庫和備用服務器數(shù)據(jù)庫的初始同步,其中,主用服務器數(shù)據(jù)庫中設置有包括同步標識號的同步表,該方法具體流程如圖2所示。
步驟201由備用服務器檢查其保存的標識號是否存在于同步表中,據(jù)此判斷是否需要開始初始同步;比如,在以下三種場景下,都需要進行步驟201的判斷(1)如前所述,標識字段采用數(shù)據(jù)庫提供的種子屬性,自動遞增,可以設置從1開始。備用服務器的標識號可以保存在數(shù)據(jù)庫中或保存在配置文件中。該值初始化為0。所以初次啟動時,肯定與主用服務器同步表中最小的標識號是不一樣的,即備用服務器保存的標識號不存在于同步表中,因此會進行初始同步,則執(zhí)行后續(xù)步驟;(2)在實時同步過程中,備用服務器執(zhí)行一條記錄,則更新一下自己保存的標識號,執(zhí)行前將自己保存的標識號與讀取過來的記錄的標識號進行檢查,如果其保存的標識號與讀取過來的記錄的標識號連續(xù),則只需要繼續(xù)實時同步即可;如果否,說明主用服務器清除過同步表記錄,則重新開始初始同步,執(zhí)行后續(xù)步驟;(3)如果備用服務器發(fā)生重啟,則重啟后檢查保存的同步標識號在主用同步表中是否仍然存在,如果是,則只需要繼續(xù)實時同步即可。如果備用服務器停止了很長時間,導致主用服務器把同步表清除過,則備用服務器保存的同步標識號在同步表中不存在了,則重新開始初始同步,執(zhí)行后續(xù)步驟。
步驟202備用服務器向主用服務器發(fā)送請求初始同步的請求消息;步驟203主用服務器收到備用服務器發(fā)送的請求消息后,在同步表中更新同步標識號,備份主用服務器數(shù)據(jù)庫,生成備份文件;該步驟中,主用服務器收到備用服務器發(fā)送的請求消息后,在備份數(shù)據(jù)庫前,會清空同步表中的數(shù)據(jù)記錄。另外,在備份數(shù)據(jù)庫之前,為防止備份過程中,有模塊修改數(shù)據(jù)庫數(shù)據(jù),要對數(shù)據(jù)庫加鎖。加鎖成功后清空同步表中的數(shù)據(jù)記錄,主用服務器清空數(shù)據(jù)記錄后再插入一條空記錄,同步標識字段的值在刪除之前的值的基礎上加1,形成更新后的同步標識號。接著,主用服務器備份數(shù)據(jù)庫,生成備份文件。完成備份后,解除對數(shù)據(jù)庫的鎖定,并發(fā)送攜帶該新的同步標識號的備份成功消息給備用服務器。
步驟204備用服務器獲取備份文件和更新后的同步標識號;備用服務器收到主用服務器發(fā)送的備份成功消息后,會獲取并保存該同步標識號,即第一條同步記錄對應的標識,以此來保證備用服務器保存的標識號存在于在主用服務器的同步表中。另外,可以通過FTP或操作系統(tǒng)提供的文件傳輸功能,把備份文件從主用服務器傳輸?shù)絺溆梅掌?。具體傳輸?shù)姆绞?,既可以采用備用服務器主動獲取備份文件的方式,也可以是主用服務器主動傳輸?shù)姆绞?。而采用備用服務器主動獲取備份文件的方式,可以減少主用服務器處理的復雜度。
步驟205備用服務器用接收到的備份文件恢復備用服務器數(shù)據(jù)庫。
至此,完成了數(shù)據(jù)庫初始同步過程。
從數(shù)據(jù)庫加鎖到解鎖的時間內,主用服務器的各模塊訪問數(shù)據(jù)庫會阻塞住。一般網(wǎng)元數(shù)據(jù)庫中的配置、告警、性能等數(shù)據(jù)總量在50M~500M之間,OMU服務器的硬盤都采用高性能的SCSI硬盤或SAS硬盤,吞吐量在每秒30M以上,SATA硬盤在每秒150M以上。數(shù)據(jù)庫從加鎖到鎖住的時間0~3秒左右,數(shù)據(jù)庫被鎖住的總時間在3~20秒左右。數(shù)據(jù)初始同步時間還包括備用服務器獲取備份文件以及恢復數(shù)據(jù)庫的時間,主備服務器間一般是1000MBits/S的高速帶寬,備份文件可以在10秒內傳送到備用服務器。數(shù)據(jù)庫恢復時間小于數(shù)據(jù)庫備份時間,加上之前所用的時間,整個初始同步可以在1分鐘之內完成,提高了初始同步的效率。
在整個初始同步過程中,如果出現(xiàn)沒有成功完成某個步驟的情況,如主用服務器返回消息失敗或等待超時,數(shù)據(jù)庫加鎖失敗,數(shù)據(jù)庫備份失敗,備份文件傳輸失敗,或備用數(shù)據(jù)庫恢復失敗等,都會返回步驟201。
由于本發(fā)明實施例數(shù)據(jù)庫初始同步的方法,利用同步表中的標識號,來判斷是否需要初始同步和保證初始同步后主備服務器保持數(shù)據(jù)一致,具體采用數(shù)據(jù)庫備份還原的方法,簡化對服務器配置的修改,數(shù)據(jù)庫同步不受操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的限制,提高了數(shù)據(jù)初始同步的效率。
從整個數(shù)據(jù)庫同步過程來看,備用服務器首先同步主用服務器的初始數(shù)據(jù)庫;備用服務器在完成初始同步的基礎上,實時同步主用服務器上數(shù)據(jù)庫中的數(shù)據(jù)修改。初始同步完成后,備用服務器保存的標識號就會存在于同步表中。以下結合附圖對本發(fā)明第二個實施例進行描述。
本發(fā)明的第二個實施例涉及數(shù)據(jù)庫實時同步的方法,用于主用服務器數(shù)據(jù)庫和備用服務器數(shù)據(jù)庫的實時同步,其中,主用服務器數(shù)據(jù)庫中設置有包括同步標識號和SQL語句的同步表,同步標識號根據(jù)數(shù)據(jù)庫操作實時更新,該方法具體流程如圖3所示。
步驟301主用服務器判斷是否有需要實時同步的數(shù)據(jù)庫操作,如果需要,則執(zhí)行步驟302和303,如果不需要,則繼續(xù)進行本步驟的判斷;OMU軟件提供統(tǒng)一的數(shù)據(jù)庫訪問接口,一般OMU提供的配置、性能統(tǒng)計、告警等操作維護功能由不同的軟件模塊來實現(xiàn)。各軟件模塊調用該數(shù)據(jù)庫訪問接口操作數(shù)據(jù)庫。數(shù)據(jù)庫訪問接口提供可選參數(shù),指明該操作是否需要同步。例如,可以用TRUE表示需要同步,F(xiàn)ALSE表示不需要同步,缺省是TRUE。
步驟302主用服務器復制需要實時同步的數(shù)據(jù)庫操作的SQL語句到同步表中;該語句是某模塊訪問數(shù)據(jù)庫并對數(shù)據(jù)庫數(shù)據(jù)進行修改的語句。這樣,備用服務器就可以從同步表中獲取該SQL語句。
步驟303備用服務器從所述同步表中獲取該SQL語句;具體獲取SQL語句的方法,可以是備用服務器獲取主用服務器數(shù)據(jù)庫的用戶名和密碼,根據(jù)獲取的用戶名和密碼,直接連接到主用數(shù)據(jù)庫上,獲取同步表的SQL語句。備用服務器通過這樣的方式,從主用服務器的數(shù)據(jù)同步表中讀取一批記錄。
步驟304備用服務器用同樣的SQL訪問備用服務器數(shù)據(jù)庫。
獲取SQL語句后,備用服務器通過數(shù)據(jù)庫訪問接口,用同樣的SQL訪問其數(shù)據(jù)庫,即逐個執(zhí)行這些記錄。由于備用服務器與主用服務器的基礎數(shù)據(jù)一致,因此兩者的數(shù)據(jù)修改同步,從而使備用服務器與主用服務器的數(shù)據(jù)庫保持了同步。
實時同步過程中,主用服務器每修改一次數(shù)據(jù),就增加一次同步表記錄。備用服務器實時同步時,同步更新備用服務器的標識號,把最新同步過的標識號保存下來,執(zhí)行修改記錄完成后,刪除主用服務器同步表中已同步的記錄。因為備用服務器同步主用服務器的第N條記錄時,只會刪除主用同步表中前面的N-1條記錄,第N條記錄保留在同步表中,這樣,備用服務器每次都可以檢查自己同步過的最后一條記錄是否在同步表中,判斷是否需要初始同步。
備用服務器可以設置同步周期,在完成一個周期的同步后,下一個周期繼續(xù)實時同步。同步周期一般設置在秒級,因此主用服務器上的數(shù)據(jù)修改在秒級內就可以同步到備用服務器,做到了實時同步。
由于本發(fā)明實施例提供的數(shù)據(jù)庫實時同步的方法,采用備用服務器讀取主用服務器上的同步表記錄中的SQL語句的方式,直接獲取主用服務器的數(shù)據(jù)修改,簡化對服務器配置的修改,數(shù)據(jù)庫同步不受操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的限制,提高了數(shù)據(jù)同步的效率。
本發(fā)明的第三個實施例涉及數(shù)據(jù)庫同步的方法,用于主用服務器數(shù)據(jù)庫和備用服務器數(shù)據(jù)庫的同步,其中,主用服務器數(shù)據(jù)庫中設置有包括同步標識號和SQL語句的同步表。本實施例中,以先初始同步,完成后進行實時同步為例,該方法具體流程如圖4所示。
步驟401由備用服務器檢查其保存的標識號是否存在于同步表中,據(jù)此判斷是否需要開始初始同步;如果不需要初始同步,則直接進入步驟406;如果需要初始同步,進行以下步驟
步驟402備用服務器向主用服務器發(fā)送請求初始同步的請求消息;步驟403主用服務器根據(jù)接收到的所述請求消息,在同步表中更新同步標識號,備份主用服務器數(shù)據(jù)庫,生成備份文件;步驟404備用服務器獲取備份文件和更新后的同步標識號;步驟405備用服務器用接收到的備份文件恢復備用服務器數(shù)據(jù)庫。
以上初始同步各步驟中的具體流程,與第一個實施例中的相應步驟相同,此處不再贅述。至此,完成了數(shù)據(jù)庫初始同步過程,因為此時備用服務器保存的標識號存在于同步表中,所以初始同步完成后進行實時同步。
步驟406主用服務器判斷是否有需要實時同步的數(shù)據(jù)庫操作;如果有需要同步的數(shù)據(jù)庫操作,進行下面步驟。
步驟407主用服務器復制需要同步的數(shù)據(jù)庫操作的SQL語句到同步表中;步驟408備用服務器從所述同步表中獲取該SQL語句;步驟409備用服務器用同樣的SQL訪問備用服務器數(shù)據(jù)庫。
以上實時同步各步驟中的具體流程,與第二個實施例中的相應步驟相同,此處不再贅述。在實時同步的過程中,備用服務器同步更新備用服務器的標識號,執(zhí)行完成后刪除主用服務器同步表中已同步的記錄。并且備用服務器每執(zhí)行一條記錄,都會檢查標識號是否存在于同步表中,判斷是否需要初始同步。因為數(shù)據(jù)是從同步表中讀出來的,只要判斷一下備用服務器保存的標識是否和讀出來的記錄的標識是否連續(xù)即可。
由于本發(fā)明該實施例數(shù)據(jù)庫同步的方法,利用同步表,實現(xiàn)數(shù)據(jù)庫的初始同步和實時同步,簡化對服務器配置的修改,數(shù)據(jù)庫同步不受操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的限制,提高了數(shù)據(jù)同步的效率。
本發(fā)明的第四個實施例涉及數(shù)據(jù)庫同步的系統(tǒng),圖5為該數(shù)據(jù)庫同步的系統(tǒng)圖,如圖5所示該數(shù)據(jù)庫同步系統(tǒng),包括配置有主用服務器數(shù)據(jù)庫的主用服務器,以及配置有備用服務器數(shù)據(jù)庫的備用服務器,主用服務器數(shù)據(jù)庫中設置有包括同步標識號和SQL語句的同步表。
其中,主用服務器包括備份單元501,用于在初始同步階段,在收到備用服務器發(fā)送的初始同步請求后,備份數(shù)據(jù)庫生成備份文件;同步表單元502,用于在初始同步階段,在同步表更新同步標識號,還用于在實時同步階段,更新同步表中的同步標識號,復制需要同步的數(shù)據(jù)庫操作的SQL語句到同步表中;同步表可以設置于同步表單元中。
備用服務器包括請求單元503,用于向主用服務器發(fā)送請求初始同步的請求消息;獲取單元504,用于在初始同步階段,獲取主用服務器中備份單元生成的備份文件,以及同步表單元502在同步表中更新后的同步表標識并保存;同步單元505,用于在初始同步階段,從獲取單元504獲取備份文件,并用該備份文件恢復備用服務器數(shù)據(jù)庫,還用于在實時同步階段,從同步表中獲取SQL語句,并用同樣的SQL語句訪問備用服務器數(shù)據(jù)庫。
主用服務器的備份單元可以進一步包括備份子單元,用于在收到備用服務器發(fā)送的初始同步請求后,備份數(shù)據(jù)庫生成備份文件;響應子單元,用于在備份子單元備份數(shù)據(jù)庫成功后,向備用服務器發(fā)送備份成功消息;其中,備份成功消息攜帶初始同步階段同步表單元在同步表中更新后的同步標識號。相應的,獲取單元從備份成功消息中獲取該同步標識號,從備份子單元中獲取備份文件。
主用服務器還可以進一步包括加鎖子單元,用于在主用服務器備份數(shù)據(jù)庫前,對主用服務器數(shù)據(jù)庫加鎖。
該系統(tǒng)還可以包括實時同步判斷單元,用于根據(jù)數(shù)據(jù)庫訪問接口提供的參數(shù),判斷有需要實時同步的數(shù)據(jù)庫操作時,向同步單元發(fā)送同步命令;同步單元根據(jù)所述同步命令,從同步表中獲取SQL語句,并用同樣的SQL語句訪問備用服務器數(shù)據(jù)庫,完成數(shù)據(jù)的實時同步。
數(shù)據(jù)同步過程中,請求單元503根據(jù)獲取單元504保存的同步標識號是否存在于同步表單元502的同步表中,作出是否需要初始同步的判斷;如果需要初始同步,則發(fā)送請求初始同步的請求消息給主用服務器的備份單元501。備份單元501收到備用服務器發(fā)送的請求消息后,備份數(shù)據(jù)庫,生成備份文件。同步表單元502,在同步表中形成更新后的同步標識號。備份成功后,獲取單元504獲取該備份文件,并獲取該同步表標識并保存之。而同步單元505,利用獲取單元504獲取的備份文件,用該文件恢復備用服務器數(shù)據(jù)庫,實現(xiàn)了數(shù)據(jù)庫初始同步。
主用服務器判斷有需要實時同步的數(shù)據(jù)庫操作時,同步表單元502復制需要同步的數(shù)據(jù)庫操作的SQL語句到同步表中,更新同步表單元中的同步標識。在該過程中,主用服務器每修改一次數(shù)據(jù),就增加一次同步表記錄。同步單元505從同步表中獲取該SQL語句,并用同樣的SQL訪問備用服務器數(shù)據(jù)庫,實現(xiàn)數(shù)據(jù)實時的修改同步。備用服務器同步主用服務器的第N條記錄時,只會刪除主用同表中前面的N-1條記錄,第N條記錄保留在同步表中,這樣,備用每次都可以檢查自己同步過的最后一條記錄是否在同步表中,判斷是否需要初始同步。
而本實施例中,判斷是否有需要實時同步的數(shù)據(jù)庫操作,可以由實時同步判斷單元來實現(xiàn),該單元根據(jù)數(shù)據(jù)庫訪問接口提供的參數(shù),判斷是否有需要實時同步的數(shù)據(jù)庫操作。若判斷結果為是,則向同步單元505發(fā)送同步命令,同步單元505根據(jù)該命令,從所述同步表中獲取SQL語句,并用同樣的SQL語句訪問備用服務器數(shù)據(jù)庫。
由于本發(fā)明該實施例數(shù)據(jù)庫同步系統(tǒng),利用同步表,實現(xiàn)數(shù)據(jù)庫的初始同步和實時同步,簡化對服務器配置的修改,數(shù)據(jù)庫同步不受操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的限制,提高了數(shù)據(jù)同步的效率。
以上所述的具體實施例,對本發(fā)明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發(fā)明思想的一種展示,而非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
權利要求
1.一種數(shù)據(jù)庫同步方法,用于主用服務器數(shù)據(jù)庫和備用服務器數(shù)據(jù)庫的初始同步,其特征在于,所述主用服務器數(shù)據(jù)庫中設置有包括同步標識號的同步表,該方法包括以下步驟備用服務器向主用服務器發(fā)送初始同步請求;主用服務器根據(jù)接收到的所述初始同步請求,在所述同步表中更新同步標識號,并備份所述主用服務器數(shù)據(jù)庫,生成備份文件;備用服務器獲取所述更新后的同步標識號和所述備份文件,用所述備份文件恢復備用服務器數(shù)據(jù)庫。
2.根據(jù)權利要求1所述的方法,其特征在于,所述主用服務器根據(jù)接收到的所述初始同步請求,在所述同步表中更新同步標識號的步驟包括主用服務器接收到所述初始同步請求后,清空同步表中的數(shù)據(jù)記錄并插入空記錄,形成更新后的同步標識號。
3.根據(jù)權利要求2所述的方法,其特征在于,所述主用服務器備份數(shù)據(jù)庫成功后,向備用服務器發(fā)送攜帶所述更新后的同步標識號的備份成功消息;所述備用服務器獲取所述更新后的同步標識號的步驟為備用服務器從所述備份成功消息中獲取并保存所述更新后的同步標識號。
4.根據(jù)權利要求1至3任一項所述的方法,其特征在于,進一步包括在主用服務器備份數(shù)據(jù)庫前,對主用服務器數(shù)據(jù)庫加鎖的步驟。
5.根據(jù)權利要求1至3任一項所述的方法,其特征在于,所述同步表中的同步標識號采用數(shù)據(jù)庫提供的自動遞增的種子屬性。
6.一種數(shù)據(jù)庫同步方法,用于主用服務器數(shù)據(jù)庫和備用服務器數(shù)據(jù)庫的實時同步,所述主用服務器數(shù)據(jù)庫中設置有包括同步標識號和SQL語句的同步表,所述同步標識號根據(jù)數(shù)據(jù)庫操作實時更新,其特征在于,該方法包括以下步驟主用服務器復制需要同步的數(shù)據(jù)庫操作的SQL語句到所述同步表中;備用服務器從所述同步表中獲取所述SQL語句,并用所述SQL語句訪問備用服務器數(shù)據(jù)庫。
7.根據(jù)權利要求6所述的方法,其特征在于,還包括如下步驟主用服務器根據(jù)數(shù)據(jù)庫訪問接口提供的參數(shù),判斷有需要實時同步的數(shù)據(jù)庫操作。
8.根據(jù)權利要求7所述的方法,其特征在于,所述備用服務器從所述同步表中獲取所述SQL語句的步驟包括獲取主用服務器數(shù)據(jù)庫的用戶名和密碼;根據(jù)所述獲取的用戶名和密碼連接到主用服務器,獲取同步表的所述SQL語句。
9.一種數(shù)據(jù)庫同步方法,用于主用服務器數(shù)據(jù)庫和備用服務器數(shù)據(jù)庫的同步,所述主用服務器數(shù)據(jù)庫中設置有包括同步標識號和SQL語句的同步表,其特征在于,該方法包括A、備用服務器檢查其保存的標識號是否存在于所述同步表中,如果不存在,則執(zhí)行步驟B、C、D,如果存在,則執(zhí)行步驟E、F;B、向主用服務器發(fā)送初始同步請求;C、主用服務器根據(jù)接收到的所述請求,在所述同步表中更新同步標識號,備份所述主用服務器數(shù)據(jù)庫,生成備份文件;D、備用服務器獲取所述更新后的同步標識號和所述備份文件,用所述備份文件恢復備用服務器數(shù)據(jù)庫;E、主用服務器復制需要同步的數(shù)據(jù)庫操作的SQL語句到所述同步表中;F、備用服務器從所述同步表中獲取所述SQL語句,并用所述SQL語句訪問備用服務器數(shù)據(jù)庫。
10.根據(jù)權利要求9所述的方法,其特征在于,所述主用服務器根據(jù)接收到的所述初始同步請求,在所述同步表中更新同步標識號的步驟包括主用服務器接收到所述初始同步請求后,清空同步表中的數(shù)據(jù)記錄并插入空記錄,形成更新后的同步標識號;主用服務器備份數(shù)據(jù)庫成功后,向備用服務器發(fā)送攜帶所述更新后的同步標識號的備份成功消息。
11.根據(jù)權利要求9所述的方法,其特征在于,在步驟E之前還包括主用服務器根據(jù)數(shù)據(jù)庫訪問接口提供的參數(shù),判斷有需要實時同步的數(shù)據(jù)庫操作。
12.根據(jù)權利要求9所述的方法,其特征在于,所述備用服務器從所述同步表中獲取所述SQL語句的步驟包括備用服務器獲取主用服務器數(shù)據(jù)庫的用戶名和密碼,根據(jù)所述用戶名和密碼連接到主用服務器上,獲取同步表的所述SQL語句。
13.一種數(shù)據(jù)庫同步系統(tǒng),包括配置有主用服務器數(shù)據(jù)庫的主用服務器,以及配置有備用服務器數(shù)據(jù)庫的備用服務器,其特征在于,所述主用服務器數(shù)據(jù)庫中設置有包括同步標識號和SQL語句的同步表;所述主用服務器包括備份單元,用于在初始同步階段,在收到備用服務器發(fā)送的初始同步請求后,備份數(shù)據(jù)庫生成備份文件;同步表單元,用于在初始同步階段,在所述同步表中更新同步標識號,還用于在實時同步階段,更新所述同步表中的同步標識號,復制需要同步的數(shù)據(jù)庫操作的SQL語句到同步表中;所述備用服務器包括請求單元,用于向主用服務器發(fā)送初始同步請求;獲取單元,用于在初始同步階段,獲取所述備份單元生成的備份文件,以及同步表單元在所述同步表中更新后的同步標識號;同步單元,用于在初始同步階段,從所述獲取單元獲取所述備份文件,并用該備份文件恢復備用服務器數(shù)據(jù)庫,還用于在實時同步階段,從所述同步表中獲取所述SQL語句,并用所述SQL語句訪問備用服務器數(shù)據(jù)庫。
14.根據(jù)權利要求13所述的系統(tǒng),其特征在于,所述主用服務器的備份單元進一步包括備份子單元,用于在收到備用服務器發(fā)送的初始同步請求后,備份數(shù)據(jù)庫生成備份文件;響應子單元,用于在所述備份子單元備份數(shù)據(jù)庫成功后,向備用服務器發(fā)送備份成功消息;所述備份成功消息攜帶初始同步階段所述同步表單元在所述同步表中更新后的同步標識號;所述獲取單元從所述備份成功消息中獲取所述更新后的同步標識號,從所述備份子單元中獲取所述備份文件。
15.根據(jù)權利要求13所述的系統(tǒng),其特征在于,所述主用服務器進一步包括加鎖子單元,用于在主用服務器備份數(shù)據(jù)庫前,對主用服務器數(shù)據(jù)庫加鎖。
16.根據(jù)權利要求13所述的系統(tǒng),其特征在于,該系統(tǒng)還包括實時同步判斷單元,用于根據(jù)數(shù)據(jù)庫訪問接口提供的參數(shù),判斷有需要實時同步的數(shù)據(jù)庫操作時,向所述同步單元發(fā)送同步命令;所述同步單元根據(jù)所述同步命令,從所述同步表中獲取所述SQL語句,并用所述SQL語句訪問備用服務器數(shù)據(jù)庫。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)庫同步的方法,該方法中在主用服務器數(shù)據(jù)庫中設置包括同步標識號和SQL語句的同步表,利用同步表實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)同步。本發(fā)明還公開了一種數(shù)據(jù)庫同步系統(tǒng),包括主用服務器和備用服務器,主用服務器包括備份單元、同步表單元,備用服務器包括請求單元、獲取單元和同步單元。本發(fā)明公開的方法和系統(tǒng),利用同步表,在實現(xiàn)數(shù)據(jù)庫同步,簡化對服務器配置的修改,使得數(shù)據(jù)庫同步可以不受操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的限制,提高數(shù)據(jù)同步的效率。
文檔編號H04L29/06GK101038591SQ20071007388
公開日2007年9月19日 申請日期2007年4月11日 優(yōu)先權日2007年4月11日
發(fā)明者朱湘毅 申請人:華為技術有限公司