專利名稱:數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)庫應(yīng)用技術(shù)領(lǐng)域,尤其是一種數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法。
背景技術(shù):
可靠性是衡量數(shù)據(jù)庫系統(tǒng)抗故障能力的重要指標(biāo)。目前很多可靠性技術(shù)都是基于 數(shù)據(jù)冗余原理來獲得系統(tǒng)整體的高可靠性,例如雙機熱備技術(shù)、集群技術(shù)等。其基本原理 是為一份數(shù)據(jù)復(fù)制多份拷貝,分別存儲在不同的數(shù)據(jù)庫結(jié)點上,當(dāng)系統(tǒng)正常運行時,所有 結(jié)點可同時提供服務(wù),當(dāng)系統(tǒng)接收到一個服務(wù)請求時,系統(tǒng)通常根據(jù)服務(wù)請求涉及的冗余 數(shù)據(jù)分布,以及各結(jié)點負(fù)載狀態(tài)等信息,動態(tài)選擇一個結(jié)點完成該服務(wù),當(dāng)一個結(jié)點發(fā)生斷 電、宕機等故障時,其它存儲了冗余數(shù)據(jù)的結(jié)點仍可繼續(xù)提供服務(wù),實現(xiàn)了 7X24的系統(tǒng)服 務(wù)能力?;跀?shù)據(jù)冗余原理的可靠性技術(shù)在提高系統(tǒng)可靠性能力的同時,也帶來了一些新 的問題,其中最重要的就是各冗余結(jié)點間的數(shù)據(jù)一致性問題。導(dǎo)致各冗余結(jié)點數(shù)據(jù)不一致 的原因主要有兩個一是冗余數(shù)據(jù)同步策略,當(dāng)一個結(jié)點的數(shù)據(jù)被更新時,該更新可能不會 實時同步到其它冗余結(jié)點上,這將導(dǎo)致冗余結(jié)點上的數(shù)據(jù)版本并不是最新的,與其它結(jié)點 不一致;二是系統(tǒng)數(shù)據(jù)受到篡改攻擊,并且被篡改后的數(shù)據(jù)不能通過系統(tǒng)其它檢測技術(shù)檢 測到,篡改操作可能發(fā)生在物理層或語義層,物理層篡改可能是直接修改數(shù)據(jù)文件,語義層 篡改可能是繞過冗余數(shù)據(jù)同步機制在某個結(jié)點上以該結(jié)點提供的正常方式直接修改數(shù)據(jù)。 物理層篡改通常被認(rèn)為是一種較低級的攻擊方式,可以被簡單的物理層檢驗方法檢測到, 例如頁面級CRC校驗。語義層篡改更為隱蔽,攻擊者通常直接登錄到存儲冗余數(shù)據(jù)的某個 結(jié)點,執(zhí)行會導(dǎo)致數(shù)據(jù)變化的SQL語句,并通過某種方式阻止存儲相同冗余數(shù)據(jù)的其它結(jié) 點得到數(shù)據(jù)更新。對于該結(jié)點來說,攻擊者執(zhí)行的操作都是合法的,因此能夠通過結(jié)點內(nèi)部 的物理層檢驗,但對于由多個結(jié)點構(gòu)成的整體系統(tǒng)來說,數(shù)據(jù)一致性已經(jīng)被破壞了,此時若 用戶的操作請求涉及到被篡改數(shù)據(jù),則可能得到錯誤的執(zhí)行結(jié)果。綜上所述,現(xiàn)有數(shù)據(jù)庫冗 余數(shù)據(jù)一致性校驗方法主要是在物理層進行校驗,難以對語義層篡改進行有效校驗,不能 有效地發(fā)現(xiàn)各冗余結(jié)點間的數(shù)據(jù)一致性問題。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種可在語義層對各冗余結(jié)點間數(shù) 據(jù)進行一致性校驗并且能夠有效發(fā)現(xiàn)數(shù)據(jù)冗余數(shù)據(jù)不一致問題的數(shù)據(jù)庫冗余數(shù)據(jù)一致性 檢驗方法。本發(fā)明解決現(xiàn)有的技術(shù)問題是采取以下技術(shù)方案實現(xiàn)的一種數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法,包括以下步驟步驟1 數(shù)據(jù)庫主服務(wù)器接收到用戶操作請求后,確認(rèn)該操作請求所涉及的冗余 數(shù)據(jù)分布情況,得到存儲有相關(guān)冗余數(shù)據(jù)的備份服務(wù)器列表;步驟2 數(shù)據(jù)庫主服務(wù)器將用戶操作請求發(fā)送至備份服務(wù)器列表中的各備份服務(wù)器;步驟3 各備份服務(wù)器執(zhí)行用戶操作請求,得到操作結(jié)果;步驟4 各備份服務(wù)器計算操作結(jié)果的語義校驗碼;步驟5 各備份服務(wù)器將操作結(jié)果和相應(yīng)的語義校驗碼發(fā)送到校驗服務(wù)器;步驟6 校驗服務(wù)器接收到各備份服務(wù)器的操作結(jié)果和語義校驗碼后,對比各語 義校驗碼是否一致,若一致則將操作結(jié)果發(fā)送給數(shù)據(jù)庫主服務(wù)器,若不一致則向主服務(wù)器 發(fā)送相應(yīng)錯誤信息;步驟7 數(shù)據(jù)庫主服務(wù)器將接收到的操作結(jié)果或錯誤信息轉(zhuǎn)發(fā)給用戶。而且,所述步驟4計算操作結(jié)果的語義校驗碼包括以下步驟步驟1 初始化語義校驗碼為全0 ;步驟2 遍歷操作結(jié)果的每條元組,為該條元組生成元組校驗碼,然后將該元組校 驗碼與當(dāng)前語義校驗碼進行按位異或操作;步驟3 對語義校驗碼進行調(diào)整,消除因元組內(nèi)部屬性順序、主機字節(jié)序?qū)е碌男?驗碼差異。而且,所述步驟2生成元組校驗碼的方法為依次檢查元組各屬性并按照下述方 式處理(1)若某個定長屬性為空,則以全0填充,填充長度為該屬性的長度;(2)若某個變長屬性長度小于等于N字節(jié),則在其尾部以全0填充不足部分;(3)若某個變長屬性長度大于N字節(jié),則將該屬性分解為長度為N字節(jié)的多個子屬 性;若最后一個子屬性不足N字節(jié),則在其尾部以全0填充不足部分,然后將所有子屬性進 行按位異或操作,將該操作結(jié)果作為該屬性在元組校驗碼中的值;而且,所述的元組校驗碼的長度是固定的,元組校驗碼的長度等于元組所有定長 屬性長度之和加上變長屬性個數(shù)乘以N字節(jié)。而且,所述步驟3對語義校驗碼進行調(diào)整包括以下內(nèi)容(1)調(diào)整元組內(nèi)部屬性順序的過程為按庫名、模式名、表名、屬性名進行組合排 序,然后按排序結(jié)果調(diào)整校驗碼中各屬性的位置;(2)調(diào)整各定長屬性的字節(jié)序為網(wǎng)絡(luò)字節(jié)序;(3)調(diào)整各定長屬性的變長數(shù)組內(nèi)部字節(jié)序為網(wǎng)絡(luò)字節(jié)序若變長屬性為字節(jié)流 類型的屬性,則保持現(xiàn)有字節(jié)序不變,若變長屬性為定長屬性的數(shù)組類型,則將其按照定長 屬性長度分組,然后調(diào)整各組的字節(jié)序為網(wǎng)絡(luò)字節(jié)序。本發(fā)明的優(yōu)點和積極效果是本發(fā)明將用戶操作請求同時發(fā)往多個存儲有相關(guān)冗余數(shù)據(jù)的備份服務(wù)器執(zhí)行,并 為每一份執(zhí)行結(jié)果生成一個語義校驗碼,然后備份服務(wù)器通過對比語義校驗碼判斷執(zhí)行結(jié) 果是否正確,本方法可在語義層進行檢驗,克服了現(xiàn)有物理層檢驗方法的局限性,能夠直接 針對執(zhí)行結(jié)果進行檢驗,有效地降低了需要進行檢驗操作的數(shù)據(jù)量,也降低了檢驗操作的 系統(tǒng)資源消耗。
圖1是本發(fā)明所基于的數(shù)據(jù)庫冗余數(shù)據(jù)一致性校驗系統(tǒng)的連接示意圖2是本發(fā)明的處理流程圖;圖3是語義校驗碼生成算法的處理流程圖。
具體實施例方式以下結(jié)合附圖對本發(fā)明實施例做進一步詳述。一種數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法,是在如圖1所示的數(shù)據(jù)庫冗余數(shù)據(jù)一致性 校驗系統(tǒng)上實現(xiàn)的。在該校驗系統(tǒng)中,用戶發(fā)出操作請求后,數(shù)據(jù)庫主服務(wù)器向各個備份服 務(wù)器發(fā)出操作請求,各個備份服務(wù)器進行相應(yīng)的備份處理并向校驗服務(wù)器發(fā)送操作結(jié)果和 語義校驗碼,校驗服務(wù)器通過對比語義校驗碼判斷執(zhí)行結(jié)果是否正確并將操作結(jié)果通過數(shù) 據(jù)庫主服務(wù)器發(fā)送給用戶。如圖2所示,本數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法的具體步驟包括步驟1 數(shù)據(jù)庫主服務(wù)器接收到用戶操作請求后,確認(rèn)該操作請求所涉及的冗余 數(shù)據(jù)分布情況,得到存儲有相關(guān)冗余數(shù)據(jù)的備份服務(wù)器列表。步驟2 數(shù)據(jù)庫主服務(wù)器將用戶操作請求發(fā)送至備份服務(wù)器列表中的各備份服務(wù)
ο步驟3 各備份服務(wù)器執(zhí)行用戶操作請求,得到操作結(jié)果。步驟4 各備份服務(wù)器計算操作結(jié)果的語義校驗碼。由于數(shù)據(jù)庫數(shù)據(jù)冗余技術(shù)實現(xiàn)方式的多樣性和數(shù)據(jù)庫支持?jǐn)?shù)據(jù)類型的多樣性,因 此,各備份服務(wù)器計算操作結(jié)果的語義校驗碼時,需要對下述各種情況進行正確處理1、冗余數(shù)據(jù)所處各結(jié)點主機字節(jié)序不同;。2、網(wǎng)絡(luò)字節(jié)序與各結(jié)點主機字節(jié)序不同;3、多條元組在物理存儲層排列順序不同;4、元組多個屬性在物理存儲層排列順序不同。5、元組可能包含定長屬性、變長屬性,屬性可能為空值。如圖3所示,備份服務(wù)器計算操作結(jié)果的語義校驗碼的具體步驟為1、初始化語義校驗碼為全0。2、遍歷操作結(jié)果的每條元組,為該條元組生成元組校驗碼,然后將該元組校驗碼 與當(dāng)前語義校驗碼進行按位異或操作。本步驟中的生成元組校驗碼方法為依次檢查元組各屬性,并進行如下處理(1)若某個定長屬性為空,則以全0填充,填充長度為該屬性的長度;(2)若某個變長屬性長度小于等于N字節(jié),則在其尾部以全0填充不足部分;(3)若某個變長屬性長度大于N字節(jié),則將該屬性分解為長度為N字節(jié)的多個子屬 性;若最后一個子屬性不足N字節(jié),則在其尾部以全0填充不足部分,然后將所有子屬性進 行按位異或操作,將該操作結(jié)果作為該屬性在元組校驗碼中的值。在本步驟中,設(shè)定N字節(jié)的目的是將變長屬性在元組校驗碼中的值長度設(shè)為定長。經(jīng)過上述過程生成的元組校驗碼的長度是固定的,元組校驗碼的長度等于元組所 有定長屬性長度之和加上變長屬性個數(shù)乘以N字節(jié)。3、對語義校驗碼進行調(diào)整,消除因元組內(nèi)部屬性順序、主機字節(jié)序?qū)е碌男r灤a差異,其中對語義校驗碼進行調(diào)整包括以下內(nèi)容(1)調(diào)整元組內(nèi)部屬性順序的過程為按庫名、模式名、表名、屬性名進行組合排 序,然后按排序結(jié)果調(diào)整校驗碼中各屬性的位置,因為數(shù)據(jù)庫中不會存在庫名、模式名、表 名、屬性名都完全相同的屬性,因此上述排序方式可以保證得到?jīng)]有二義性的唯一結(jié)果;(2)調(diào)整各定長屬性的字節(jié)序為網(wǎng)絡(luò)字節(jié)序;(3)調(diào)整各定長屬性的變長數(shù)組內(nèi)部字節(jié)序為網(wǎng)絡(luò)字節(jié)序若變長屬性為字節(jié)流 類型的屬性,如大對象,則保持現(xiàn)有字節(jié)序不變,若變長屬性為定長屬性的數(shù)組類型,如整 型數(shù)組,則將其按照定長屬性長度分組,然后調(diào)整各組的字節(jié)序為網(wǎng)絡(luò)字節(jié)序。通過上述步驟,各備份服務(wù)器即可計算出操作結(jié)果的語義校驗碼。步驟5 各備份服務(wù)器將操作結(jié)果和相應(yīng)的語義校驗碼發(fā)送到校驗服務(wù)器。步驟6 校驗服務(wù)器接收到各備份服務(wù)器的操作結(jié)果和語義校驗碼后,對比各語 義校驗碼是否一致,若一致則將操作結(jié)果發(fā)送給數(shù)據(jù)庫主服務(wù)器,若不一致則向主服務(wù)器 發(fā)送相應(yīng)錯誤信息。步驟7 數(shù)據(jù)庫主服務(wù)器將接收到的操作結(jié)果或錯誤信息轉(zhuǎn)發(fā)給用戶。通過上述步驟即可實現(xiàn)數(shù)據(jù)庫冗余數(shù)據(jù)一致性的校驗功能。本發(fā)明所述的實施例是說明性的,而不是限定性的,因此發(fā)明并不限于具體實施 方式中所述的實施例,凡是由本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的技術(shù)方案得出的其他實施方 式,同樣屬于本發(fā)明保護的范圍。
權(quán)利要求
1.一種數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法,其特征在于包括以下步驟步驟1 數(shù)據(jù)庫主服務(wù)器接收到用戶操作請求后,確認(rèn)該操作請求所涉及的冗余數(shù)據(jù) 分布情況,得到存儲有相關(guān)冗余數(shù)據(jù)的備份服務(wù)器列表;步驟2 數(shù)據(jù)庫主服務(wù)器將用戶操作請求發(fā)送至備份服務(wù)器列表中的各備份服務(wù)器;步驟3 各備份服務(wù)器執(zhí)行用戶操作請求,得到操作結(jié)果;步驟4 各備份服務(wù)器計算操作結(jié)果的語義校驗碼;步驟5 各備份服務(wù)器將操作結(jié)果和相應(yīng)的語義校驗碼發(fā)送到校驗服務(wù)器;步驟6:校驗服務(wù)器接收到各備份服務(wù)器的操作結(jié)果和語義校驗碼后,對比各語義校 驗碼是否一致,若一致則將操作結(jié)果發(fā)送給數(shù)據(jù)庫主服務(wù)器,若不一致則向主服務(wù)器發(fā)送 相應(yīng)錯誤信息;步驟7 數(shù)據(jù)庫主服務(wù)器將接收到的操作結(jié)果或錯誤信息轉(zhuǎn)發(fā)給用戶。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法,其特征在于所述步驟4 計算操作結(jié)果的語義校驗碼包括以下步驟步驟1 初始化語義校驗碼為全0 ;步驟2 遍歷操作結(jié)果的每條元組,為該條元組生成元組校驗碼,然后將該元組校驗碼 與當(dāng)前語義校驗碼進行按位異或操作;步驟3 對語義校驗碼進行調(diào)整,消除因元組內(nèi)部屬性順序、主機字節(jié)序?qū)е碌男r灤a差異。
3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法,其特征在于所述步驟2 生成元組校驗碼的方法為依次檢查元組各屬性并按照下述方式處理(1)若某個定長屬性為空,則以全0填充,填充長度為該屬性的長度;(2)若某個變長屬性長度小于等于N字節(jié),則在其尾部以全0填充不足部分;(3)若某個變長屬性長度大于N字節(jié),則將該屬性分解為長度為N字節(jié)的多個子屬性; 若最后一個子屬性不足N字節(jié),則在其尾部以全0填充不足部分,然后將所有子屬性進行按 位異或操作,將該操作結(jié)果作為該屬性在元組校驗碼中的值;
4.根據(jù)權(quán)利要求3所述的數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法,其特征在于所述的元組 校驗碼的長度是固定的,元組校驗碼的長度等于元組所有定長屬性長度之和加上變長屬性 個數(shù)乘以N字節(jié)。
5.根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法,其特征在于所述步驟3 對語義校驗碼進行調(diào)整包括以下內(nèi)容(1)調(diào)整元組內(nèi)部屬性順序的過程為按庫名、模式名、表名、屬性名進行組合排序,然 后按排序結(jié)果調(diào)整校驗碼中各屬性的位置;(2)調(diào)整各定長屬性的字節(jié)序為網(wǎng)絡(luò)字節(jié)序;(3)調(diào)整各定長屬性的變長數(shù)組內(nèi)部字節(jié)序為網(wǎng)絡(luò)字節(jié)序若變長屬性為字節(jié)流類型 的屬性,則保持現(xiàn)有字節(jié)序不變,若變長屬性為定長屬性的數(shù)組類型,則將其按照定長屬性 長度分組,然后調(diào)整各組的字節(jié)序為網(wǎng)絡(luò)字節(jié)序。
全文摘要
本發(fā)明涉及一種數(shù)據(jù)庫冗余數(shù)據(jù)一致性檢驗方法,包括如下步驟數(shù)據(jù)庫主服務(wù)器接收到用戶操作請求后確認(rèn)相關(guān)備份服務(wù)器;數(shù)據(jù)庫主服務(wù)器將用戶操作請求發(fā)送至備份服務(wù)器列表中的各備份服務(wù)器;各備份服務(wù)器執(zhí)行用戶操作請求得到操作結(jié)果;各備份服務(wù)器計算操作結(jié)果的語義校驗碼;各備份服務(wù)器將操作結(jié)果和相應(yīng)的語義校驗碼發(fā)送到校驗服務(wù)器;校驗服務(wù)器對操作結(jié)果和語義校驗碼后進行校驗并將操作結(jié)果或錯誤信息發(fā)送給數(shù)據(jù)庫主服務(wù)器;數(shù)據(jù)庫主服務(wù)器將接收到的操作結(jié)果或錯誤信息轉(zhuǎn)發(fā)給用戶。本發(fā)明克服了物理層檢驗方法的局限性,能直接針對執(zhí)行結(jié)果進行檢驗,有效地降低了需要進行檢驗操作的數(shù)據(jù)量,也降低小了檢驗操作的系統(tǒng)資源消耗。
文檔編號G06F17/30GK102004799SQ201010609540
公開日2011年4月6日 申請日期2010年12月28日 優(yōu)先權(quán)日2010年12月28日
發(fā)明者何清法, 關(guān)剛, 馮柯, 孟勃榮, 徐巖, 李陽, 蔣志勇, 謝衛(wèi)平, 車曉瑤, 顧云蘇 申請人:天津神舟通用數(shù)據(jù)技術(shù)有限公司