專利名稱::基于數據庫邏輯鎖的變更處理方法
技術領域:
:本發明涉及計算機數據處理方法,尤其涉及一種基于數據庫邏輯鎖的聯機事物處理的變更處理方法。
背景技術:
:在計算機數據處理過程中,經常需要對數據進行查詢和更新,尤其是在大數據量、大業務量的業務數據處理系統中,如銀行計算機系統,當大量聯機交易并發時,由于數據庫儲存的信息極其巨大,要求對數據庫訪問處理效率非常高。目前銀行等金融機構的核心業務系統大都采用了專門的數據庫軟件系統,在聯機事務訪問數據庫時,采用的一般方法是當聯機需要數據更新時,先使用排他鎖鎖住該數據資源(如表鎖或行鎖),在整個交易處理結束前,向數據庫提交COMMIT動作來完成表數據的變更和鎖釋放,或者通過ROLLBACK動作來回滾表更新事務和鎖釋放。目前這種方法在聯機事務的處理過程中,完全通過數據庫提供的系統鎖控制處理,非常簡單方便,但由于數據庫鎖的存在,使得數據資源的使用具有獨占性和排他性,從而影響到其他并發聯^l交易的實時性。對于一些較為復雜、需訪問較多數據庫資源、處理時間相對較長的聯機事務而言,這種處理方法使得聯機交易占用數據庫資源的時間較長,當大量類似復雜的交易并發時,將導致大量交易的等待,占用大量的系統資源,嚴重的將導致數據庫死鎖,產生數據安全隱患。同時,由于系統一直未能即時反饋響應,導致用戶一直處理等待狀態,不知系統發生了什么異常情形。因此,無論從系統的穩定運行,還是從客戶的友好操作來說,都迫切需要一種技術方法來避免上述問題。中國專利(CN1110764C)公開了一種關于數據庫的方法,使數據庫中的多個對象被一致讀取,包括通過在兩個階段上鎖定來管理交易,第一階段包括訪問受交易對象影響的請求和鎖定該對象,第二階段包括提交該交易并解除第一階段中設置的所有鎖定,交易在第一階段中執行所有的數據改變操作,在第二階段之后盡可能執行最大量的未變操作,一個對象的每個版本分配一個計數器,所述計數器在設置一個鎖定是逐一增加,在解除一個鎖定是逐一減少。其中,兩階段鎖定通常包括兩種不同的鎖定,第一鎖定是共享鎖定,由與一個數據對象相關的只讀交易設置,并語序其他讀交易訪問所述對象,但鎖定該對象不能改變交易。第二鎖定是排他鎖定,由改變數據對象的交易設置并鎖定與所有其他交易相關的對象。雖然上述方法適當減少了排他鎖定的處理時間,但是數據庫訪問效率和計算機實時處理速度方面仍有待改進。
發明內容本發明的目的是提供一種基于數據庫邏輯鎖的聯機事物處理的數據處理方法,能夠提高數據庫訪問效率和計算機實時處理速度。為了實現上述目的,本發明提供一種基于數據庫邏輯鎖的變更處理方法,包括-交易終端發出交易請求;交易處理裝置接收到所述交易請求,根據所述交易請求類型判斷是否需要數據更新;當所述交易請求需要更新數據時,所述交易處理裝置啟動數據査詢控制單元查詢數據庫,得到對應的記錄數據和邏輯鎖序號,并將交易請求數據、查詢數據庫得到的記錄數據和邏輯鎖序號傳給交易邏輯處理單元處理;所述交易邏輯處理單元對接收到的數據進行檢查、判斷和運算處理,當滿足交易條件時,所述交易邏輯處理單元啟動數據更新單元進行處理,并將處理結果和所述査詢數據庫得到的邏輯鎖序號傳送給所述數據更新單元;所述數據更新單元使用排他鎖鎖定對應數據庫資源,并獲取邏輯鎖序號和記錄數據,比較該邏輯鎖序號與所述査詢數據庫得到的邏輯鎖序號是否一致,如果一致則根據所述交易邏輯處理單元的處理結果更新記錄數據并將該邏輯鎖序號加一,數據變更處理成功,否則數據變更處理失敗,然后所述數據更新單元將處理結果返回給所述交易處理裝置;所述交易處理裝置將所述數據更新單元的處理結果返回給所述交易終端。從上述技術方案可以看出,本發明通過修改應用流程,將帶鎖更新的處理集中在最后進行的方法,有效的解決了大量交易并發時系統資源占用過多,效率較低的問題。同時,由于增加了邏輯序號字段,通過邏輯鎖的判斷很容易的檢査出表數據發生變更,簡化了數據發生變化的判斷。主要優點如下1、提高了數據庫訪問效率和計算機實時處理速度傳統的表更新方法,在交易的第一張表已經開始帶鎖訪問,因此當交易流程訪問表較多,交易并發量大時,造成交易所需時間逐漸變長。而通過修改應用流程,將帶鎖訪問表數據和COMMIT/ROLLBACK處理集中放在流程最后,極大的縮短了這種情況下的應用鎖表時間,把時間控制在以單個交易本身所需時間以內,減少因等待而占用的系統資源。下表為在IBM主機環境下DB2數據庫中運行本發明方法的平均處理時間,與普通的數據庫鎖更新方法進行了比較,試驗結果如下表所示<table>tableseeoriginaldocumentpage6</column></row><table><table>tableseeoriginaldocumentpage7</column></row><table>以上數據和驗證環境等因素有關,不同環境有不一樣的數據,聯機事務處理時間僅和該筆交易的單體復雜度也有關。但使用本發明方法后,由于帶鎖更新集中在最后處理,并檢查了邏輯鎖,當邏輯鎖發生變化,立即返回錯誤完成處理,理論上節省了系統處理時間。2、優化用戶顯示界面傳統的表更新方法,當交易流程訪問表較多,交易并發量大時,由于更新同一張表的幾率增大,交易等待時間逐漸變長,造成交易等待界面時間較長,但客戶并不清楚為什么等待如此長的時間,界面顯的不太友好。當使用了本技術,如果不同的交易在同時更新同一張表時,本交易發現讀取該表的邏輯鎖字段前后值不一致(査詢和更新時間段內有其它交易已經更新了表的數據),則立即結束交易并返回"系統忙,請稍后再試"錯誤提示。減少了客戶等待時間,也提示了客戶。圖1是采用本發明的基于數據庫邏輯鎖的變更處理方法的交易處理裝置的結構示意圖。圖2是根據本發明的基于數據庫邏輯鎖的變更處理方法的總體流程圖。圖3是根據本發明的基于數據庫邏輯鎖的變更處理方法中的更新處理的流程圖。具體實施例方式為使本發明的目的、技術方案和優點更加清晰易懂,下面結合附圖,對本發明做進一步詳細說明。在此,本發明的示意性實施例及其說明用于解釋本發明,但并不作為對本發明的限定。下面將對照附圖,對本發明的技術方案進行詳細說明。如圖1所示為采用本發明的基于數據庫邏輯鎖的變更處理方法的交易處理裝置1,該交易處理裝置1包括表數據査詢控制單元2、交易邏輯處理單元3、表數據更新處理單元4。數據査詢控制單元2負責交易數據的査詢獲取,使用數據庫查詢語句(如SQL語言中的SELECT語句)查詢數據庫數據記錄,得到聯機交易所需業務數據以及該記錄的邏輯鎖序號Al,其中業務數據可以是包括交易卡號、賬戶余額等信息,并將聯機交易請求數據、查詢數據庫得到的記錄數據和邏輯鎖序號Al傳給交易邏輯處理單元3處理;交易邏輯處理單元3主要完成聯機交易中的邏輯判斷處理,如檢查賬戶余額B是否滿足交易條件,交易金額是否超限額等。如檢查通過,則啟動數據更新處理單元4進行處理,并將邏輯鎖序號Al傳送給數據更新處理單元4;否則退出,交易失敗;表數據更新處理單元4負責對數據庫數據的更新,使用數據庫更新語句(如SQL語言中的SELECT*FORUPDATE語句)鎖定該筆交易所需記錄,獲取邏輯鎖序號A2,如果A1=A2,說明從數據查詢階段至數據更新階段期間,該筆交易記錄沒有被其它并發交易更新,則更新數據庫該筆記錄,如更新賬戶余額=原賬戶余額-交易發生額,A2=A2+1;否則,交易失敗,退出處理。圖2為根據本發明的基于數據庫邏輯鎖的變更處理方法中的流程圖,根據本發明的基于數據庫邏輯鎖的變更處理方法包括步驟201:交易處理裝置1接收到交易終端的聯機事務處理請求,根據交易請求類型判斷該筆聯機交易請求是否需要數據更新,如果是,則進入步驟202;否則,退出變更處理方法,按一般聯機事務處理方法進行處理。其中,對于査詢數據,數據不發生改變;對于新增數據,邏輯鎖序號初始值賦為O;.對于刪除數據,則是將記錄從數據庫中清除掉,這三種情況都不需要更新邏輯鎖序號,退出變更處理。步驟202:交易處理裝置1啟動數據查詢控制單元2,使用不帶鎖數據庫查詢語句(如SQL語言中的SELECT語句)査詢數據庫,得到該筆聯機交易所需的記錄數據和邏輯鎖序號,并將交易請求數據、査詢數據庫得到的記錄數據和邏輯鎖序號傳給交易邏輯處理單元3處理;步驟203:邏輯處理單元3,根據事務處理的功能要求,對數據査詢控制單元2傳送過來的數據進行檢査、判斷和運算等處理,完成整個聯機交易的業務邏輯檢查判斷,如賬戶余額是否足夠,賬戶交易金額是否超限額等等。如果滿足交易條件,再啟動數據更新單元4進行處理;歩驟204:數據更新單元4進行如圖3的檢査判斷處理,并將處理結果返回給交易處理裝置l;步驟205:交易處理裝置1將數據更新單元4的處理結果返回給請求終4山頓。如圖3所示,根據本發明的基于數據庫邏輯鎖的變更處理方法中的更新處理的流程圖,具體包括歩驟301:數據更新單元4接收到邏輯處理單元3發起的數據更新請求;步驟302:數據更新單元4根據數據更新請求,使用排他鎖鎖定對應數據庫資源(如SQL語言中的SELECT*FORUPDATE語句),并獲取交易請求所需記錄數據和邏輯鎖序號;步驟303:數據更新單元4比較數據數據查詢階段所得到的邏輯鎖序號Al和數據更新階段得到的邏輯鎖序號A2是否一致,如果兩者不一致,則進行步驟304,如果一致,則進行步驟305;步驟304:數據更新單元4發出數據庫回滾命令(RollBack命令),進行數據庫恢復和資源釋放,數據更新處理失敗,進入步驟306;步驟305:數據更新單元4累加數據庫記錄的邏輯鎖序號A2=A2+1(如果邏輯鎖序號已經到最大值則自動賦值為0),并結和邏輯處理單元3的處理結果,更新該筆記錄數據如賬戶余額=原賬戶余額+交易發生額等,發出數據庫更新命令(Commit命令),進行數據庫更新操作,數據更新成功;步驟306:數據更新單元4將處理結果返回給交易處理裝置1,處理結束。本發明提供了一個應用層面的訪問數據庫表資源的方法,該方法通過增加不帶鎖讀取表數據進行業務和邏輯處理,把加鎖的表更新處理和提交COMMIT和ROLLBACK動作的處理集中放在聯機交易最后,從而減少在更新表數據時使用排他鎖鎖表的時間。本發明的技術方案具有以下特點-在數據庫表中新增"邏輯鎖序號"字段,該字段為一數字順序號,每次數據庫更新,該字段順序號都相應加1,以記錄數據發生了改變;"邏輯鎖序號"可重復使用,當到達最大值重新歸0;在軟件應用層將聯機事務對數據庫的操作分為數據讀取、邏輯處理和數據更新三個步驟。數據讀取階段負責數據的査詢獲取;邏輯處理階段主要完成業務功能的邏輯判斷處理;數據更新階段,使用排他鎖鎖定數據庫資源,進行數據庫更新操作。采用邏輯鎖法更新數據庫,減少對數據庫資源的鎖定時間,提高系統運行的時效性和并發性,具體包括如下內容A.在數據讀取階段,先査詢得到所需數據記錄的邏輯鎖序號,不使用排他鎖(如SQL語言中的SELECT語句),因此占用較少的系統資源,并提高整個運行系統的并發性能;B.邏輯處理階段,根據聯機事務中業務邏輯的處理結果,得出具體業務是否需要更新數據庫;C.數據更新階段,使用排他鎖獲取所需數據記錄(如SQL語言中的SELECTFORUPDATE語句),判斷數據讀取階段與數據更新階段的邏輯鎖序號是否一致,如果邏輯鎖序號不一致,則說明在數據讀取階段到數據更新階段的這段時間,數據庫中的該筆記錄已發生過變更,不能繼續更新數據庫的操作;如果一致,則可以直接進行數據庫更新,同時對邏輯鎖序號進行累加。以上所述的具體描述,對發明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發明的具體實施例而已,并不用于限定本發明的保護范圍,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。權利要求1、一種基于數據庫邏輯鎖的變更處理方法,包括步驟交易終端發出交易請求;交易處理裝置接收到所述交易請求,根據所述交易請求類型判斷是否需要數據更新;當所述交易請求需要更新數據時,所述交易處理裝置啟動數據查詢控制單元查詢數據庫,得到對應的記錄數據和邏輯鎖序號,并將交易請求數據、查詢數據庫得到的記錄數據和邏輯鎖序號傳給交易邏輯處理單元處理;所述交易邏輯處理單元對接收到的數據進行檢查、判斷和運算處理,當滿足交易條件時,所述交易邏輯處理單元啟動數據更新單元進行處理,并將處理結果和所述查詢數據庫得到的邏輯鎖序號傳送給所述數據更新單元;所述數據更新單元使用排他鎖鎖定對應數據庫資源,并獲取邏輯鎖序號和記錄數據,比較該邏輯鎖序號與所述查詢數據庫得到的邏輯鎖序號是否一致,如果一致則根據所述交易邏輯處理單元的處理結果更新記錄數據并將該邏輯鎖序號加一,數據變更處理成功,否則數據變更處理失敗,然后所述數據更新單元將處理結果返回給所述交易處理裝置;所述交易處理裝置將所述數據更新單元的處理結果返回給所述交易終端。2、根據權利要求1所述的方法,其中,當不需要更新數據時,退出數據變更處理,按常規聯機事務處理方法進行處理。3、根據權利要求2所述的方法,其中,所述不需要更新數據的情況包括查詢數據,新增數據和刪除數據。4、根據權利要求3所述的方法,其中,對于新增數據,邏輯鎖序號初始值賦為0。5、根據權利要求1所述的方法,其中,當所述邏輯鎖序號已經到最大值時,自動賦值為0。6、根據權利要求1所述的方法,其中,當所述數據更新單元使用排他鎖鎖定對應數據庫資源獲取的邏輯鎖序號與所述查詢數據庫得到的邏輯鎖序號不一致時,所述數據更新單元發出數據庫回滾命令,進行數據庫恢復和資源釋放。全文摘要本發明提供一種基于數據庫邏輯鎖的變更處理方法,包括當所述交易請求需要更新數據時,查詢數據庫得到對應的記錄數據和邏輯鎖序號,對交易請求數據和查詢數據庫得到的記錄數據進行檢查、判斷和運算處理,當滿足交易條件時,啟動數據更新處理,使用排他鎖鎖定對應數據庫資源,并獲取邏輯鎖序號和記錄數據,比較該邏輯鎖序號與所述查詢數據庫得到的邏輯鎖序號是否一致,如果一致則根據所述交易邏輯處理單元的處理結果更新記錄數據并將該邏輯鎖序號加一,數據變更處理成功,否則數據變更處理失敗。本發明通過修改應用流程,將帶鎖更新的處理集中在最后進行的方法,有效的解決了大量交易并發時系統資源占用過多,效率較低的問題。文檔編號G06F17/30GK101350022SQ20081011889公開日2009年1月21日申請日期2008年8月27日優先權日2008年8月27日發明者敏梁,王向榮,翟習文,蔡凌瑋申請人:中國工商銀行股份有限公司