欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

日志管理方法和裝置制造方法

文檔序號(hào):6524039閱讀:201來源:國知局
日志管理方法和裝置制造方法
【專利摘要】本發(fā)明涉及一種日志管理方法和裝置,包括:在數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生更新時(shí),檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄所述數(shù)據(jù)頁對應(yīng)的更新日志記錄。本發(fā)明實(shí)施例的日志管理方法和裝置,如果事務(wù)日志中存在數(shù)據(jù)頁中的全頁日志記錄,可以只記錄該數(shù)據(jù)頁的更新日志記錄,在通過事務(wù)日志中的全頁日志記錄保證數(shù)據(jù)的正?;謴?fù)的同時(shí),可以減少事務(wù)日志中全頁日志記錄的數(shù)量,減少事務(wù)日志所占用的磁盤空間。
【專利說明】日志管理方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫領(lǐng)域,尤其涉及一種日志管理方法和裝置。
【背景技術(shù)】
[0002]目前,大部分磁盤數(shù)據(jù)庫系統(tǒng)基于先寫日志(Write-Ahead Logging, WAL)方法實(shí)現(xiàn)事務(wù)的持久化,執(zhí)行數(shù)據(jù)庫更新時(shí)將更新操作記錄到事務(wù)日志中,在事務(wù)提交時(shí)刷新日志到磁盤,被修改的臟頁通過周期的執(zhí)行檢查點(diǎn)(check point, CKP)把這些臟頁刷新到磁盤中。數(shù)據(jù)庫由于斷電或其他原因?qū)е路钦MV?,?shù)據(jù)庫系統(tǒng)可以根據(jù)事務(wù)日志執(zhí)行數(shù)據(jù)頁的恢復(fù)操作。
[0003]數(shù)據(jù)庫恢復(fù)的過程中可能出現(xiàn)部分寫(Partial write)問題,原因是數(shù)據(jù)庫從檢查點(diǎn)刷新臟頁的時(shí)候,如果有的臟頁沒有完全寫入磁盤就發(fā)生了斷電,這些臟頁可能僅僅寫入部分?jǐn)?shù)據(jù)。在數(shù)據(jù)庫恢復(fù)的過程中,如果發(fā)現(xiàn)需要恢復(fù)的數(shù)據(jù)頁不完整,則無法采用事務(wù)日志繼續(xù)恢復(fù)。
[0004]為了解決部分寫問題,可以采用開源數(shù)據(jù)庫系統(tǒng)(Postgresql)的寫全頁日志記錄的方法。由于數(shù)據(jù)頁是在檢查點(diǎn)被刷新到磁盤的,如果數(shù)據(jù)頁在某一檢查點(diǎn)被刷新到磁盤之后出現(xiàn)第一次更新操作,該第一次更新操作將導(dǎo)致數(shù)據(jù)頁由干凈頁(clean page)變?yōu)榕K頁(dirty page),這時(shí)可以在事務(wù)日志中記錄整個(gè)數(shù)據(jù)頁的全頁日志記錄,在第一次更新操作之后的其他更新操作,事務(wù)日志可以只保存該數(shù)據(jù)頁的更新日志記錄。在數(shù)據(jù)恢復(fù)過程中,如果發(fā)現(xiàn)該數(shù)據(jù)頁不完整,可以確定該數(shù)據(jù)頁出現(xiàn)更新操作的最近的一次檢查點(diǎn),從該檢查點(diǎn)之后的全頁日志記錄中得到該數(shù)據(jù)頁的完整信息。
[0005]但是,通常,兩個(gè)檢查點(diǎn)之間的時(shí)間間隔不長,更新頻繁的數(shù)據(jù)頁會(huì)不斷被刷新到磁盤,然后又重新從干凈頁變?yōu)榕K頁,這會(huì)導(dǎo)致事務(wù)日志中記錄的全頁日志記錄非常多,由于全頁日志記錄的數(shù)據(jù)量大,導(dǎo)致事務(wù)日志所占用的空間也較大,并且會(huì)增加事務(wù)日志刷新的磁盤輸入輸出(Input and Output, 10),導(dǎo)致數(shù)據(jù)庫恢復(fù)時(shí)間增加。

【發(fā)明內(nèi)容】

[0006]有鑒于此,本發(fā)明要解決的技術(shù)問題是,如何減少事務(wù)日志所占用的磁盤空間。
[0007]為了解決上述技術(shù)問題,第一方面,本發(fā)明提供了一種日志管理方法,包括:
[0008]在數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生更新時(shí),檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0009]若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄所述數(shù)據(jù)頁對應(yīng)的更新日志記錄。
[0010]結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,包括:
[0011 ] 若所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄對所述數(shù)據(jù)頁更新后的數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0012]結(jié)合第一方面或第一方面的第一種可能的實(shí)施方式,在第二種可能的實(shí)施方式中,所述檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,包括:
[0013]根據(jù)所述數(shù)據(jù)頁記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0014]結(jié)合第一方面的第二種可能的實(shí)施方式,在第三種可能的實(shí)施方式中,根據(jù)所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,包括:
[0015]若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)大于或等于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0016]若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)小于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0017]結(jié)合第一方面以及第一方面的第一種可能的實(shí)施方式至第三種可能的實(shí)施方式中的任意一個(gè),在第四種可能的實(shí)施方式中,在檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄之后,還包括:
[0018]若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,且所述事務(wù)日志滿足重新記錄全頁日志記錄的條件,則在所述事務(wù)日志中重新記錄所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄,并在所述數(shù)據(jù)頁中將所述序列號(hào)更新為所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄的序列號(hào);
[0019]其中,所述重新記錄全頁日志記錄的條件包括以下任意一種:
[0020]從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)據(jù)量大于或等于設(shè)定的數(shù)據(jù)量閾值;
[0021]從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)目大于或等于設(shè)定的日志數(shù)目閾值;
[0022]從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的時(shí)間間隔大于或等于設(shè)定的時(shí)長閾值。
[0023]結(jié)合第一方面以及第一方面的第一種可能的實(shí)施方式至第四種可能的實(shí)施方式中的任意一個(gè),在第五種可能的實(shí)施方式中,還包括:
[0024]在對所述數(shù)據(jù)頁進(jìn)行恢復(fù)時(shí),在所述事務(wù)日志中查找所述數(shù)據(jù)頁的恢復(fù)起點(diǎn),所述恢復(fù)起點(diǎn)為所述事務(wù)日志中記錄的最后一次檢查點(diǎn);
[0025]若采用所述事務(wù)日志在所述恢復(fù)起點(diǎn)之后的更新日志記錄對所述數(shù)據(jù)頁的恢復(fù)出現(xiàn)錯(cuò)誤,則從所述恢復(fù)起點(diǎn)之后的所述數(shù)據(jù)頁對應(yīng)的更新日志記錄中查找所述數(shù)據(jù)頁最近一次全頁日志記錄對應(yīng)的序列號(hào);
[0026]根據(jù)查找到的序列號(hào),在所述事務(wù)日志中查找所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0027]根據(jù)所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,對所述數(shù)據(jù)頁進(jìn)行恢復(fù)。
[0028]結(jié)合第一方面以及第一方面的第一種可能的實(shí)施方式至第五種可能的實(shí)施方式中的任意一個(gè),在第六種可能的實(shí)施方式中,所述事務(wù)日志為在線日志,所述方法還包括:
[0029]統(tǒng)計(jì)所述數(shù)據(jù)庫中未刷新到硬盤中的臟頁;
[0030]從所有未刷新到硬盤中的臟頁中記錄的全頁日志記錄的序列號(hào)中,確定最小序列號(hào);[0031]在所述在線日志中刪除日志記錄序列號(hào)比所述最小序列號(hào)小的日志記錄。
[0032]為了解決上述技術(shù)問題,第二方面,本發(fā)明提供了一種日志管理裝置,包括:
[0033]檢查模塊,用于在數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生更新時(shí),檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0034]更新模塊,與所述檢查模塊相通信,用于若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄所述數(shù)據(jù)頁對應(yīng)的更新日志記錄。
[0035]結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,所述更新模塊還用于若所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄對所述數(shù)據(jù)頁更新后的數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0036]結(jié)合第二方面或第二方面的第一種可能的實(shí)施方式,在第二種可能的實(shí)施方式中,所述檢查模塊還用于根據(jù)所述數(shù)據(jù)頁記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0037]結(jié)合第二方面的第二種可能的實(shí)施方式,在第三種可能的實(shí)施方式中,所述檢查模塊還用于若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)大于或等于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0038]所述檢查模塊還用于若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)小于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0039]結(jié)合第二方面以及第二方面的第一種可能的實(shí)施方式至第三種可能的實(shí)施方式中的任意一個(gè),在第四種可能的實(shí)施方式中,所述更新模塊還用于若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,且所述事務(wù)日志滿足重新記錄全頁日志記錄的條件,則在所述事務(wù)日志中重新記錄所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄,并在所述數(shù)據(jù)頁中將所述序列號(hào)更新為所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄的序列號(hào);
[0040]所述更新模塊還用于判定從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)據(jù)量是否大于或等于設(shè)定的數(shù)據(jù)量閾值;或
[0041]所述更新模塊還用于判定從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)目是否大于或等于設(shè)定的日志數(shù)目閾值;或
[0042]所述更新模塊還用于判定從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的時(shí)間間隔是否大于或等于設(shè)定的時(shí)長閾值。
[0043]結(jié)合第二方面以及第二方面的第一種可能的實(shí)施方式至第四種可能的實(shí)施方式中的任意一個(gè),在第五種可能的實(shí)施方式中,還包括:
[0044]恢復(fù)模塊,與所述檢查模塊和所述更新模塊相通信,用于在對所述數(shù)據(jù)頁進(jìn)行恢復(fù)時(shí),在所述事務(wù)日志中查找所述數(shù)據(jù)頁的恢復(fù)起點(diǎn),所述恢復(fù)起點(diǎn)為所述事務(wù)日志中記錄的最后一次檢查點(diǎn);
[0045]所述恢復(fù)模塊還用于若采用所述事務(wù)日志在所述恢復(fù)起點(diǎn)之后的更新日志記錄對所述數(shù)據(jù)頁的恢復(fù)出現(xiàn)錯(cuò)誤,則從所述恢復(fù)起點(diǎn)之后的所述數(shù)據(jù)頁對應(yīng)的更新日志記錄中查找所述數(shù)據(jù)頁最近一次全頁日志記錄對應(yīng)的序列號(hào);
[0046]所述恢復(fù)模塊還用于根據(jù)查找到的序列號(hào),在所述事務(wù)日志中查找所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0047]所述恢復(fù)模塊還用于根據(jù)所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,對所述數(shù)據(jù)頁進(jìn)行恢復(fù)。
[0048]結(jié)合第二方面以及第二方面的第一種可能的實(shí)施方式至第五種可能的實(shí)施方式中的任意一個(gè),在第六種可能的實(shí)施方式中,還包括:
[0049]刪除模塊,與所述檢查模塊和所述更新模塊相通信,用于統(tǒng)計(jì)所述數(shù)據(jù)庫中未刷新到硬盤中的臟頁;
[0050]所述刪除模塊還用于從所有未刷新到硬盤中的臟頁中記錄的全頁日志記錄的序列號(hào)中,確定最小序列號(hào);
[0051]所述刪除模塊還用于在所述在線日志中刪除日志記錄序列號(hào)比所述最小序列號(hào)小的日志記錄。
[0052]本實(shí)施例的日志管理方法,如果事務(wù)日志中存在數(shù)據(jù)頁中的全頁日志記錄,可以只記錄該數(shù)據(jù)頁的更新日志記錄,在通過事務(wù)日志中的全頁日志記錄保證數(shù)據(jù)的正?;謴?fù)的同時(shí),可以減少事務(wù)日志中全頁日志記錄的數(shù)量,減少事務(wù)日志所占用的磁盤空間。
[0053]根據(jù)下面參考附圖對示例性實(shí)施例的詳細(xì)說明,本發(fā)明的其它特征及方面將變得清楚。
【專利附圖】

【附圖說明】
[0054]包含在說明書中并且構(gòu)成說明書的一部分的附圖與說明書一起示出了本發(fā)明的示例性實(shí)施例、特征和方面,并且用于解釋本發(fā)明的原理。
[0055]圖la、lb為本發(fā)明實(shí)施例一的日志管理方法的流程圖;
[0056]圖1c為本發(fā)明實(shí)施例一的重新記錄全頁日志記錄的示意圖;
[0057]圖2a和圖2b為本發(fā)明實(shí)施例二的日志管理方法中在線日志中查找全頁日志記錄的不意圖;
[0058]圖2c為本發(fā)明實(shí)施例二的日志管理方法中刪除在線日志的日志記錄的流程圖;
[0059]圖2d為本發(fā)明實(shí)施例二的事務(wù)日志刪除方法的示意圖;
[0060]圖3a為本發(fā)明實(shí)施例三的數(shù)據(jù)庫恢復(fù)方法的流程圖;
[0061]圖3b為本發(fā)明實(shí)施例三的數(shù)據(jù)庫恢復(fù)方法的示意圖;
[0062]圖4為本發(fā)明實(shí)施例四的日志管理裝置的結(jié)構(gòu)框圖;
[0063]圖5為本發(fā)明實(shí)施例五的日志管理裝置的結(jié)構(gòu)框圖;
[0064]圖6為本發(fā)明實(shí)施例六的日志管理裝置的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0065]以下將參考附圖詳細(xì)說明本發(fā)明的各種示例性實(shí)施例、特征和方面。附圖中相同的附圖標(biāo)記表示功能相同或相似的元件。盡管在附圖中示出了實(shí)施例的各種方面,但是除非特別指出,不必按比例繪制附圖。
[0066]在這里專用的詞“示例性”意為“用作例子、實(shí)施例或說明性”。這里作為“示例性”所說明的任何實(shí)施例不必解釋為優(yōu)于或好于其它實(shí)施例。
[0067]另外,為了更好的說明本發(fā)明,在下文的【具體實(shí)施方式】中給出了眾多的具體細(xì)節(jié)。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,沒有某些具體細(xì)節(jié),本發(fā)明同樣可以實(shí)施。在一些實(shí)例中,對于本領(lǐng)域技術(shù)人員熟知的方法、手段、元件和電路未作詳細(xì)描述,以便于凸顯本發(fā)明的主旨。
[0068]實(shí)施例1
[0069]圖la、lb為本發(fā)明實(shí)施例一的日志管理方法的流程圖。如圖1a所示,該日志管理方法主要包括:
[0070]步驟S110、在數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生更新時(shí),檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0071]步驟S120、若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄所述數(shù)據(jù)頁對應(yīng)的更新日志記錄。
[0072]具體地,步驟SllO之后還可以包括,若所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄對所述數(shù)據(jù)頁更新后的數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0073]數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)可以由事務(wù)日志、事務(wù)表、臟頁表與數(shù)據(jù)頁結(jié)構(gòu)四部分組成。其中,事務(wù)日志既可為己提交事務(wù)的重做(redo)和未提交事務(wù)的撤消(undo)提供信息源,也為介質(zhì)恢復(fù)提供途徑。數(shù)據(jù)庫要對任何事務(wù)的可能引起可恢復(fù)數(shù)據(jù)對象發(fā)生改變的操作作事務(wù)日志,并采用先記后寫的WAL協(xié)議,事務(wù)日志的數(shù)據(jù)結(jié)構(gòu)可以包括以下數(shù)據(jù)域:序列號(hào)(log sequence number, LSN),數(shù)據(jù)頁標(biāo)識(shí)符(Page ID):用于標(biāo)識(shí)“更新”與“補(bǔ)償”記錄中的更新所作用的頁,通常由對象標(biāo)識(shí)符與頁在對象中的頁序號(hào)兩部分組成。數(shù)據(jù)(Data):用以記錄所實(shí)施的更新的redo/undo數(shù)據(jù)。
[0074]事務(wù)表主要用于在系統(tǒng)失效后的重啟動(dòng)恢復(fù)時(shí)跟蹤記錄活動(dòng)事務(wù)的狀態(tài),從而為該過程要進(jìn)行的撤消提供依據(jù)。臟頁表中的每一數(shù)據(jù)項(xiàng)包含頁標(biāo)識(shí)符(Page ID)和恢復(fù)序列號(hào)(Recovery LSN)兩個(gè)數(shù)據(jù)域。前者用于標(biāo)識(shí)相應(yīng)的臟頁,后者用于指明有關(guān)該頁的可能未存到穩(wěn)定存儲(chǔ)器中的更新在日志中的開始位置。
[0075]在數(shù)據(jù)庫的每一數(shù)據(jù)頁中可以辟出一些空間作為頁序列號(hào)(PageLSN)域,用以描述在該頁上所作的最近的更新或補(bǔ)償操作所對應(yīng)的日志記錄的LSN,該日志記錄可以是全頁日志或更新日志。所述頁序列號(hào)域可以記錄該數(shù)據(jù)頁對應(yīng)的更新日志的序列號(hào)。
[0076]數(shù)據(jù)庫系統(tǒng)還可以在數(shù)據(jù)頁中記錄其對應(yīng)的全頁日志記錄的序列號(hào),該序列號(hào)對應(yīng)的全頁日志記錄可以恢復(fù)出一個(gè)完整的數(shù)據(jù)頁,數(shù)據(jù)庫系統(tǒng)還可以在每個(gè)檢測點(diǎn)之后的第一次出現(xiàn)的數(shù)據(jù)頁的更新日志中記錄該數(shù)據(jù)頁的全頁日志的序列號(hào)。
[0077]具體地,數(shù)據(jù)庫系統(tǒng)在某些場景下需要更新數(shù)據(jù)頁對應(yīng)的全頁日志記錄的序列號(hào),例如:
[0078](I)當(dāng)數(shù)據(jù)頁第一次被分配時(shí),此時(shí)數(shù)據(jù)頁中沒有任何數(shù)據(jù)信息;
[0079](2)當(dāng)數(shù)據(jù)頁的更新操作導(dǎo)致數(shù)據(jù)頁中的所有記錄都被刪除時(shí),此時(shí)數(shù)據(jù)頁的數(shù)據(jù)記錄數(shù)目為0;
[0080](3)當(dāng)數(shù)據(jù)頁記錄全頁日志記錄時(shí),此時(shí)可以在數(shù)據(jù)頁中記錄全頁日志記錄對應(yīng)的LSN (也可以稱為initLSN),后續(xù)通過該initLSN對應(yīng)的全頁日志記錄可以恢復(fù)完整的數(shù)據(jù)頁。
[0081]具體地,步驟SllO可以包括:
[0082]根據(jù)所述數(shù)據(jù)頁記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,具體可以包括以下情況:
[0083]情況一、若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)大于或等于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0084]情況二、若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)小于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0085]具體地,當(dāng)數(shù)據(jù)庫系統(tǒng)執(zhí)行更新操作時(shí),導(dǎo)致數(shù)據(jù)頁由干凈頁變?yōu)榕K頁時(shí),數(shù)據(jù)庫系統(tǒng)會(huì)檢查該數(shù)據(jù)頁中的全頁日志記錄的序列號(hào),當(dāng)發(fā)現(xiàn)其對應(yīng)全頁日志記錄在事務(wù)日志(如歸檔日志或在線日志)中存在,則不記錄全頁日志記錄,而是記錄更新日志記錄,同時(shí)在該臟頁中記錄其對應(yīng)全頁日志記錄的序列號(hào)。
[0086]數(shù)據(jù)庫系統(tǒng)也可以檢查點(diǎn)之后第一次出現(xiàn)的數(shù)據(jù)頁對應(yīng)的更新日志中記錄其全頁日志記錄對應(yīng)的序列號(hào)。一種可能的實(shí)施方式中,數(shù)據(jù)庫系統(tǒng)可以根據(jù)所述數(shù)據(jù)頁中記錄的所述更新日志記錄對應(yīng)的序列號(hào),查找所述更新日志記錄;若所述更新日志記錄中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)大于或等于所述事務(wù)日志的最小序列號(hào),則確定所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;若所述更新日志記錄中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)小于所述事務(wù)日志的最小序列號(hào),則確定所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0087]進(jìn)一步的,為了減少恢復(fù)時(shí)間,即使之前已經(jīng)記錄了某一數(shù)據(jù)頁對應(yīng)的全頁日志記錄,也可以在滿足某些條件下,重新記錄全頁日志記錄,因此,如圖1b所示,在步驟SllO或步驟S120之后,該日志管理方法還可以包括:
[0088]步驟S130、若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,且所述事務(wù)日志滿足重新記錄全頁日志記錄的條件,則在所述事務(wù)日志中重新記錄所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄,并在所述數(shù)據(jù)頁中將所述序列號(hào)更新為所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄的序列號(hào);
[0089]其中,所述重新記錄全頁日志記錄的條件包括以下任意一種:
[0090]從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)據(jù)量大于或等于設(shè)定的數(shù)據(jù)量閾值;
[0091]從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)目大于或等于設(shè)定的日志數(shù)目閾值;
[0092]從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的時(shí)間間隔大于或等于設(shè)定的時(shí)長閾值。
[0093]舉例而言,圖1c為本發(fā)明實(shí)施例一的重新記錄全頁日志記錄的示意圖。如圖1c所示,具體做法可以為判斷從數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前記錄的事務(wù)日志的數(shù)據(jù)量是否大于設(shè)定的數(shù)據(jù)量閾值。若當(dāng)前數(shù)據(jù)頁對應(yīng)的日志的檢查點(diǎn)為101,數(shù)據(jù)庫系統(tǒng)查找到上一次全頁日志記錄對應(yīng)的檢查點(diǎn)為102,數(shù)據(jù)庫系統(tǒng)檢測到兩個(gè)檢查點(diǎn)之間事務(wù)日志的數(shù)據(jù)量大于設(shè)定的數(shù)據(jù)量閾值時(shí),例如數(shù)據(jù)量閾值可以為16M,就記錄一次全頁日志記錄,并把這次全頁日志記錄的序列號(hào)記錄在后續(xù)修改的數(shù)據(jù)頁中。這樣,在數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生更新時(shí),檢查數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄時(shí),此時(shí),該事務(wù)日志中存在數(shù)據(jù)頁對應(yīng)的全頁日志記錄有多個(gè),在該事務(wù)日志中記錄數(shù)據(jù)頁對應(yīng)的更新日志記錄時(shí),在數(shù)據(jù)頁中記錄重新記錄的全頁日志記錄的序列號(hào)。若數(shù)據(jù)頁刷新時(shí)發(fā)生部分寫錯(cuò)誤,數(shù)據(jù)庫系統(tǒng)進(jìn)行數(shù)據(jù)恢復(fù)時(shí),則可以從離該數(shù)據(jù)頁的更新日志記錄最近的一次全頁日志記錄進(jìn)行恢復(fù)。
[0094]需要說明的是,盡管以數(shù)據(jù)量閾值為示例等介紹了重新記錄全頁日志記錄的條件,但本領(lǐng)域技術(shù)人員能夠理解,本發(fā)明應(yīng)不限于此。事實(shí)上,用戶完全可根據(jù)個(gè)人喜好和/或?qū)嶋H應(yīng)用場景靈活設(shè)定重新記錄全頁日志記錄的條件,只要能重新記錄數(shù)據(jù)頁的全頁日志記錄即可。
[0095]需要說明的是,本發(fā)明的日志管理方法還可以適用于基于WAL日志的采用全量檢查點(diǎn)或增量檢查點(diǎn)的數(shù)據(jù)庫系統(tǒng)。
[0096]本實(shí)施例的日志管理方法,如果事務(wù)日志中存在數(shù)據(jù)頁中的全頁日志記錄,可以只記錄該數(shù)據(jù)頁的更新日志記錄,在通過事務(wù)日志中的全頁日志記錄保證數(shù)據(jù)的正常恢復(fù)的同時(shí),可以減少事務(wù)日志中全頁日志記錄的數(shù)量,減少事務(wù)日志所占用的磁盤空間。
[0097]實(shí)施例2
[0098]數(shù)據(jù)庫的事務(wù)日志可以包括歸檔日志或在線日志。其中,歸檔日志是備份在其他磁盤或其他主機(jī)的日志,一般不會(huì)刪除歸檔日志中的日志記錄,所以數(shù)據(jù)頁的對應(yīng)全頁日志記錄通??梢栽跉w檔日志中找到。而在線日志存放在數(shù)據(jù)庫系統(tǒng)本地的日志文件中,系統(tǒng)在執(zhí)行檢查點(diǎn)時(shí)可能會(huì)刪除在線日志中較早的部分日志記錄以確保本地有足夠的磁盤空間。為了保證在線日志中存在某一數(shù)據(jù)頁的全頁日志記錄,在對在線日志的日志記錄進(jìn)行刪除時(shí),需要按照一定的刪除策略進(jìn)行刪除。
[0099]在線日志中日志記錄的序列號(hào)為單調(diào)遞增數(shù)列,在線日志最早的日志記錄的序列號(hào)為最小日志序列號(hào),在線日志的邊界為該最小日志序列號(hào)對應(yīng)的日志記錄。圖2a和圖2b為本發(fā)明實(shí)施例二的日志管理方法中在線日志中查找全頁日志記錄的示意圖,圖2a和圖2b中帶反斜線的框表示的日志記錄為全頁日志記錄,空白框表示的日志記錄為更新日志記錄。如圖2a所示,當(dāng)數(shù)據(jù)頁P(yáng)l從最近的檢查點(diǎn)起第一次被修改時(shí),檢查數(shù)據(jù)頁P(yáng)l是否存在全頁日志記錄。如果數(shù)據(jù)庫系統(tǒng)檢查到數(shù)據(jù)頁P(yáng)l中保存的其全頁日志記錄的序列號(hào)(initLSN)沒有超過在線日志的邊界,則在記錄在線日志時(shí)不需要記錄全頁日志記錄,可以僅記錄更新日志記錄,同時(shí)在數(shù)據(jù)頁P(yáng)l中記錄其對應(yīng)的全頁日志記錄的序列號(hào)(initLSN),該initLSN可以代表數(shù)據(jù)頁P(yáng)l最近一次全頁日志記錄的位置,該位置的全頁日志記錄可以恢復(fù)出一個(gè)完整的數(shù)據(jù)頁P(yáng)1。如圖2b所示,如果數(shù)據(jù)庫系統(tǒng)檢測到數(shù)據(jù)頁P(yáng)l中的全頁日志記錄的序列號(hào)(initLSN)已經(jīng)超過在線日志的邊界,即在線日志中已經(jīng)不存在數(shù)據(jù)頁P(yáng)l的全頁日志記錄,因此,在線日志當(dāng)前的日志記錄中需要記錄數(shù)據(jù)頁P(yáng)l的全頁日志記錄。
[0100]在數(shù)據(jù)頁被刷新到磁盤之前,如果在線日志中其對應(yīng)的全頁日志記錄被刪除,數(shù)據(jù)頁刷新時(shí)如果發(fā)生部分寫問題會(huì)造成數(shù)據(jù)庫無法恢復(fù)。為了避免部分寫帶來的恢復(fù)失敗的問題,數(shù)據(jù)庫在刪除在線日志中的日志記錄時(shí),需要避免刪除當(dāng)前未刷新臟頁的全頁日志記錄。圖2c為本發(fā)明實(shí)施例二的日志管理方法中刪除在線日志的日志記錄的流程圖。如圖2c所示,該日志志管理方法中,刪除在線日志的日志記錄的步驟主要可以包括:
[0101]步驟S210、統(tǒng)計(jì)所述數(shù)據(jù)庫中未刷新到硬盤中的臟頁;[0102]步驟S220、從所有未刷新到硬盤中的臟頁中記錄的全頁日志記錄的序列號(hào)中,確定最小序列號(hào);
[0103]步驟S230、在所述在線日志中刪除日志記錄序列號(hào)比所述最小序列號(hào)小的日志記錄。
[0104]具體地,在線日志中事務(wù)日志的數(shù)據(jù)線型排列,從前向后的序列號(hào)依次增大。圖2d為本發(fā)明實(shí)施例二的事務(wù)日志刪除方法的示意圖。如圖2d所示,刪除在線日志201中日志記錄時(shí),需要檢查數(shù)據(jù)庫內(nèi)存中還沒有刷新到磁盤的臟頁,如P3和P2為沒有刷新到磁盤的臟頁,統(tǒng)計(jì)該P(yáng)3和P2的全頁日志記錄的序列號(hào),如果P3的全頁日志記錄的序列號(hào)為“90”,P2的全頁日志記錄的序列號(hào)為“95”,則最小的全頁日志記錄的序列號(hào)為“90”。數(shù)據(jù)庫系統(tǒng)可以僅刪除該最小的序列號(hào)“90”對應(yīng)的全頁日志記錄之前的日志記錄,即刪除檢查點(diǎn)203之前的所有日志記錄。一旦數(shù)據(jù)頁的對應(yīng)的全頁日志記錄被刪除時(shí),當(dāng)數(shù)據(jù)頁下一次變?yōu)榕K頁時(shí)就需要重新記錄全頁日志記錄,因此,在刪除事務(wù)日志時(shí),在滿足上面的刪除要求下,可以盡量多保留一些在線日志。例如數(shù)據(jù)庫系統(tǒng)只有在線日志的大小超過設(shè)定閾值如IG時(shí)再刪除部分日志記錄。
[0105]本實(shí)施例的日志管理方法,如果事務(wù)日志中存在數(shù)據(jù)頁中的全頁日志記錄,可以只記錄該數(shù)據(jù)頁的更新日志記錄,在通過事務(wù)日志中的全頁日志記錄保證數(shù)據(jù)的正?;謴?fù)的同時(shí),可以減少事務(wù)日志中全頁日志記錄的數(shù)量,減少事務(wù)日志所占用的磁盤空間。
[0106]實(shí)施例3
[0107]圖3a為本發(fā)明實(shí)施例三的數(shù)據(jù)庫恢復(fù)方法的流程圖,圖3b為本發(fā)明實(shí)施例三的數(shù)據(jù)庫恢復(fù)方法的示意圖。如圖3a所示,該數(shù)據(jù)庫恢復(fù)方法主要包括:
[0108]步驟S310、在對所述數(shù)據(jù)頁進(jìn)行恢復(fù)時(shí),在所述事務(wù)日志中查找所述數(shù)據(jù)頁的恢復(fù)起點(diǎn),所述恢復(fù)起點(diǎn)為所述事務(wù)日志中記錄的最后一次檢查點(diǎn);
[0109]步驟S320、若采用所述事務(wù)日志在所述恢復(fù)起點(diǎn)之后的更新日志記錄對所述數(shù)據(jù)頁的恢復(fù)出現(xiàn)錯(cuò)誤,則從所述恢復(fù)起點(diǎn)之后的所述數(shù)據(jù)頁對應(yīng)的更新日志記錄中查找所述數(shù)據(jù)頁最近一次全頁日志記錄對應(yīng)的序列號(hào);
[0110]步驟S330、根據(jù)查找到的序列號(hào),在所述事務(wù)日志中查找所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0111]步驟S340、根據(jù)所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,對所述數(shù)據(jù)頁進(jìn)行恢復(fù)。
[0112]具體地,當(dāng)數(shù)據(jù)庫系統(tǒng)發(fā)生故障或當(dāng)系統(tǒng)崩潰后重啟時(shí),數(shù)據(jù)庫系統(tǒng)恢復(fù)管理器將被激活,并按以下三個(gè)階段進(jìn)行數(shù)據(jù)恢復(fù):分析(Analysis):鑒別崩潰發(fā)生時(shí),緩沖區(qū)中的臟頁和當(dāng)時(shí)仍活躍的事務(wù)。重做(Redo):重做從日志的適當(dāng)起點(diǎn)(比如,被修改的最早臟頁對應(yīng)事務(wù)日志)開始的所有動(dòng)作,恢復(fù)系統(tǒng)到崩潰時(shí)的數(shù)據(jù)庫(data base,DB)狀態(tài)。撤消(Undo):撤消上次崩潰時(shí)所有未提交事務(wù)的動(dòng)作效果,使數(shù)據(jù)庫只反映已提交事務(wù)的影響。
[0113]然而,如果在數(shù)據(jù)恢復(fù)過程中,搜索整個(gè)日志將耗費(fèi)大量的時(shí)間,redo處理要重新執(zhí)行所有事務(wù),浪費(fèi)了大量時(shí)間。為了降低以上開銷,在日志中增加新的記錄檢查點(diǎn)記錄,系統(tǒng)周期性地執(zhí)行檢查點(diǎn),具體動(dòng)作為:將當(dāng)前日志緩沖中的所有事務(wù)日志寫入日志文件上(日志文件都存儲(chǔ)在穩(wěn)定存儲(chǔ)器上)。把所有修改了的數(shù)據(jù)記錄寫入到磁盤的數(shù)據(jù)庫中。將檢查點(diǎn)記錄寫入到日志文件上。檢查點(diǎn)在執(zhí)行過程中,一般不允許事務(wù)執(zhí)行任何更新動(dòng)作,如寫緩沖塊或?qū)懯聞?wù)日志,等待所有的事務(wù)都完成再進(jìn)行更新操作。當(dāng)事務(wù)在檢查點(diǎn)之前提交,則該事務(wù)對數(shù)據(jù)庫所做的修改已寫入數(shù)據(jù)庫,此時(shí)恢復(fù)時(shí)不必再對該事務(wù)進(jìn)行redo操作。具有檢查點(diǎn)的恢復(fù)技術(shù),可以在日志文件中增加檢查點(diǎn)記錄,增加重新開始文件,使得恢復(fù)子系統(tǒng)在登錄日志文件期間動(dòng)態(tài)地維護(hù)日志。
[0114]如圖3b所示,在對數(shù)據(jù)頁進(jìn)行恢復(fù)時(shí),在事務(wù)日志中查找數(shù)據(jù)頁的恢復(fù)起點(diǎn),該恢復(fù)起點(diǎn)為可以為所述事務(wù)日志中記錄的最后一次檢查點(diǎn)204。從檢查點(diǎn)204位置開始恢復(fù)時(shí),當(dāng)恢復(fù)到事務(wù)日志205對應(yīng)的數(shù)據(jù)頁P(yáng)l時(shí),發(fā)現(xiàn)數(shù)據(jù)頁P(yáng)l發(fā)生錯(cuò)誤。由于當(dāng)前的日志記錄中記錄了數(shù)據(jù)頁P(yáng)l對應(yīng)的最近一次全頁日志記錄的序列號(hào)initLSN,此時(shí)數(shù)據(jù)庫系統(tǒng)可以根據(jù)該日志序列號(hào)找到數(shù)據(jù)頁P(yáng)l對應(yīng)的事務(wù)日志206,所述如果該事務(wù)日志206是全頁日志記錄,從該全頁日志記錄206重構(gòu)數(shù)據(jù)頁P(yáng)l或跳轉(zhuǎn)到當(dāng)前位置進(jìn)行重新恢復(fù),然后執(zhí)行后續(xù)該頁面的redo操作;否則,構(gòu)造空數(shù)據(jù)頁,執(zhí)行后續(xù)頁面的redo操作。
[0115]本實(shí)施例的日志管理方法,如果事務(wù)日志中存在數(shù)據(jù)頁中的全頁日志記錄,可以只記錄該數(shù)據(jù)頁的更新日志記錄,在通過事務(wù)日志中的全頁日志記錄保證數(shù)據(jù)的正?;謴?fù)的同時(shí),可以減少事務(wù)日志中全頁日志記錄的數(shù)量,減少事務(wù)日志所占用的磁盤空間。
[0116]實(shí)施例4
[0117]圖4為本發(fā)明實(shí)施例四的日志管理裝置的結(jié)構(gòu)框圖。如圖4所示,該日志管理裝置主要包括:
[0118]檢查模塊410,用于在數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生更新時(shí),檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0119]更新模塊420,與所述檢查模塊410相通信,用于若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄所述數(shù)據(jù)頁對應(yīng)的更新日志記錄。
[0120]所述更新模塊420還用于若所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄對所述數(shù)據(jù)頁更新后的數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0121]所述檢查模塊410還用于根據(jù)所述數(shù)據(jù)頁記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0122]所述檢查模塊410還用于若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)大于或等于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0123]所述檢查模塊410還用于若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)小于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0124]所述更新模塊420還用于若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,且所述事務(wù)日志滿足重新記錄全頁日志記錄的條件,則在所述事務(wù)日志中重新記錄所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄,并在所述數(shù)據(jù)頁中將所述序列號(hào)更新為所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄的序列號(hào);
[0125]所述更新模塊420還用于判定從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)據(jù)量是否大于或等于設(shè)定的數(shù)據(jù)量閾值;
[0126]所述更新模塊420還用于判定從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)目是否大于或等于設(shè)定的日志數(shù)目閾值;[0127]所述更新模塊420還用于判定從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的時(shí)間間隔是否大于或等于設(shè)定的時(shí)長閾值。
[0128]本實(shí)施例的日志管理裝置,如果事務(wù)日志中存在數(shù)據(jù)頁中的全頁日志記錄,可以只記錄該數(shù)據(jù)頁的更新日志記錄,在通過事務(wù)日志中的全頁日志記錄保證數(shù)據(jù)的正常恢復(fù)的同時(shí),可以減少事務(wù)日志中全頁日志記錄的數(shù)量,減少事務(wù)日志所占用的磁盤空間。
[0129]實(shí)施例5
[0130]圖5為本發(fā)明實(shí)施例五的日志管理裝置的結(jié)構(gòu)框圖。圖5中標(biāo)號(hào)與圖4相同的組件具有相同的功能,為簡明起見,省略對這些組件的詳細(xì)說明。
[0131]如圖5所示,圖5所示的日志管理裝置與圖4所示日志管理裝置的主要區(qū)別在于,還包括:
[0132]恢復(fù)模塊510,可以與所述檢查模塊410和更新模塊420相通信,用于在對所述數(shù)據(jù)頁進(jìn)行恢復(fù)時(shí),在所述事務(wù)日志中查找所述數(shù)據(jù)頁的恢復(fù)起點(diǎn),所述恢復(fù)起點(diǎn)為所述事務(wù)日志中記錄的最后一次檢查點(diǎn);
[0133]所述恢復(fù)模塊510還用于若采用所述事務(wù)日志在所述恢復(fù)起點(diǎn)之后的更新日志記錄對所述數(shù)據(jù)頁的恢復(fù)出現(xiàn)錯(cuò)誤,則從所述恢復(fù)起點(diǎn)之后的所述數(shù)據(jù)頁對應(yīng)的更新日志記錄中查找所述數(shù)據(jù)頁最近一次全頁日志記錄對應(yīng)的序列號(hào);
[0134]所述恢復(fù)模塊510還用于根據(jù)查找到的序列號(hào),在所述事務(wù)日志中查找所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0135]所述恢復(fù)模塊510還用于根據(jù)所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,對所述數(shù)據(jù)頁進(jìn)行恢復(fù)。
[0136]所述日志管理裝置還包括刪除模塊520,可以與所述檢查模塊410和所述更新模塊420相通信,用于統(tǒng)計(jì)所述數(shù)據(jù)庫中未刷新到硬盤中的臟頁;
[0137]所述刪除模塊520還用于從所有未刷新到硬盤中的臟頁中記錄的全頁日志記錄的序列號(hào)中,確定最小序列號(hào);
[0138]所述刪除模塊520還用于在所述在線日志中刪除比所述最小序列號(hào)小的日志記錄。
[0139]本實(shí)施例的日志管理裝置,如果事務(wù)日志中存在數(shù)據(jù)頁中的全頁日志記錄,可以只記錄該數(shù)據(jù)頁的更新日志記錄,在通過事務(wù)日志中的全頁日志記錄保證數(shù)據(jù)的正?;謴?fù)的同時(shí),可以減少事務(wù)日志中全頁日志記錄的數(shù)量,減少事務(wù)日志所占用的磁盤空間。
[0140]實(shí)施例6
[0141]圖6為本發(fā)明實(shí)施例六的日志管理裝置的結(jié)構(gòu)框圖。所述日志管理裝置600可以是具備計(jì)算能力的主機(jī)服務(wù)器、個(gè)人計(jì)算機(jī)PC、或者可攜帶的便攜式計(jì)算機(jī)或終端等。本發(fā)明具體實(shí)施例并不對計(jì)算節(jié)點(diǎn)的具體實(shí)現(xiàn)做限定。
[0142]所述日志管理裝置600包括處理器(processor) 610、通信接口(CommunicationsInterface)620、存儲(chǔ)器(memory)630和總線640。其中,處理器610、通信接口 620、以及存儲(chǔ)器630通過總線640完成相互間的通信。
[0143]通信接口 620用于與網(wǎng)絡(luò)設(shè)備通信,其中網(wǎng)絡(luò)設(shè)備包括例如虛擬機(jī)管理中心、共
享存儲(chǔ)等。
[0144]處理器610用于執(zhí)行程序。處理器610可能是一個(gè)中央處理器CPU,或者是專用集成電路ASIC (Application Specific Integrated Circuit),或者是被配置成實(shí)施本發(fā)明實(shí)施例的一個(gè)或多個(gè)集成電路。
[0145]存儲(chǔ)器630用于存放文件。存儲(chǔ)器630可能包含高速RAM存儲(chǔ)器,也可能還包括非易失性存儲(chǔ)器(non-volatile memory),例如至少一個(gè)磁盤存儲(chǔ)器。存儲(chǔ)器630也可以是存儲(chǔ)器陣列。存儲(chǔ)器630還可能被分塊,并且所述塊可按一定的規(guī)則組合成虛擬卷。
[0146]在一種可能的實(shí)施方式中,上述程序可為包括計(jì)算機(jī)操作指令的程序代碼。該程序具體可用于:
[0147]在數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生更新時(shí),檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0148]若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄所述數(shù)據(jù)頁對應(yīng)的更新日志記錄。
[0149]在一種可能的實(shí)施方式中,還包括:
[0150]若所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄對所述數(shù)據(jù)頁更新后的數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0151]在一種可能的實(shí)施方式中,所述檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,包括:
[0152]根據(jù)所述數(shù)據(jù)頁記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0153]在一種可能的實(shí)施方式中,根據(jù)所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,包括:
[0154]若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)大于或等于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0155]若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)小于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
[0156]在一種可能的實(shí)施方式中,在檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄之后,還包括:
[0157]若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,且所述事務(wù)日志滿足重新記錄全頁日志記錄的條件,則在所述事務(wù)日志中重新記錄所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄,并在所述數(shù)據(jù)頁中將所述序列號(hào)更新為所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄的序列號(hào);
[0158]其中,所述重新記錄全頁日志記錄的條件包括以下任意一種:
[0159]從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)據(jù)量大于或等于設(shè)定的數(shù)據(jù)量閾值;
[0160]從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)目大于或等于設(shè)定的日志數(shù)目閾值;
[0161]從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的時(shí)間間隔大于或等于設(shè)定的時(shí)長閾值。
[0162]在一種可能的實(shí)施方式中,還包括:[0163]在對所述數(shù)據(jù)頁進(jìn)行恢復(fù)時(shí),在所述事務(wù)日志中查找所述數(shù)據(jù)頁的恢復(fù)起點(diǎn),所述恢復(fù)起點(diǎn)為所述事務(wù)日志中記錄的最后一次檢查點(diǎn);
[0164]若采用所述事務(wù)日志在所述恢復(fù)起點(diǎn)之后的更新日志記錄對所述數(shù)據(jù)頁的恢復(fù)出現(xiàn)錯(cuò)誤,則從所述恢復(fù)起點(diǎn)之后的所述數(shù)據(jù)頁對應(yīng)的更新日志記錄中查找所述數(shù)據(jù)頁最近一次全頁日志記錄對應(yīng)的序列號(hào);
[0165]根據(jù)查找到的序列號(hào),在所述事務(wù)日志中查找所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;
[0166]根據(jù)所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,對所述數(shù)據(jù)頁進(jìn)行恢復(fù)。
[0167]在一種可能的實(shí)施方式中,所述事務(wù)日志為在線日志,所述方法還包括:
[0168]統(tǒng)計(jì)所述數(shù)據(jù)庫中未刷新到硬盤中的臟頁;
[0169]從所有未刷新到硬盤中的臟頁中記錄的全頁日志記錄的序列號(hào)中,確定最小序列號(hào);
[0170]在所述在線日志中刪除日志記錄序列號(hào)比所述最小序列號(hào)小的日志記錄。
[0171]本領(lǐng)域普通技術(shù)人員可以意識(shí)到,本文所描述的實(shí)施例中的各示例性單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來實(shí)現(xiàn)。這些功能究竟以硬件還是軟件形式來實(shí)現(xiàn),取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以針對特定的應(yīng)用選擇不同的方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
[0172]如果以計(jì)算機(jī)軟件的形式來實(shí)現(xiàn)所述功能并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),則在一定程度上可認(rèn)為本發(fā)明的技術(shù)方案的全部或部分(例如對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分)是以計(jì)算機(jī)軟件產(chǎn)品的形式體現(xiàn)的。該計(jì)算機(jī)軟件產(chǎn)品通常存儲(chǔ)在計(jì)算機(jī)可讀取的非易失性存儲(chǔ)介質(zhì)中,包括若干指令用以使得計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī)、服務(wù)器、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各實(shí)施例方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)>磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0173]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種日志管理方法,其特征在于,包括: 在數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生更新時(shí),檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄; 若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄所述數(shù)據(jù)頁對應(yīng)的更新日志記錄。
2.根據(jù)權(quán)利要求1所述的日志管理方法,其特征在于,還包括: 若所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄對所述數(shù)據(jù)頁更新后的數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
3.根據(jù)權(quán)利要求1或2所述的日志管理方法,其特征在于,所述檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,包括: 根據(jù)所述數(shù)據(jù)頁記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
4.根據(jù)權(quán)利要求3所述的日志管理方法,其特征在于,根據(jù)所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,包括: 若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)大于或等于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄;` 若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)小于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
5.根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的日志管理方法,其特征在于,在檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄之后,還包括: 若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,且所述事務(wù)日志滿足重新記錄全頁日志記錄的條件,則在所述事務(wù)日志中重新記錄所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄,并在所述數(shù)據(jù)頁中將所述序列號(hào)更新為所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄的序列號(hào); 其中,所述重新記錄全頁日志記錄的條件包括以下任意一種: 從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)據(jù)量大于或等于設(shè)定的數(shù)據(jù)量閾值; 從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)目大于或等于設(shè)定的日志數(shù)目閾值; 從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的時(shí)間間隔大于或等于設(shè)定的時(shí)長閾值。
6.根據(jù)權(quán)利要求1-5中任一項(xiàng)所述的日志管理方法,其特征在于,還包括: 在對所述數(shù)據(jù)頁進(jìn)行恢復(fù)時(shí),在所述事務(wù)日志中查找所述數(shù)據(jù)頁的恢復(fù)起點(diǎn),所述恢復(fù)起點(diǎn)為所述事務(wù)日志中記錄的最后一次檢查點(diǎn); 若采用所述事務(wù)日志在所述恢復(fù)起點(diǎn)之后的更新日志記錄對所述數(shù)據(jù)頁的恢復(fù)出現(xiàn)錯(cuò)誤,則從所述恢復(fù)起點(diǎn)之后的所述數(shù)據(jù)頁對應(yīng)的更新日志記錄中查找所述數(shù)據(jù)頁最近一次全頁日志記錄對應(yīng)的序列號(hào);根據(jù)查找到的序列號(hào),在所述事務(wù)日志中查找所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄; 根據(jù)所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,對所述數(shù)據(jù)頁進(jìn)行恢復(fù)。
7.根據(jù)權(quán)利要求1-6中任一項(xiàng)所述的日志管理方法,其特征在于,所述事務(wù)日志為在線日志,所述方法還包括: 統(tǒng)計(jì)所述數(shù)據(jù) 庫中未刷新到硬盤中的臟頁; 從所有未刷新到硬盤中的臟頁中記錄的全頁日志記錄的序列號(hào)中,確定最小序列號(hào); 在所述在線日志中刪除日志記錄序列號(hào)比所述最小序列號(hào)小的日志記錄。
8.一種日志管理裝置,其特征在于,包括: 檢查模塊,用于在數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生更新時(shí),檢查所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄; 更新模塊,與所述檢查模塊相通信,用于若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄所述數(shù)據(jù)頁對應(yīng)的更新日志記錄。
9.根據(jù)權(quán)利要求8所述的日志管理裝置,其特征在于,所述更新模塊還用于若所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,則在所述事務(wù)日志中記錄對所述數(shù)據(jù)頁更新后的數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
10.根據(jù)權(quán)利要求8或9所述的日志管理裝置,其特征在于,所述檢查模塊還用于根據(jù)所述數(shù)據(jù)頁記錄的所述全頁日志記錄對應(yīng)的序列號(hào),查找所述數(shù)據(jù)庫的事務(wù)日志中是否存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
11.根據(jù)權(quán)利要求10所述的日志管理裝置,其特征在于,所述檢查模塊還用于若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)大于或等于所述事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄; 所述檢查模塊還用于若所述數(shù)據(jù)頁中記錄的所述全頁日志記錄對應(yīng)的序列號(hào)小于事務(wù)日志中的所有日志記錄序列號(hào)中的最小序列號(hào),則確定所述事務(wù)日志中不存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄。
12.根據(jù)權(quán)利要求8-11中任一項(xiàng)所述的日志管理裝置,其特征在于,所述更新模塊還用于若所述事務(wù)日志中存在所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,且所述事務(wù)日志滿足重新記錄全頁日志記錄的條件,則在所述事務(wù)日志中重新記錄所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄,并在所述數(shù)據(jù)頁中將所述序列號(hào)更新為所述數(shù)據(jù)頁當(dāng)前的全頁日志記錄的序列號(hào); 所述更新模塊還用于判定從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)據(jù)量是否大于或等于設(shè)定的數(shù)據(jù)量閾值;或 所述更新模塊還用于判定從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的日志數(shù)目是否大于或等于設(shè)定的日志數(shù)目閾值;或 所述更新模塊還用于判定從所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄開始到當(dāng)前正在更新的數(shù)據(jù)頁對應(yīng)的日志記錄之間的時(shí)間間隔是否大于或等于設(shè)定的時(shí)長閾值。
13.根據(jù)權(quán)利要求8-12中任一項(xiàng)所述的日志管理裝置,其特征在于,還包括: 恢復(fù)模塊,與所述檢查模塊和所述更新模塊相通信,用于在對所述數(shù)據(jù)頁進(jìn)行恢復(fù)時(shí),在所述事務(wù)日志中查找所述數(shù)據(jù)頁的恢復(fù)起點(diǎn),所述恢復(fù)起點(diǎn)為所述事務(wù)日志中記錄的最后一次檢查點(diǎn);所述恢復(fù)模塊還用于若采用所述事務(wù)日志在所述恢復(fù)起點(diǎn)之后的更新日志記錄對所述數(shù)據(jù)頁的恢復(fù)出現(xiàn)錯(cuò)誤,則從所述恢復(fù)起點(diǎn)之后的所述數(shù)據(jù)頁對應(yīng)的更新日志記錄中查找所述數(shù)據(jù)頁最近一次全頁日志記錄對應(yīng)的序列號(hào); 所述恢復(fù)模塊還用于根據(jù)查找到的序列號(hào),在所述事務(wù)日志中查找所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄; 所述恢復(fù)模塊還用于根據(jù)所述數(shù)據(jù)頁對應(yīng)的全頁日志記錄,對所述數(shù)據(jù)頁進(jìn)行恢復(fù)。
14.根據(jù)權(quán)利要求8-13中任一項(xiàng)所述的日志管理裝置,其特征在于,還包括: 刪除模塊,與所述檢查模塊和所述更新模塊相通信,用于統(tǒng)計(jì)所述數(shù)據(jù)庫中未刷新到硬盤中的臟頁; 所述刪除模塊還用于從所有未刷新到硬盤中的臟頁中記錄的全頁日志記錄的序列號(hào)中,確定最小序列號(hào); 所述刪除模塊還用于在所述在線日志中刪除日志記錄序列號(hào)比所述最小序列號(hào)小的日志記錄。
【文檔編號(hào)】G06F17/30GK103678608SQ201310690278
【公開日】2014年3月26日 申請日期:2013年12月16日 優(yōu)先權(quán)日:2013年12月16日
【發(fā)明者】佟強(qiáng) 申請人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
常熟市| 万年县| 湖南省| 油尖旺区| 佛山市| 荔浦县| 东山县| 竹北市| 新建县| 玉溪市| 方山县| 宜阳县| 安化县| 韶山市| 勐海县| 广安市| 中山市| 东台市| 鄂托克前旗| 吉安县| 奉贤区| 共和县| 兴国县| 习水县| 冀州市| 南召县| 将乐县| 河南省| 永胜县| 敖汉旗| 二手房| 黑龙江省| 英山县| 慈利县| 利津县| 河曲县| 仲巴县| 礼泉县| 独山县| 岢岚县| 塘沽区|