鬼佬大哥大
  • / 15
  • 下載費用:30 金幣  

一種內存數據庫重做日志文件的恢復方法和裝置.pdf

摘要
申請專利號:

CN201410163685.1

申請日:

2014.04.22

公開號:

CN105022676A

公開日:

2015.11.04

當前法律狀態:

授權

有效性:

有權

法律詳情: 授權|||實質審查的生效IPC(主分類):G06F 11/14申請日:20140422|||公開
IPC分類號: G06F11/14; G06F17/30 主分類號: G06F11/14
申請人: 大唐軟件技術股份有限公司
發明人: 許哲; 郝春美; 楊耀華
地址: 100012北京市朝陽區北苑路乙108號北美國際商務中心大唐軟件
優先權:
專利代理機構: 北京潤澤恒知識產權代理有限公司11319 代理人: 蘭淑鐸
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201410163685.1

授權公告號:

||||||

法律狀態公告日:

2018.08.17|||2015.12.02|||2015.11.04

法律狀態類型:

授權|||實質審查的生效|||公開

摘要

本申請提供了一種內存數據庫重做日志文件的恢復方法和裝置,包括:對重做日志文件按照生成時間的先后順序進行排序;按排序讀取重做日志文件中的數據,其中,所述數據中包含多個事務數據;對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務;將所述分割成的多個單一事務打成回滾數據包,并將打成的所述多個單一事務的回滾數據包分別發送到內存數據庫,通過所述內存數據庫進行多個單一事務的回滾。因此,本申請解決了內存數據庫的數據丟失和無法及時恢復的問題。

權利要求書

權利要求書
1.  一種內存數據庫重做日志文件的恢復方法,其特征在于,包括:
對重做日志文件按照生成時間的先后順序進行排序;
按排序讀取重做日志文件中的數據,其中,所述數據中包含多個事務數據;
對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務;
將所述分割成的多個單一事務打成回滾數據包,并將打成的所述多個單一事務的回滾數據包分別發送到內存數據庫,通過所述內存數據庫進行多個單一事務的回滾。

2.  根據權利要求1所述的方法,其特征在于,所述對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務的步驟包括:
使用循環數組存儲讀取的所述重做日志文件,并在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務。

3.  根據權利要求2所述的方法,其特征在于,在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務的步驟包括:
判斷所述循環數組的當前指針位置;
若所述循環數組的當前指針位于讀取的所述重做日志文件的文件尾,則停止對讀取的所述重做日志文件的分割,退出所述循環數組;
若所述循環數組的當前指針不位于讀取的所述重做日志文件的文件尾,則讀取設定數據長度的重做日志文件的內容,從讀取的內容中獲取當前事務的數據包大小信息,根據所述數據包大小信息分割出當前事務,并返回所述判斷所述循環數組的當前指針位置的步驟繼續執行。

4.  根據權利要求1至3任一項所述的方法,其特征在于,將所述分割成的多個單一事務打成回滾數據包的步驟包括:
將分割成的各個單一事務對應的報文的報文類型、報文大小和報文內容 進行組合,生成對應于各個單一事務的回滾數據包。

5.  根據權利要求4所述的方法,其特征在于,所述內存數據庫通過以下方式進行多個單一事務的回滾:
內存數據庫對接收到的多個單一事務的回滾數據包進行解析,獲取各個回滾數據包中的報文類型、報文大小和報文內容;
內存數據庫根據所述報文類型查找與所述報文類型相同的單一事務;
將所述報文內容添加到所述內存數據庫中具有相同報文類型的單一事務中,完成單一事務回滾。

6.  一種內存數據庫重做日志文件的恢復裝置,其特征在于,包括:
排序模塊,用于對重做日志文件按照生成時間的先后順序進行排序;
讀取模塊,用于按排序讀取重做日志文件中的數據,其中,所述數據中包含多個事務數據;
分割模塊,用于對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務;
回滾模塊,用于將所述分割成的多個單一事務打成回滾數據包,并將打成的所述多個單一事務的回滾數據包分別發送到內存數據庫,通過所述內存數據庫進行多個單一事務的回滾。

7.  根據權利要求6所述的裝置,其特征在于,所述分割模塊使用循環數組存儲讀取的所述重做日志文件,并在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務。

8.  根據權利要求7所述的裝置,其特征在于,所述分割模塊在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務時:
判斷所述循環數組的當前指針位置;
若所述循環數組的當前指針位于讀取的所述重做日志文件的文件尾,則停止對讀取的所述重做日志文件的分割,退出所述循環數組;
若所述循環數組的當前指針不位于讀取的所述重做日志文件的文件尾,則讀取設定數據長度的重做日志文件的內容,從讀取的內容中獲取當前事務 的數據包大小信息,根據所述數據包大小信息分割出當前事務,并返回所述判斷所述循環數組的當前指針位置繼續執行。

9.  根據權利要求6至8任一項所述的裝置,其特征在于,所述回滾模塊在將所述分割成的多個單一事務打成回滾數據包時,將分割成的各個單一事務對應的報文的報文類型、報文大小和報文內容進行組合,生成對應于各個單一事務的回滾數據包。

10.  根據權利要求9所述的裝置,其特征在于,所述回滾模塊在通過所述內存數據庫進行多個單一事務的回滾時,由內存數據庫通過以下方式進行多個單一事務的回滾:
內存數據庫對接收到的多個單一事務的回滾數據包進行解析,獲取各個回滾數據包中的報文類型、報文大小和報文內容;
內存數據庫根據所述報文類型查找與所述報文類型相同的單一事務;
將所述報文內容添加到所述內存數據庫中具有相同報文類型的單一事務中,完成單一事務回滾。

說明書

說明書一種內存數據庫重做日志文件的恢復方法和裝置
技術領域
本申請涉及內存數據庫系統領域,特別是涉及一種內存數據庫重做日志文件的恢復方法和裝置。
背景技術
隨著電信業、金融業不斷的發展,業務擴展越來越廣,各種新業務層出不窮,數據量也越來越大,對數據訪問的響應速度要求也越來越高。大量的用戶資料數據、用戶消費數據都需要存放在內存數據庫中,但是由于內存的非持久性,一旦內存數據庫進程或者所在主機發生宕機,內存中的數據將全部丟失。
目前,一般的內存數據庫采用定時備份內存數據的方式,這樣,當系統宕機,內存數據庫異常,可以從最近一次的備份數據進行恢復,但是,從最近一次備份到系統發生宕機的這段時間,內存數據庫發生的修改操作都會丟失,僅靠內存數據庫自身的機制是無法恢復的。
因此,如何防止內存數據庫的丟失和及時恢復到異常之前的狀態,成為了內存數據庫亟待解決的問題。
發明內容
本申請提供一種內存數據庫在線重做日志文件的恢復方法和系統,以解決內存數據庫的數據丟失和無法及時恢復的問題。
為了解決上述問題,本申請公開了一種內存數據庫重做日志文件的恢復方法,包括:對重做日志文件按照生成時間的先后順序進行排序;
按排序讀取重做日志文件中的數據,其中,所述數據中包含多個事務數據;
對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成 多個單一事務;
將所述分割成的多個單一事務打成回滾數據包,并將打成的所述多個單一事務的回滾數據包分別發送到內存數據庫,通過所述內存數據庫進行多個單一事務的回滾。
優選地,所述對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務的步驟包括:
使用循環數組存儲讀取的所述重做日志文件,并在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務。
優選地,在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務的步驟包括:
判斷所述循環數組的當前指針位置;
若所述循環數組的當前指針位于讀取的所述重做日志文件的文件尾,則停止對讀取的所述重做日志文件的分割,退出所述循環數組;
若所述循環數組的當前指針不位于讀取的所述重做日志文件的文件尾,則讀取設定數據長度的重做日志文件的內容,從讀取的內容中獲取當前事務的數據包大小信息,根據所述數據包大小信息分割出當前事務,并返回所述判斷所述循環數組的當前指針位置的步驟繼續執行。
優選地,將所述分割成的多個單一事務打成回滾數據包的步驟包括:
將分割成的各個單一事務對應的報文的報文類型、報文大小和報文內容進行組合,生成對應于各個單一事務的回滾數據包。
優選地,所述內存數據庫通過以下方式進行多個單一事務的回滾:
內存數據庫對接收到的多個單一事務的回滾數據包進行解析,獲取各個回滾數據包中的報文類型、報文大小和報文內容;
內存數據庫根據所述報文類型查找與所述報文類型相同的單一事務;
將所述報文內容添加到所述內存數據庫中具有相同報文類型的單一事務中,完成單一事務回滾。
為了解決上述問題,本申請還公開了一種內存數據庫重做日志文件的恢 復裝置,包括:排序模塊,用于對重做日志文件按照生成時間的先后順序進行排序;
讀取模塊,用于按排序讀取重做日志文件中的數據,其中,所述數據中包含多個事務數據;
分割模塊,用于對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務;
回滾模塊,用于將所述分割成的多個單一事務打成回滾數據包,并將打成的所述多個單一事務的回滾數據包分別發送到內存數據庫,通過所述內存數據庫進行多個單一事務的回滾。
優選地,所述分割模塊使用循環數組存儲讀取的所述重做日志文件,并在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務。
優選地,所述分割模塊在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務時:
判斷所述循環數組的當前指針位置;
若所述循環數組的當前指針位于讀取的所述重做日志文件的文件尾,則停止對讀取的所述重做日志文件的分割,退出所述循環數組;
若所述循環數組的當前指針不位于讀取的所述重做日志文件的文件尾,則讀取設定數據長度的重做日志文件的內容,從讀取的內容中獲取當前事務的數據包大小信息,根據所述數據包大小信息分割出當前事務,并返回所述判斷所述循環數組的當前指針位置繼續執行。
優選地,所述回滾模塊在將所述分割成的多個單一事務打成回滾數據包時,將分割成的各個單一事務對應的報文的報文類型、報文大小和報文內容進行組合,生成對應于各個單一事務的回滾數據包。
優選地,所述回滾模塊在通過所述內存數據庫進行多個單一事務的回滾時,由內存數據庫通過以下方式進行多個單一事務的回滾:
內存數據庫對接收到的多個單一事務的回滾數據包進行解析,獲取各個回滾數據包中的報文類型、報文大小和報文內容;
內存數據庫根據所述報文類型查找與所述報文類型相同的單一事務;
將所述報文內容添加到所述內存數據庫中具有相同報文類型的單一事務中,完成單一事務回滾。
與現有技術相比,本申請包括以下優點:
首先,本申請的重做日志文件對系統的每個操作都進行記錄,每個重做日志文件中記錄有多個事務,一個重做日志文件中的各個事務可能是完整的,也可能是不完整的,記錄每個事務的事務編號、業務類型編號等信息,再將需要恢復的日志放到相應目錄下,啟動重做日志程序對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務,將分割成的多個單一事務通過內存數據庫進行處理,從而避免了內存數據庫發生宕機或者業務數據錯誤造成內存數據庫的數據丟失。
其次,本申請將分割成的多個單一事務打成回滾數據包,并將打成的多個單一事務的回滾數據包分別發送到內存數據庫,通過內存數據庫進行多個單一事務的回滾,避免了僅靠內存數據庫自身的機制無法及時恢復,減少了回滾數據包的大小,從而提高了傳輸數據的速度,由此,解決了內存數據庫無法及時恢復的問題。
附圖說明
圖1是本申請實施例一中的一種內存數據庫重做日志文件的恢復方法的流程圖;
圖2是本申請實施例二中的一種內存數據庫重做日志文件的恢復方法的流程圖;
圖3是本申請實施例三中的一種內存數據庫進行事務處理時的操作流程圖;
圖4是本申請實施例四中的一種內存數據庫重做日志文件的恢復裝置的結構框圖。
具體實施方式
為使本申請的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和具體實施方式對本申請作進一步詳細的說明。
參照圖1,示出了本申請實施例一中的一種內存數據庫重做日志文件的恢復方法,包括:
步驟101:對重做日志文件按照生成時間的先后順序進行排序。
重做日志文件對系統的每個操作都進行記錄,每個重做日志文件中記錄有多個事務,一個重做日志文件中的各個事務可能是完整的,也可能是不完整的。對重做日志文件按照生成時間先后順序進行排序時,可以對重做日志文件按照生成時間從前往后進行排序,產生時間早的重做日志文件排在前,產生時間晚的重做日志文件排在后。
步驟102:按排序讀取重做日志文件中的數據,其中,所述數據中包含多個事務數據。
讀取重做日志文件,獲取重做日志文件中的數據量大小。如果讀取的重做日志文件中的數據量小于等于零,則返回錯誤信息,結束恢復;如果讀取的重做日志文件中的數據量大于零,則讀取重做日志文件中的數據,繼續執行下一步驟的操作。
步驟103:對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務。
分割成的多個單一事務包括報文類型、數據包大小和數據包信息。
對讀取的重做日志文件中的數據分割成的多個單一事務可以按照表一的格式進行存儲。
表一

其中,報文類型,數據包大小都為長整型,定長。
步驟104:將所述分割成的多個單一事務打成回滾數據包,并將打成的所述多個單一事務的回滾數據包分別發送到內存數據庫,通過所述內存數據庫進行多個單一事務的回滾。
分割成的多個單一事務打成的回滾數據包可以通過socket連接發送到內存數據庫,內存數據庫根據接收到的回滾數據包進行解析,完成多個單一事務的回滾。但不限于此,其它任意適當的發送回滾數據包到內存數據庫的方式也同樣適用。
通過本實施例,首先,重做日志文件對系統的每個操作都進行記錄,每個重做日志文件中記錄有多個事務,一個重做日志文件中的各個事務可能是完整的,也可能是不完整的,記錄每個事務的事務編號、業務類型編號等信息,再將需要恢復的日志放到相應目錄下,啟動重做日志程序對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務,將分割成的多個單一事務通過內存數據庫進行處理,從而避免了內存數據庫發生宕機或者業務數據錯誤造成內存數據庫的數據丟失。
其次,本申請將分割成的多個單一事務打成回滾數據包,并將打成的多個單一事務的回滾數據包分別發送到內存數據庫,通過內存數據庫進行多個單一事務的回滾,避免了僅靠內存數據庫自身的機制無法及時恢復,減少了回滾數據包的大小,從而提高了傳輸數據的速度,由此,解決了內存數據庫無法及時恢復的問題。
參照圖2,示出了本申請實施例二中的一種內存數據庫重做日志文件的恢復方法的流程圖。
在本實施例二中的一種內存數據庫重做日志文件的恢復方法可以應用于Linux Redhat6.0操作系統,也可以應用于HP-UX、AIX和Solaris等系統。
本實施例中,以處理寫操作事務的重做日志恢復為例。在處理寫操作的事務時,內存數據庫會生成重做日志,將整個事務的數據都將寫入到重做日志文件中。重做日志文件的每個事務都包含事務編號、業務類型、表編號、內存項、數據內容大小、數據內容。
重做日志的文件命名方式是redo.log_開始時間_當前時間_備份日期_增量字段。重做日志列表如表二所示。
表二:
重做日志列表redo.log_174657_174657_20130812_00000012redo.log_142143_154636_20130812_00000004redo.log_141647_142143_20130812_00000003
本實施例中的一種內存數據庫重做日志文件的恢復方法包括:
步驟201:當內存數據庫由異常恢復到內存數據庫正常運行時,重做日志恢復開始。
步驟202:將需要重做的日志文件保存在重做日志文件目錄中,對重做日志文件目錄進行掃描,得到當前的重做日志文件列表。
步驟203:啟動重做日志程序,程序將加載需要重做的日志文件,并按照重做日志文件生成時間的先后順序進行排序。
步驟204:重做日志程序讀取重做日志文件中的數據,其中,所述數據中包含多個事務數據。
步驟205:判斷是否有需要重做的重做日志文件,如果有,則執行步驟206,;如果否,則執行步驟208。
步驟206:對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務。
對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務的步驟包括:使用循環數組存儲讀取的所述重做日志文件,并在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務。
進一步地,在循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務的步驟包括:
判斷所述循環數組的當前指針位置;
若所述循環數組的當前指針位于讀取的所述重做日志文件的文件尾,則 停止對讀取的所述重做日志文件的分割,退出所述循環數組;
若所述循環數組的當前指針不位于讀取的所述重做日志文件的文件尾,則讀取設定數據長度的重做日志文件的內容,從讀取的內容中獲取當前事務的數據包大小信息,根據所述數據包大小信息分割出當前事務,并返回所述判斷所述循環數組的當前指針位置的步驟繼續執行下一個單一事務。
其中,設定數據長度可以由本領域技術人員根據實際情況適當設置,通常設定為能夠獲取數據包包頭信息的長度即可,如設定為數據包包頭中報文類型和數據包大小信息的字節長度,或者設定為數據包包頭中的數據包大小信息的字節長度,如8個字節。
例如:程序將重做日志文件中的內容保存到字符串數組LogStr,該字符串數組為當前文件大小Size+1。
循環遍歷字符串數組LogStr,當文件內容指針大于等于Size時,退出循環。
當文件內容指針小于Size時,則根據定長M(即設定數據長度),取出第一個事務的報文類型和數據包大小信息,設定數據包大小信息指示當前數據包大小(即當前數據包的長度)記為N。
根據數據包大小N,可以讀取數據包,進而獲取數據包里的實際數據內容。
將第一個事務的報文類型、報文大小(即數據包大小信息)和報文內容(即數據包內容)重新組合成第一個事務的回滾數據包發送給內存數據庫處理。
移動文件內容指針,移動指針大小為報文類型+數據包大小信息+數據包內容的長度M+N,繼續處理下一個事務。
步驟207:將事務發送到內存數據庫。
具體地,將分割成的多個單一事務打成回滾數據包,并將打成的所述多個單一事務的回滾數據包通過socket分別發送到內存數據庫,內存數據庫根據接收到的回滾數據包,完成內存數據庫中的單一事務的回滾。優選地,將分割成的多個單一事務打成回滾數據包的步驟包括:
將分割成的各個單一事務對應的報文的報文類型、報文大小和報文內容進行組合,生成對應于各個單一事務的回滾數據包。
進一步地,內存數據庫通過以下方式進行多個單一事務的回滾:
內存數據庫對接收到的多個單一事務的回滾數據包進行解析,獲取各個回滾數據包中的報文類型、報文大小和報文內容;
內存數據庫根據所述報文類型查找與所述報文類型相同的單一事務;
將所述報文內容添加到所述內存數據庫中具有相同報文類型的的單一事務中,完成單一事務回滾。
實際上內存數據庫中存在多個報文類型相同的單一事務,雖然報文類型相同,但是每個報文類型中的報文內容卻完全不同。當內存數據庫根據報文類型查找到與所述報文類型相同的單一事務之后,將報文內容添加到內存數據庫中具有相同報文類型的單一事務中,完成單一事務回滾。
步驟208:重做日志結束恢復。
步驟209:循環進行,處理完所有重做日志,完成數據回滾操作。
需要說明的是,本申請中的報文類型指具體事務更新時的所要更新的事項的名稱,統一稱為報文類型。
以上內容是結合具體的實施方式對本申請所作的進一步詳細說明,不能認定本申請的具體實施只局限于這些說明。對于本申請所屬技術領域的普通技術人員來說,在不脫離本申請構思的前提下,還可以做出若干簡單推演或替換,都應當視為屬于本申請的保護范圍。
綜上所述,本申請實施例一種內存數據庫重做日志文件的恢復方法主要包括以下優點:
首先,本實施例的重做日志文件對系統的每個操作都進行記錄,每個重做日志文件中記錄有多個事務,一個重做日志文件中的各個事務可能是完整的,也可能是不完整的,記錄每個事務的事務編號、業務類型編號等信息,再將需要恢復的日志放到相應目錄下,啟動重做日志程序對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務,將分割成的多個單一事務通過內存數據庫進行處理,從而避免了內存數據庫發生宕 機或者業務數據錯誤造成內存數據庫的數據丟失。
其次,本申請將分割成的多個單一事務打成回滾數據包,并將打成的多個單一事務的回滾數據包分別發送到內存數據庫,通過內存數據庫進行多個單一事務的回滾,避免了僅靠內存數據庫自身的機制無法及時恢復,減少了回滾數據包的大小,從而提高了傳輸數據的速度,由此,解決了內存數據庫無法及時恢復的問題。
參照圖3,示出了本申請實施例三中的一種內存數據庫進行事務處理時的操作流程圖。
在本實施例三中的一種內存數據庫進行事務處理時的操作流程圖,具體可以包括:
步驟301:事務開始。
步驟302:重做日志處理。
本實施例中,以處理寫操作事務的重做日志恢復為例。具體地,重做日志處理是在事務處理對記錄進行寫操作的時候觸發的,每次日志生成都是在處理事務之前。本申請使用兩個重做日志進程進行重做日志的操作,當圖3中所示的3021即重做日志進程1中的日志達到上限后自動切換到圖3中所示的3022即重做日志進程2中做新的日志輸出,然后將重做日志進程1生成的日志存儲,同理,當重做日志進程2中的日志達到上限后自動切換到重做日志進程1做新的日志輸出,然后將重做日志進程2生成的日志存儲。
生成的日志可以采用文件存儲方式或內存存儲方式3023。其中,文件存儲方式是將生成的日志直接輸出到日志文件中,但每個日志文件都有大小的限制,當達到日志文件設定的上限后,將后續的操作輸出到新的日志文件中。內存存儲方式是將日志先存儲到共享內存中,到達設定上限后,將共享內存中的日志輸出到日志文件中,清空共享內存中的內容。
步驟303:進行事務處理。
步驟304:事務結束。
需要說明的是,對于前述的方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本申請并不受所描述 的動作順序的限制,因為依據本申請,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例。
基于上述方法實施例的說明,本申請還提供了相應的一種內存數據庫重做日志文件的恢復裝置的實施例,來實現上述方法實施例所述的內容。
參見圖4,示出了本申請實施例四中的一種內存數據庫重做日志文件的恢復裝置的結構框圖,具體可以包括:
排序模塊401,用于對重做日志文件按照生成時間的先后順序進行排序;
讀取模塊402,用于按排序讀取重做日志文件中的數據,其中,所述數據中包含多個事務數據;
分割模塊403,用于對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務;
回滾模塊404,用于將所述分割成的多個單一事務打成回滾數據包,并將打成的所述多個單一事務的回滾數據包分別發送到內存數據庫,通過所述內存數據庫進行多個單一事務的回滾。
優選地,所述分割模塊使用循環數組存儲讀取的所述重做日志文件,并在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務。
優選地,所述分割模塊在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務時:
判斷所述循環數組的當前指針位置;
若所述循環數組的當前指針位于讀取的所述重做日志文件的文件尾,則停止對讀取的所述重做日志文件的分割,退出所述循環數組;
若所述循環數組的當前指針不位于讀取的所述重做日志文件的文件尾,則讀取設定數據長度的重做日志文件的內容,從讀取的內容中獲取當前事務的數據包大小信息,根據所述數據包大小信息分割出當前事務,并返回所述判斷所述循環數組的當前指針位置繼續執行。
優選地,所述回滾模塊在將所述分割成的多個單一事務打成回滾數據包 時,將分割成的各個單一事務對應的報文的報文類型、報文大小和報文內容進行組合,生成對應于各個單一事務的回滾數據包。
優選地,所述回滾模塊在通過所述內存數據庫進行多個單一事務的回滾時,由內存數據庫通過以下方式進行多個單一事務的回滾:
內存數據庫對接收到的多個單一事務的回滾數據包進行解析,獲取各個回滾數據包中的報文類型、報文大小和報文內容;
內存數據庫根據所述報文類型查找與所述報文類型相同的單一事務;
將所述報文內容添加到所述內存數據庫中具有相同的單一事務中,完成單一事務回滾。
綜上所述,本申請實施例一種內存數據庫重做日志文件的恢復裝置主要包括以下優點:
首先,本實施例的重做日志文件對系統的每個操作都進行記錄,每個重做日志文件中記錄有多個事務,一個重做日志文件中的各個事務可能是完整的,也可能是不完整的,記錄每個事務的事務編號、業務類型編號等信息,再將需要恢復的日志放到相應目錄下,啟動重做日志程序對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務,將分割成的多個單一事務通過內存數據庫進行處理,從而避免了內存數據庫發生宕機或者業務數據錯誤造成內存數據庫的數據丟失。
其次,本申請將分割成的多個單一事務打成回滾數據包,并將打成的多個單一事務的回滾數據包分別發送到內存數據庫,通過內存數據庫進行多個單一事務的回滾,避免了僅靠內存數據庫自身的機制無法及時恢復,減少了回滾數據包的大小,從而提高了傳輸數據的速度,由此,解決了內存數據庫無法及時恢復的問題。
對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
以上對本申請所提供的一種內存數據庫重做日志文件的恢復方法和裝置,進行了詳細介紹,本文中應用了具體個例對本申請的原理及實施方式進 行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領域的一般技術人員,依據本申請的思想,在具體實施方式及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本申請的限制。

關 鍵 詞:
一種 內存 數據庫 重做 日志 文件 恢復 方法 裝置
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:一種內存數據庫重做日志文件的恢復方法和裝置.pdf
鏈接地址:http://www.wwszu.club/p-6401697.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
鬼佬大哥大