一種內存數據庫重做日志文件的恢復方法和裝置的制造方法
【技術領域】
[0001] 本申請涉及內存數據庫系統領域,特別是涉及一種內存數據庫重做日志文件的恢 復方法和裝置。
【背景技術】
[0002] 隨著電信業、金融業不斷的發展,業務擴展越來越廣,各種新業務層出不窮,數據 量也越來越大,對數據訪問的響應速度要求也越來越高。大量的用戶資料數據、用戶消費數 據都需要存放在內存數據庫中,但是由于內存的非持久性,一旦內存數據庫進程或者所在 主機發生宕機,內存中的數據將全部丟失。
[0003]目前,一般的內存數據庫采用定時備份內存數據的方式,這樣,當系統宕機,內存 數據庫異常,可以從最近一次的備份數據進行恢復,但是,從最近一次備份到系統發生宕機 的這段時間,內存數據庫發生的修改操作都會丟失,僅靠內存數據庫自身的機制是無法恢 復的。
[0004] 因此,如何防止內存數據庫的丟失和及時恢復到異常之前的狀態,成為了內存數 據庫亟待解決的問題。
【發明內容】
[0005] 本申請提供一種內存數據庫在線重做日志文件的恢復方法和系統,以解決內存數 據庫的數據丟失和無法及時恢復的問題。
[0006] 為了解決上述問題,本申請公開了一種內存數據庫重做日志文件的恢復方法,包 括:對重做日志文件按照生成時間的先后順序進行排序;
[0007] 按排序讀取重做日志文件中的數據,其中,所述數據中包含多個事務數據;
[0008] 對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一 事務;
[0009] 將所述分割成的多個單一事務打成回滾數據包,并將打成的所述多個單一事務的 回滾數據包分別發送到內存數據庫,通過所述內存數據庫進行多個單一事務的回滾。
[0010] 優選地,所述對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分 割成多個單一事務的步驟包括:
[0011] 使用循環數組存儲讀取的所述重做日志文件,并在所述循環數組內對讀取的所述 重做日志文件中的數據包含的多個事務數據進行分割,分割成多個單一事務。
[0012] 優選地,在所述循環數組內對讀取的所述重做日志文件中的數據包含的多個事務 數據進行分割,分割成多個單一事務的步驟包括:
[0013] 判斷所述循環數組的當前指針位置;
[0014] 若所述循環數組的當前指針位于讀取的所述重做日志文件的文件尾,則停止對讀 取的所述重做日志文件的分割,退出所述循環數組;
[0015] 若所述循環數組的當前指針不位于讀取的所述重做日志文件的文件尾,則讀取設 定數據長度的重做日志文件的內容,從讀取的內容中獲取當前事務的數據包大小信息,根 據所述數據包大小信息分割出當前事務,并返回所述判斷所述循環數組的當前指針位置的 步驟繼續執行。
[0016] 優選地,將所述分割成的多個單一事務打成回滾數據包的步驟包括:
[0017] 將分割成的各個單一事務對應的報文的報文類型、報文大小和報文內容進行組 合,生成對應于各個單一事務的回滾數據包。
[0018] 優選地,所述內存數據庫通過以下方式進行多個單一事務的回滾:
[0019] 內存數據庫對接收到的多個單一事務的回滾數據包進行解析,獲取各個回滾數據 包中的報文類型、報文大小和報文內容;
[0020] 內存數據庫根據所述報文類型查找與所述報文類型相同的單一事務;
[0021 ] 將所述報文內容添加到所述內存數據庫中具有相同報文類型的單一事務中,完成 單一事務回滾。
[0022] 為了解決上述問題,本申請還公開了一種內存數據庫重做日志文件的恢復裝置, 包括:排序模塊,用于對重做日志文件按照生成時間的先后順序進行排序;
[0023] 讀取模塊,用于按排序讀取重做日志文件中的數據,其中,所述數據中包含多個事 務數據;
[0024] 分割模塊,用于對讀取的重做日志文件中的數據包含的多個事務數據進行分割, 分割成多個單一事務;
[0025] 回滾模塊,用于將所述分割成的多個單一事務打成回滾數據包,并將打成的所述 多個單一事務的回滾數據包分別發送到內存數據庫,通過所述內存數據庫進行多個單一事 務的回滾。
[0026] 優選地,所述分割模塊使用循環數組存儲讀取的所述重做日志文件,并在所述循 環數組內對讀取的所述重做日志文件中的數據包含的多個事務數據進行分割,分割成多個 單一事務。
[0027] 優選地,所述分割模塊在所述循環數組內對讀取的所述重做日志文件中的數據包 含的多個事務數據進行分割,分割成多個單一事務時:
[0028] 判斷所述循環數組的當前指針位置;
[0029] 若所述循環數組的當前指針位于讀取的所述重做日志文件的文件尾,則停止對讀 取的所述重做日志文件的分割,退出所述循環數組;
[0030] 若所述循環數組的當前指針不位于讀取的所述重做日志文件的文件尾,則讀取設 定數據長度的重做日志文件的內容,從讀取的內容中獲取當前事務的數據包大小信息,根 據所述數據包大小信息分割出當前事務,并返回所述判斷所述循環數組的當前指針位置繼 續執行。
[0031] 優選地,所述回滾模塊在將所述分割成的多個單一事務打成回滾數據包時,將分 割成的各個單一事務對應的報文的報文類型、報文大小和報文內容進行組合,生成對應于 各個單一事務的回滾數據包。
[0032] 優選地,所述回滾模塊在通過所述內存數據庫進行多個單一事務的回滾時,由內 存數據庫通過以下方式進行多個單一事務的回滾:
[0033] 內存數據庫對接收到的多個單一事務的回滾數據包進行解析,獲取各個回滾數據 包中的報文類型、報文大小和報文內容;
[0034] 內存數據庫根據所述報文類型查找與所述報文類型相同的單一事務;
[0035] 將所述報文內容添加到所述內存數據庫中具有相同報文類型的單一事務中,完成 單一事務回滾。
[0036] 與現有技術相比,本申請包括以下優點:
[0037] 首先,本申請的重做日志文件對系統的每個操作都進行記錄,每個重做日志文件 中記錄有多個事務,一個重做日志文件中的各個事務可能是完整的,也可能是不完整的,記 錄每個事務的事務編號、業務類型編號等信息,再將需要恢復的日志放到相應目錄下,啟動 重做日志程序對讀取的重做日志文件中的數據包含的多個事務數據進行分割,分割成多個 單一事務,將分割成的多個單一事務通過內存數據庫進行處理,從而避免了內存數據庫發 生宕機或者業務數據錯誤造成內存數據庫的數據丟失。
[0038] 其次,本申請將分割成的多個單一事務打成回滾數據包,并將打成的多個單一事 務的回滾數據包分別發送到內存數據庫,通過內存數據庫進行多個單一事務的回滾,避免 了僅靠內存數據庫自身的機制無法及時恢復,減少了回滾數據包的大小,從而提高了傳輸 數據的速度,由此,解決了內存數據庫無法及時恢復的問題。
【附圖說明】
[0039] 圖1是本申請實施例一中的一種內存數據庫重做日志文件的恢復方法的流程圖;
[0040] 圖2是本申請實施例二中的一種內存數據庫重做日志文件的恢復方法的流程圖;