使用wal的數(shù)據(jù)庫回滾的制作方法
【專利摘要】本發(fā)明涉及使用WAL的數(shù)據(jù)庫回滾。在數(shù)據(jù)庫的取證分析的領(lǐng)域中,使用預(yù)寫式日志(WAL;102)來執(zhí)行到數(shù)據(jù)庫(101)的先前狀態(tài)的數(shù)據(jù)庫回滾的方法包括:在被記錄到WAL的幀的集合中選擇表示相應(yīng)的特定頁面的特定已修正內(nèi)容的特定幀;在幀的集合中識(shí)別包含特定幀和零個(gè)或多于零個(gè)按時(shí)間先后順序在其之前的幀的幀的第一子集;從數(shù)據(jù)庫的頁面的集合提取頁面的第一子集;從幀的第一子集的相應(yīng)頁面提取頁面的第二子集;以及基于頁面的第一子集的內(nèi)容和頁面的第二子集的已修正內(nèi)容執(zhí)行數(shù)據(jù)庫到包含特定頁面的已修正內(nèi)容的先前狀態(tài)的回滾。
【專利說明】
使用WAL的數(shù)據(jù)庫回滾
技術(shù)領(lǐng)域
[0001]本文公開的本發(fā)明涉及數(shù)據(jù)庫的取證分析的領(lǐng)域,且更具體地涉及用于使用預(yù)寫 式日志執(zhí)行數(shù)據(jù)庫到數(shù)據(jù)庫的先前狀態(tài)的回滾的方法和設(shè)備。
[0002] 背景
[0003] 通常,執(zhí)行數(shù)據(jù)庫恢復(fù)的需要在數(shù)據(jù)庫系統(tǒng)出故障之后(例如在電源故障或系統(tǒng) 崩潰之后)產(chǎn)生。為了保持被存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)的完整性,數(shù)據(jù)庫系統(tǒng)必須將數(shù)據(jù)庫帶 回到在故障之前存在的最新的一致狀態(tài)。如果例如系統(tǒng)崩潰出現(xiàn)在銀行的兩個(gè)賬戶之間的 資金轉(zhuǎn)移的中間,則合理的恢復(fù)方式將是將數(shù)據(jù)庫重置回到它剛好在資金轉(zhuǎn)移被發(fā)起之前 所處于的狀態(tài),并接著然后再次重做轉(zhuǎn)移。否則,銀行可能不能夠保證例如錢不被從賬戶之 一提現(xiàn),即使錢在崩潰之前從未到達(dá)另一賬戶。
[0004] 除了上述內(nèi)容以外,執(zhí)行數(shù)據(jù)庫恢復(fù)的需要還可由于其它原因而產(chǎn)生。一個(gè)這樣 的原因是,在取證分析中,其中恢復(fù)可能已經(jīng)被自愿刪除或修正的數(shù)據(jù)的需要有時(shí)是最重 要的。當(dāng)包含數(shù)據(jù)的文件被從例如硬盤驅(qū)動(dòng)器刪除或被在例如硬盤驅(qū)動(dòng)器上修正時(shí),操作 系統(tǒng)通常只更新它的文件系統(tǒng)元數(shù)據(jù),其中例如在硬盤驅(qū)動(dòng)器上的特定文件的位置被存 儲(chǔ)。如果文件被刪除,則元數(shù)據(jù)被更新,而文件的實(shí)際數(shù)據(jù)(如被寫到硬盤驅(qū)動(dòng)器的)維持原 封不動(dòng)。因此,即使文件系統(tǒng)元數(shù)據(jù)被更新或缺失,取證分析也可使用方法(例如數(shù)據(jù)雕 刻),從而試圖找出并讀取已被刪除或修正的文件的原始數(shù)據(jù)。數(shù)據(jù)雕刻(例如諸如模式搜 索)的很多方法常常是復(fù)雜的并依賴于復(fù)雜的模型和試探法兩者。除了散布的(或分段的) 數(shù)據(jù)的不同的可能置換的數(shù)量常常很大的問題以外,方法還可能遭受結(jié)果并不總是被保證 是正確的事實(shí)。數(shù)據(jù)雕刻方法可以以將來自幾個(gè)不同的文件的幾個(gè)片段一起拼湊成認(rèn)為是 單個(gè)文件的東西結(jié)束,因而產(chǎn)生錯(cuò)誤的結(jié)果(錯(cuò)誤肯定)。如果錯(cuò)誤肯定的數(shù)量變得太大,則 取證分析的工作變得很難且結(jié)果的可信度可能快速降低。
[0005] 用于恢復(fù)數(shù)據(jù)庫中的被(無意或)有意地刪除或修正的數(shù)據(jù)的更可靠的方法可以 是使用常常由很多數(shù)據(jù)庫系統(tǒng)使用的日志記錄功能。為了能夠?qū)?shù)據(jù)庫帶回到先前狀態(tài) (即執(zhí)行數(shù)據(jù)庫回滾),數(shù)據(jù)庫系統(tǒng)可通過使用所謂的預(yù)寫式日志(WAL)來記錄在數(shù)據(jù)庫上 執(zhí)行的動(dòng)作(即:對數(shù)據(jù)庫的改變)。當(dāng)動(dòng)作在數(shù)據(jù)庫上即將發(fā)生時(shí),使用WAL的數(shù)據(jù)庫系統(tǒng) 將不直接更新數(shù)據(jù)庫。替代地,數(shù)據(jù)庫系統(tǒng)將確定動(dòng)作的結(jié)果并替代地將已經(jīng)對數(shù)據(jù)庫做 出的改變記錄到日志。在動(dòng)作被執(zhí)行的時(shí)間期間系統(tǒng)出故障的情況下,數(shù)據(jù)庫將已經(jīng)處于 一致狀態(tài),且數(shù)據(jù)庫系統(tǒng)可容易檢查WAL以查看它在系統(tǒng)出現(xiàn)故障之前達(dá)到什么程度,并接 著做出關(guān)于如何從那里繼續(xù)進(jìn)行的決定。為了使WAL不增長得太大,在WAL中的所記錄的變 化可在定期時(shí)機(jī)(例如在每個(gè)動(dòng)作被成功地完成之后,或比因此如果想要的稀疏得多)或當(dāng) 被手動(dòng)觸發(fā)時(shí)被轉(zhuǎn)移回到數(shù)據(jù)庫。被稱為檢查點(diǎn)操作的這樣的操作通常后面是WAL被重置, 使得對隨后的檢查點(diǎn)的新改變從WAL的開頭起被再次記錄。
[0006] 在US 8,683,262中公開了使用WAL以從系統(tǒng)故障恢復(fù)數(shù)據(jù)庫的方法。在那里,首先 過濾WAL,使得不相關(guān)的動(dòng)作(例如以后被其它隨后的動(dòng)作變得無效的動(dòng)作)被忽略,以便減 小計(jì)算復(fù)雜度。使用經(jīng)過濾的WAL,通過重放在經(jīng)過濾的WAL中的剩余動(dòng)作而將數(shù)據(jù)庫從恢 復(fù)狀態(tài)轉(zhuǎn)變到正常操作狀態(tài)。因?yàn)樗_的方法的主要著眼點(diǎn)是在故障之后恢復(fù)數(shù)據(jù)庫, 所以可能產(chǎn)生其中該方法對取證分析有很少用處或沒有用處的情況。
[0007]按照上文,因此需要用于使用WAL來執(zhí)行數(shù)據(jù)庫到數(shù)據(jù)庫的先前狀態(tài)的回滾的改 進(jìn)的、更靈活的、更可靠的和更適合用于取證分析的方法。
[0008] 概述
[0009] 本發(fā)明的目的因此是至少部分地滿足上面規(guī)定的要求。本發(fā)明的這個(gè)和其它目的 至少部分地被如在獨(dú)立權(quán)利要求中限定的本發(fā)明滿足,而優(yōu)選的實(shí)施方式被在從屬權(quán)利要 求中闡述。本發(fā)明基于預(yù)寫式日志可包含允許取證分析提取關(guān)于先前數(shù)據(jù)庫狀態(tài)的信息的 信息的見識(shí),其中先前狀態(tài)的時(shí)間可相應(yīng)于在WAL中的任何檢查點(diǎn)(多個(gè)),以及其中可保證 在一些情況中的所提取的先前狀態(tài)是真實(shí)的先前狀態(tài)(因此消除獲得錯(cuò)誤肯定的風(fēng)險(xiǎn))。
[0010] 在本發(fā)明的第一方面內(nèi),提供了用于將數(shù)據(jù)庫回滾到數(shù)據(jù)庫的先前狀態(tài)的計(jì)算機(jī) 實(shí)現(xiàn)的方法。數(shù)據(jù)庫包含頁面的第一集合,且數(shù)據(jù)庫與預(yù)寫式日志(WAL)相關(guān),表示頁面的 第二集合的已修正內(nèi)容的幀的集合可被記錄到該預(yù)寫式日志(WAL)內(nèi)。如在本文使用的,數(shù) 據(jù)庫"頁面"表示當(dāng)存儲(chǔ)數(shù)據(jù)庫的內(nèi)容時(shí)由數(shù)據(jù)庫系統(tǒng)使用的數(shù)據(jù)的單位。如果被存儲(chǔ)在數(shù) 據(jù)庫中的數(shù)據(jù)的大小超過單個(gè)頁面的大小,則數(shù)據(jù)庫數(shù)據(jù)將被分布在多個(gè)頁面上并被存儲(chǔ) 在多個(gè)頁面中,其中每個(gè)頁面優(yōu)選地具有固定大小。當(dāng)做出對數(shù)據(jù)庫的改變時(shí),例如當(dāng)信息 被添加、更新或移除時(shí),數(shù)據(jù)庫系統(tǒng)可選擇只將受影響的頁面存儲(chǔ)在WAL中,其中頁面的已 更新或已修正內(nèi)容將被封裝在"幀"中。幀可包含頁面本身的已更新內(nèi)容連同當(dāng)閱讀日志 (例如諸如關(guān)于在數(shù)據(jù)庫中的什么頁面被更新的信息)時(shí)和當(dāng)更新發(fā)生時(shí)可能有用的其它 屬性。在WAL中,在幀的集合中的每個(gè)幀因此表示相應(yīng)的頁面的已修正內(nèi)容,且WAL還包含允 許幀被按時(shí)間順序排序的信息,使得WAL的讀者可計(jì)算出幀被以什么順序記錄。
[0011]數(shù)據(jù)庫還可與指示至少一個(gè)頁面的已修正內(nèi)容在至少一個(gè)檢查點(diǎn)的集合處被從 WAL轉(zhuǎn)移到數(shù)據(jù)庫的檢查點(diǎn)信息相關(guān),其中每個(gè)檢查點(diǎn)相應(yīng)于一個(gè)時(shí)間點(diǎn),以及其中在幀的 集合中的每個(gè)幀相應(yīng)于所述檢查點(diǎn)之一。如在本文使用的,"檢查點(diǎn)"可由數(shù)據(jù)庫系統(tǒng)本身 發(fā)起,例如作為對WAL增長大于預(yù)定值的響應(yīng)或例如作為對某個(gè)時(shí)間間隔的過去的響應(yīng)。檢 查點(diǎn)還可由給出某個(gè)命令的用戶或由計(jì)算機(jī)程序(或類似地,即訪問數(shù)據(jù)庫)發(fā)起。通常,檢 查點(diǎn)涉及通過將在WAL中的幀內(nèi)找到的頁面的最近(在時(shí)間上)修正的內(nèi)容從WAL轉(zhuǎn)移到數(shù) 據(jù)庫并其后執(zhí)行WAL的"重置"使得WAL可由隨后的更新來重寫以便節(jié)省空間來更新數(shù)據(jù)庫。 檢查點(diǎn)還可涉及只轉(zhuǎn)移一些頁面的已修正內(nèi)容,而不執(zhí)行WAL的這樣的隨后重置。后者的示 例可涉及這樣的情況:其中數(shù)據(jù)庫的用戶例如有對在WAL中的一個(gè)或多個(gè)幀的鎖定。在這樣 的情況下,只有一些幀可被立刻轉(zhuǎn)移到數(shù)據(jù)庫,而其它幀將在以后的時(shí)間(如果有必要)被 轉(zhuǎn)移。如果數(shù)據(jù)庫剛剛被創(chuàng)建或如果檢查點(diǎn)操作還沒有發(fā)生,則數(shù)據(jù)庫的創(chuàng)建可視為檢查 點(diǎn)。為了確保在檢查點(diǎn)操作期間只有頁面的最近修正被轉(zhuǎn)移到數(shù)據(jù)庫,在WAL中的每個(gè)幀通 常相應(yīng)于某個(gè)檢查點(diǎn),且關(guān)于某個(gè)幀相應(yīng)于哪個(gè)檢查點(diǎn)的信息通常被包括在幀本身中。通 常,只有相應(yīng)于最新的檢查點(diǎn)的幀將被考慮用于在新的檢查點(diǎn)操作期間轉(zhuǎn)移。
[0012]在第一方面中,該方法可包括選擇在被記錄到WAL的幀的集合中的特定幀的步驟。 特定幀表示相應(yīng)的特定頁面的已修正內(nèi)容并相應(yīng)于按時(shí)間先后順序在檢查點(diǎn)信息中指示 的至少一個(gè)檢查點(diǎn)的集合中的零個(gè)或多于零個(gè)檢查點(diǎn)之前的檢查點(diǎn)。如果特定幀在零個(gè)檢 查點(diǎn)之前,則在最新的檢查點(diǎn)操作之后特定幀被記錄到WAL,且特定頁面的已修正內(nèi)容還沒 有被轉(zhuǎn)移到數(shù)據(jù)庫。如果特定幀在一個(gè)或多個(gè)檢查點(diǎn)之前,則在最新的檢查點(diǎn)之前幀被記 錄到WAL,且特定頁面的已修正內(nèi)容可能在先前檢查點(diǎn)操作期間已經(jīng)被轉(zhuǎn)移到數(shù)據(jù)庫。
[0013] 該方法還可包括識(shí)別在幀的集合中的幀的第一子集使得第一子集包含特定幀和 零個(gè)或多于零個(gè)按時(shí)間先后順序在其前面的幀的步驟。如果該方法是恢復(fù)在某個(gè)特定的時(shí) 間(此時(shí)特定幀被記錄)數(shù)據(jù)庫(部分地)看起來像什么,則關(guān)于什么比特定的時(shí)間更早發(fā)生 的認(rèn)識(shí)是需要的。這被反映,因?yàn)橹挥刑囟◣驮诟绲臅r(shí)間被記錄到WAL的幀被包括在幀 的第一子集中。如果特定幀按時(shí)間先后順序在最新的檢查點(diǎn)后面,則幀的第一子集優(yōu)選地 被識(shí)別,使得它包含在特定幀前面的所述幀的集合中的幀的盡可能多的相應(yīng)頁面。如果特 定幀在最新的檢查點(diǎn)前面,則這還是真實(shí)的,但優(yōu)選地有第一子集包含只相應(yīng)于同一檢查 點(diǎn)的幀的附加的條件。這將進(jìn)一步被結(jié)合附圖2來論述。
[0014] 該方法還可包括從頁面的第一集合提取頁面的第一子集的步驟。頁面的這個(gè)子集 可包含在頁面的第一集合中找到的頁面中的全部、一些或沒有一個(gè)頁面,這取決于例如特 定的時(shí)間和它如何與在檢查點(diǎn)信息中指示的最新的檢查點(diǎn)有關(guān)。例如,如果特定頁面的已 修正內(nèi)容比在頁面的第一集合(在數(shù)據(jù)庫中找到的)中的相應(yīng)頁面的內(nèi)容老,則到包含特定 頁面的已修正內(nèi)容的先前狀態(tài)的回滾可能不要求在頁面的第一集合中的特定的相應(yīng)頁面 被包括在所提取的頁面的第一子集中。
[0015] 該方法可包括從幀的第一子集的相應(yīng)頁面提取頁面的第二子集的步驟,且該方法 還可包括執(zhí)行數(shù)據(jù)庫到包含特定頁面的特定已修正內(nèi)容的先前狀態(tài)的回滾的步驟?;貪L基 于頁面的第一子集的內(nèi)容和頁面的第二子集的已修正內(nèi)容。
[0016] 通過適當(dāng)?shù)剡x擇幀和頁面的相應(yīng)子集并通過考慮到相應(yīng)的幀(和頁面內(nèi)容)被記 錄到日志時(shí)的時(shí)間并通過將這些時(shí)間與當(dāng)數(shù)據(jù)庫被最后更新(即當(dāng)檢查點(diǎn)操作被最后執(zhí)行 時(shí))的時(shí)間進(jìn)行比較,可在回滾期間創(chuàng)建數(shù)據(jù)庫的先前狀態(tài)。這還將被結(jié)合圖2進(jìn)一步論述。
[0017] 如在本文使用的,幀的集合可包含同一頁面的很多已修正內(nèi)容。作為示例,如果 WAL包含表示第一頁面的已修正內(nèi)容的32個(gè)幀,則這些32個(gè)幀仍然被認(rèn)為表示同一第一頁 面。
[0018] 在一個(gè)示例實(shí)施方式中,特定幀可相應(yīng)于按時(shí)間先后順序在至少一個(gè)檢查點(diǎn)的集 合中的一個(gè)檢查點(diǎn)之前的檢查點(diǎn)。這樣的幀在最新的檢查點(diǎn)之前但在緊接著在最新的檢查 點(diǎn)之前的檢查點(diǎn)之后被記錄到WAL。如果在WAL中有相應(yīng)于與特定幀相同的檢查點(diǎn)并按時(shí)間 先后順序在特定幀之后并表示與特定頁面相同的相應(yīng)頁面的已修正內(nèi)容的幀,則特定頁面 的內(nèi)容可以比當(dāng)前在數(shù)據(jù)庫中找到的相應(yīng)頁面的內(nèi)容老。提取在最新的檢查點(diǎn)之前的信息 的可能性是有利的,因?yàn)榭稍O(shè)想在數(shù)據(jù)庫上的所執(zhí)行的動(dòng)作(包括在最新的檢查點(diǎn)之前的 動(dòng)作)的延長的時(shí)間線。
[0019] 在一個(gè)示例實(shí)施方式中,該方法還可包括在幀的集合中識(shí)別包含按時(shí)間先后順序 在特定幀后面的零個(gè)或多于零個(gè)幀的幀的第二子集的步驟,其中幀的第二子集相應(yīng)于頁面 的第三子集。該方法可包括確定頁面的第三子集包含不是頁面的第二子集的部分的至少一 個(gè)頁面并指示先前狀態(tài)不是真實(shí)的先前狀態(tài)的步驟。從取證觀點(diǎn)看,這樣的實(shí)施方式是有 利的,因?yàn)榍懊娴男畔⒖杀恢辽俨糠值靥崛?,以及因?yàn)槿∽C分析可獲知所提取的狀態(tài)可以 只部分地與數(shù)據(jù)庫的先前狀態(tài)相同。在另一示例實(shí)施方式中,該方法可包括確定頁面的第 三子集是頁面的第二子集的子集并指示先前狀態(tài)是真實(shí)的先前狀態(tài)的步驟。取證分析可受 益于獲知關(guān)于所提取的信息與數(shù)據(jù)庫的先前狀態(tài)相同。
[0020] 在一個(gè)示例實(shí)施方式中,特定幀可相應(yīng)于按時(shí)間先后順序在至少一個(gè)檢查點(diǎn)的集 合中的多于一個(gè)檢查點(diǎn)之前的檢查點(diǎn)。這樣的幀在最新的檢查點(diǎn)和緊接著在最新的檢查點(diǎn) 之前的檢查點(diǎn)兩者之前被記錄到WAL。如果選擇這樣的特定幀,則可提取關(guān)于早幾個(gè)檢查點(diǎn) 對數(shù)據(jù)庫做出的變化的信息,且數(shù)據(jù)庫如何已經(jīng)被修正的較長時(shí)間線可因此被構(gòu)造并從取 證觀點(diǎn)來看是有益的。
[0021] 在另一示例實(shí)施方式中,該方法還可包括確定頁面的第一集合包含不是頁面的第 二子集的部分的至少一個(gè)頁面并指示先前狀態(tài)不是真實(shí)的先前狀態(tài)的步驟。即使真實(shí)的先 前數(shù)據(jù)庫狀態(tài)可以不被創(chuàng)建,至少一些數(shù)據(jù)的取回也可以是有益的,且如果所述數(shù)據(jù)被標(biāo) 記為不是真實(shí)的先前狀態(tài),則甚至更是有利的。在另一示例實(shí)施方式中,該方法可包括以下 步驟:確定頁面的第一集合是頁面的第二子集的子集并指示先前狀態(tài)是真實(shí)的先前狀態(tài)。
[0022] 在本文中,"真實(shí)的先前狀態(tài)"意指(重新)創(chuàng)建的狀態(tài)與數(shù)據(jù)庫在當(dāng)特定幀被記錄 到WAL時(shí)的特定時(shí)間所處于的狀態(tài)相同,以及在先前特定時(shí)間從數(shù)據(jù)庫提取的信息將已經(jīng) 與使用本發(fā)明的第一方面的方法提取的信息相同。這包括特定頁面的內(nèi)容和數(shù)據(jù)庫的所有 其它頁面的內(nèi)容兩者都與它們在特定時(shí)間的內(nèi)容相同。
[0023]在一個(gè)示例實(shí)施方式中,數(shù)據(jù)庫可以是SQLite數(shù)據(jù)庫或其衍生型。SQLite常常用 作在例如移動(dòng)電話或平板計(jì)算機(jī)中的應(yīng)用的數(shù)據(jù)庫。因此,本發(fā)明可用于這樣的設(shè)備的取 證分析。
[0024] 在一個(gè)示例實(shí)施方式中,可在WAL、共用的存儲(chǔ)器文件中或在這兩者的組合中找到 檢查點(diǎn)信息。
[0025] 在一個(gè)示例實(shí)施方式中,允許幀按時(shí)間先后順序被排序的信息可包括幀被以其寫 在WAL中的順序、salt值、計(jì)數(shù)索引或其組合。
[0026] 在本發(fā)明的第二方面中,提供了計(jì)算機(jī)程序產(chǎn)品。計(jì)算機(jī)程序產(chǎn)品包括具有當(dāng)由 具有處理能力的設(shè)備執(zhí)行時(shí)適合于實(shí)施根據(jù)本發(fā)明的第一方面的方法的指令的計(jì)算機(jī)可 讀存儲(chǔ)介質(zhì)。
[0027] 在本發(fā)明的第三方面中,提供了被配置成執(zhí)行數(shù)據(jù)庫到數(shù)據(jù)庫的先前狀態(tài)的回滾 的設(shè)備。數(shù)據(jù)庫包括頁面的第一集合,且數(shù)據(jù)庫與WAL相關(guān),表示頁面的第二集合的已修正 內(nèi)容的幀的集合已經(jīng)被記錄到該WAL內(nèi),其中每個(gè)幀表示相應(yīng)頁面的已修正內(nèi)容。數(shù)據(jù)庫還 與指示在至少一個(gè)檢查點(diǎn)的集合處至少一個(gè)頁面的已修正內(nèi)容被從WAL轉(zhuǎn)移到數(shù)據(jù)庫的檢 查點(diǎn)信息相關(guān),其中每個(gè)檢查點(diǎn)相應(yīng)于時(shí)間點(diǎn),以及其中在幀的集合中的每個(gè)幀相應(yīng)于所 述至少一個(gè)檢查點(diǎn)之一。WAL還包括允許幀被按時(shí)間先后順序排序的信息,且設(shè)備適合于訪 問數(shù)據(jù)庫和與其相關(guān)的WAL和檢查點(diǎn)信息??赏ㄟ^網(wǎng)絡(luò)、總線或任何其它適當(dāng)?shù)耐ㄐ沛溌诽?供這樣的訪問。設(shè)備可包括存儲(chǔ)器和處理器,其中存儲(chǔ)器可用于臨時(shí)或永久地存儲(chǔ)WAL和檢 查點(diǎn)信息的至少一部分。處理器可被配置成當(dāng)請求時(shí)選擇在幀的集合中的特定幀,其中特 定幀表示相應(yīng)的特定頁面的特定已修正內(nèi)容,以及其中特定幀相應(yīng)于按時(shí)間先后順序在至 少一個(gè)檢查點(diǎn)的集合中的零個(gè)或多于零個(gè)檢查點(diǎn)之前的檢查點(diǎn)。處理器還可被配置成在幀 的集合中識(shí)別包含特定幀和零個(gè)或多于零個(gè)按時(shí)間先后順序在其前面的幀的幀的第一子 集。處理器可被配置成從頁面的第一集合提取頁面的第一子集,且處理器還可從幀的第一 子集的相應(yīng)頁面提取頁面的第二子集。處理器可被配置成基于頁面的第一子集的內(nèi)容和頁 面的第二子集的已修正內(nèi)容來執(zhí)行數(shù)據(jù)庫到包含特定頁面的特定已修正內(nèi)容的先前狀態(tài) 的回滾。
[0028] 第二和第三方面可相應(yīng)地體現(xiàn)到第一方面,且在第一方面的定義中提到的優(yōu)點(diǎn)同 樣可適用于第二和第三方面。注意,本發(fā)明涉及(即使被在相互不同的權(quán)利要求中列舉的) 特征的所有組合。
[0029] 附圖的簡要說明
[0030] 現(xiàn)在將參考附圖來更充分地描述本發(fā)明,在附圖中:
[0031 ]圖la是包括頁面的集合的數(shù)據(jù)庫的示意圖;
[0032]圖lb是與數(shù)據(jù)庫相關(guān)的預(yù)寫式日志(WAL)和檢查點(diǎn)信息的示意圖;
[0033]圖2是示例性數(shù)據(jù)庫、WAL和檢查點(diǎn)信息的示意圖;
[0034] 圖3是根據(jù)示例實(shí)施方式的執(zhí)行數(shù)據(jù)庫到數(shù)據(jù)庫的先前狀態(tài)的回滾的方法的流程 圖;以及
[0035] 圖4是根據(jù)示例實(shí)施方式的用于執(zhí)行數(shù)據(jù)庫到數(shù)據(jù)庫的先前狀態(tài)的回滾的設(shè)備的 框圖。
[0036] 除非明確地說明與之相反,否則附圖只示出說明示例實(shí)施方式所必需的這樣的元 件,而其它元件為了清楚起見可被省略或僅僅被建議。
[0037] 示例實(shí)施方式的詳細(xì)描述
[0038]在圖la中示出數(shù)據(jù)庫101的示意圖。數(shù)據(jù)庫的信息被存儲(chǔ)為頁面110a-110n的集合 D={1,2,3,...,N},其中N多1是相應(yīng)于當(dāng)前在該集合中的頁面的數(shù)量的整數(shù)。如果例如更 多的信息被添加到數(shù)據(jù)庫101,則所需的頁面110的數(shù)量可增加。同樣,如果從數(shù)據(jù)庫101移 除信息或如果發(fā)出"清空(vacuum)"命令,則所需的頁面110的數(shù)量可減少。一般而言,數(shù)據(jù) 庫101的頁面110的數(shù)量是動(dòng)態(tài)量,且由例如數(shù)據(jù)庫系統(tǒng)負(fù)責(zé)記錄什么信息將被在什么頁面 上找到。
[0039]為了反轉(zhuǎn)在數(shù)據(jù)庫101上執(zhí)行的動(dòng)作,當(dāng)新動(dòng)作被執(zhí)行時(shí),使用預(yù)寫式日志(WAL) 的數(shù)據(jù)庫系統(tǒng)將不直接更新數(shù)據(jù)庫。替代地,動(dòng)作的結(jié)果將被記錄在WAL中,且這樣的WAL 102的示意圖被顯示在圖lb中。當(dāng)動(dòng)作被在數(shù)據(jù)庫101上執(zhí)行時(shí),數(shù)據(jù)庫系統(tǒng)將決定數(shù)據(jù)庫 101的哪些頁面110被動(dòng)作影響。如果頁面被影響,則數(shù)據(jù)庫系統(tǒng)將把那個(gè)頁面的已修正內(nèi) 容存儲(chǔ)在幀中并將那個(gè)幀記錄到WAL。圖lb所示的WAL 102包括表示頁面130的集合D'= {P^,,. . 的已修正內(nèi)容的這樣記錄的幀120的集合SziFh. ..},其中每個(gè)幀F(xiàn)j(其中j彡 l)120j表示相應(yīng)頁面P、(其中以及L彡N)130j的已修正內(nèi)容。
[0040]如果做出對在數(shù)據(jù)庫101的某個(gè)頁面上找到的信息的查詢,則數(shù)據(jù)庫系統(tǒng)可以檢 查WAL 102以查看某個(gè)頁面的最近(修正)版本是否被在那里找到,而不是讀取如在當(dāng)前數(shù) 據(jù)庫101中找到的某個(gè)頁面的內(nèi)容。如果是這種情況,則數(shù)據(jù)庫系統(tǒng)可替代地使用某個(gè)頁面 的這個(gè)已修正版本。如果WAL 102不包含某個(gè)頁面的最近版本,則在數(shù)據(jù)庫101本身中找到 的頁面被替代地使用。通過這么做,查詢的結(jié)果將表示數(shù)據(jù)庫的最近狀態(tài),即使實(shí)際數(shù)據(jù)庫 本身未被更新。如果引起數(shù)據(jù)庫101的最近更新的動(dòng)作將被反轉(zhuǎn),則數(shù)據(jù)庫系統(tǒng)可忽略在 WAL 102中找到的頁面的最近(已修正)版本,并替代地使用在WAL 102中找到的同一頁面的 另一版本或在數(shù)據(jù)庫101本身中的頁面。
[0041]如果在數(shù)據(jù)庫上執(zhí)行越來越多的動(dòng)作,則當(dāng)越來越多的幀(表示相應(yīng)頁面的已修 正內(nèi)容)被記錄到WAL 102時(shí),WAL 102的大小將增長。為了防止WAL 102增長得太大,可執(zhí)行 被稱為"檢查點(diǎn)"操作的操作。在檢查點(diǎn)操作期間,在WAL 102中找到的頁面的已修正內(nèi)容可 被轉(zhuǎn)移到數(shù)據(jù)庫,且引起的動(dòng)作可以變成永久性的。如果在檢查點(diǎn)操作期間,在WAL 102中 找到頁面的最近(修正)版本,則那個(gè)頁面的已修正內(nèi)容將取代當(dāng)前在數(shù)據(jù)庫中找到的同一 頁面的內(nèi)容。當(dāng)完成檢查點(diǎn)操作時(shí),可"重置" WAL 102,使得新幀可被添加到WAL 102的開始 部分,重寫在檢查點(diǎn)操作發(fā)生之前記錄的幀(如果有必要的話)。在數(shù)據(jù)庫術(shù)語中,在WAL 102中的所記錄的幀相應(yīng)于在事務(wù)期間執(zhí)行的動(dòng)作,且在WAL 102中的幀可被標(biāo)記為相應(yīng)于 "提交(commit)"操作,其中屬于同一事務(wù)的動(dòng)作被提交。WAL 102可以且常常確實(shí)包含相應(yīng) 于多個(gè)事務(wù)的幀。
[0042]為了使數(shù)據(jù)庫系統(tǒng)知道哪些幀在例如最新的檢查點(diǎn)操作之后被記錄,數(shù)據(jù)庫可與 指示在檢查點(diǎn)的集合C={C1,. . .,}處至少一個(gè)頁面的已修正內(nèi)容被從WAL 102轉(zhuǎn)移到數(shù)據(jù) 庫101的檢查點(diǎn)信息相關(guān),其中每個(gè)檢查點(diǎn)ck( k多1)相應(yīng)于時(shí)間點(diǎn)。通過使每個(gè)幀與在集合 C中的相應(yīng)的檢查點(diǎn)相關(guān)(即每個(gè)幀F(xiàn)j與檢查點(diǎn)山相關(guān),其中djec),例如數(shù)據(jù)庫系統(tǒng)于是可 以可能弄清楚在哪個(gè)檢查點(diǎn)之后或在哪對檢查點(diǎn)之間,特定的幀被記錄,以及相應(yīng)頁面的 已修正內(nèi)容與例如當(dāng)前在數(shù)據(jù)庫101中的同一頁面的內(nèi)容比較是多么最近。每個(gè)檢查點(diǎn)可 被給予相應(yīng)的唯一 ID,且可在檢查點(diǎn)操作和下一檢查點(diǎn)操作之間的時(shí)間間隔期間在被記錄 到WAL 102的幀中指示唯一ID。當(dāng)執(zhí)行新的檢查點(diǎn)操作時(shí),改變唯一ID,且每個(gè)幀可因此與 某個(gè)時(shí)間間隔相關(guān)聯(lián)。通過考慮到幀以其被記錄到WAL的順序,與同一間隔相關(guān)聯(lián)的幀可以 被單獨(dú)地按時(shí)間先后順序進(jìn)行排序。記錄時(shí)間先后順序的另一方式可包括將相應(yīng)于當(dāng)檢查 點(diǎn)操作被執(zhí)行時(shí)的時(shí)間的時(shí)間戳給予每個(gè)檢查點(diǎn),以及通過將相應(yīng)于當(dāng)幀被記錄到WAL 102時(shí)的時(shí)間的時(shí)間戳給予每個(gè)幀。通過比較時(shí)間戳,可建立時(shí)間先后順序。
[0043]發(fā)明人已經(jīng)認(rèn)識(shí)到,即使WAL 102可以已經(jīng)被重置,在比最新的檢查點(diǎn)操作更早的 檢查點(diǎn)操作之后記錄的幀也仍然可被留在WAL 102中,以及關(guān)于數(shù)據(jù)庫的先前的狀態(tài)的信 息可因此被提取。
[0044] 為了說明可如何執(zhí)行數(shù)據(jù)庫到數(shù)據(jù)庫的先前狀態(tài)的回滾的計(jì)算機(jī)實(shí)現(xiàn)的方法,可 考慮下面的示例(參考圖2)。具有總共N=4個(gè)頁面的數(shù)據(jù)庫最近經(jīng)歷下面的操作:
[0045] 1)在檢查點(diǎn)C3處,完成檢查點(diǎn)操作,更新數(shù)據(jù)庫并重置WAL。
[0046] 2)頁面1、2、1、3、3、4、1、4、3、3、2、4、1、2、3和1被更新(以給定的時(shí)間先后順序)且 相應(yīng)頁面的已修正內(nèi)容被記錄到WAL。
[0047] 3)在時(shí)間上在C3之后的檢查點(diǎn)C2處,完成另一檢查點(diǎn)操作,更新數(shù)據(jù)庫并重置WAL。
[0048] 4)頁面4、1、2、1、2、1、1、3、3、1和2被更新(以給定的時(shí)間先后順序)且相應(yīng)頁面的 已修正內(nèi)容被記錄到WAL。
[0049] 5)在時(shí)間上在C2之后的檢查點(diǎn)ci處,完成最終檢查點(diǎn)操作,更新數(shù)據(jù)庫并重置WAL。
[0050] 6)頁面2、1、1和3被更新(以給定的時(shí)間先后順序)且相應(yīng)頁面的已修正內(nèi)容被記 錄到WAL。
[0051] 在已經(jīng)經(jīng)歷上面列出的所有操作之后,在圖2中示出數(shù)據(jù)庫101和WAL 102的當(dāng)前 狀態(tài)。數(shù)據(jù)庫101包括頁面的第一集合D = {1,2,3,4},且WAL 102包括所記錄的幀的集合S = {FhFh . . .,F(xiàn)16},其中幀代表相應(yīng)頁面的第二集合IV = {2,1,1,3,2,1,1,3,3,1,2,4,1,2, 3,1}的已修正內(nèi)容。因?yàn)榈诙僮魃婕靶拚偣?6個(gè)頁面的內(nèi)容,所以表示這些頁面的已 修正內(nèi)容的一些幀仍然被留在WAL 102中。這是因?yàn)闆]有隨后的操作涉及更新總共多于16 個(gè)頁面,這意味著16個(gè)頁面中的一些沒有被這樣的隨后操作重寫。因?yàn)榈谒牟僮魃婕靶拚?總共11個(gè)頁面的內(nèi)容,所以一些相應(yīng)的幀也仍然存在于WAL 102中,因?yàn)榈诹僮魃婕靶拚?僅僅4個(gè)頁面的內(nèi)容。在最新的檢查點(diǎn)操作期間,數(shù)據(jù)庫101被更新,使得數(shù)據(jù)庫的第一頁面 1 l〇a的內(nèi)容相應(yīng)于在WAL 102中的幀F(xiàn)1()中找到的頁面的已修正內(nèi)容(也就是說,F(xiàn)1()41)。此 外,第二頁面1 l〇b的內(nèi)容相應(yīng)于在幀F(xiàn)n中找到的頁面的已修正內(nèi)容(Fn-2),以及第三頁 面ll〇c的內(nèi)容相應(yīng)于在幀F(xiàn)9中找到的頁面的已修正內(nèi)容(F 9-3)。數(shù)據(jù)庫101的第四頁面 ll〇d的內(nèi)容未被在WAL102的幀中找到,但如上所述,第四頁面110d在最新的檢查點(diǎn)操作期 間被更新,盡管相應(yīng)的幀在隨后的更新期間(例如在第六操作期間)自那以來已經(jīng)被重寫。 [0052]如在附圖中所示的,在WAL 102中的每個(gè)幀相應(yīng)于在檢查點(diǎn)的集合C={C1,C2,C3} 中的檢查點(diǎn),并且通過考慮相應(yīng)于同一檢查點(diǎn)的幀以其被記錄在WAL 102中的順序,可按時(shí) 間先后順序?qū)判?。每個(gè)幀可包括例如相應(yīng)于其相應(yīng)的檢查點(diǎn)的索引,且數(shù)據(jù)庫101本身 可包括對所最新執(zhí)行的檢查點(diǎn)操作的引用(例如SALT值),以便使數(shù)據(jù)庫系統(tǒng)確定在WAL 102中的哪些幀是"有效的"或"活躍的"(也就是說,此刻包含比當(dāng)前被存儲(chǔ)在數(shù)據(jù)庫101中 的頁面的已修正內(nèi)容更近的頁面的已修正內(nèi)容的幀,即:在WAL 102中的幀F(xiàn)^ljF4)。
[0053]為了提取關(guān)于數(shù)據(jù)庫101的先前狀態(tài)的信息,根據(jù)本發(fā)明的示例實(shí)施方式的方法 300(如由圖3中的流程圖所示的)可由首先選擇特定幀F(xiàn)m(S301)組成。在當(dāng)前示例中,假設(shè) 選擇特定幀,使得M=10且Fm=F 1q,以及特定幀相應(yīng)于按時(shí)間先后順序在一個(gè)檢查點(diǎn)C1ec 之前的檢查點(diǎn)c2。接著,識(shí)別第一子集^ G S(S302),使得Sf包含特定幀F(xiàn)m和零個(gè)或多于零 個(gè)按時(shí)間順序在其前面的幀。在示例中,選擇Sf,使得&=作5力^1()}。從頁面的第一集合0 中提取第一子集〇1= {4} (S303),且從幀的第一子集&的相應(yīng)頁面提取頁面的第二子集D'f ={1,2,3}(其中F5-2、F9-3以及F1Q-1)(S304)。基于在Di中的頁面的內(nèi)容和在D、中的頁 面的已修正內(nèi)容,可執(zhí)行數(shù)據(jù)庫到包含特定頁面P 1()(由特定幀F(xiàn)1()表示)的特定已修正內(nèi)容 的先前狀態(tài)的回滾(S305)。在D、中找到在先前狀態(tài)下的數(shù)據(jù)庫101的前三個(gè)頁面110a-1 l〇c的內(nèi)容,且在0:中找到在先前狀態(tài)下的數(shù)據(jù)庫101的第四頁面110d的內(nèi)容。
[0054] 在上面的示例中,選擇特定幀,使得它的相應(yīng)檢查點(diǎn)恰好在檢查點(diǎn)的集合C中的另 一個(gè)檢查點(diǎn)之前。根據(jù)一個(gè)示例實(shí)施方式,可有意地選擇特征幀,使得它的相應(yīng)檢查點(diǎn)恰好 在另一個(gè)檢查點(diǎn)之前。使用WAL 102的數(shù)據(jù)庫回滾的常規(guī)方法將只提取在時(shí)間上等于最新 的檢查點(diǎn)或在最新的檢查點(diǎn)之后的狀態(tài),但是根據(jù)本發(fā)明的方法將因此能夠提取關(guān)于包含 Pm的已修正內(nèi)容的先前數(shù)據(jù)庫狀態(tài)(在最新執(zhí)行的檢查點(diǎn)操作之前的狀態(tài))的信息。
[0055] 在另一示例實(shí)施方式中,除了選擇Fm使得它的相應(yīng)檢查點(diǎn)恰好在C中的另一個(gè)檢 查點(diǎn)之前以外,該方法還可包括以下步驟:其中在幀的集合S中識(shí)別幀的第二子集S 1 = {Fn},使得Si包含在特定幀F(xiàn)1Q后面的零個(gè)或多于零個(gè)幀,且其中應(yīng)于頁面的第三子集 D、= {2}。該方法可接著確定頁面的第三子集D、是頁面的第二子集D、的子集,并指示由該 方法提取的先前狀態(tài)是"真實(shí)的"先前狀態(tài)。當(dāng)特定幀F(xiàn) 1Q被選擇時(shí),在幀F(xiàn)n中找到的第2頁 面的已修正內(nèi)容必須被忽略,并用它在導(dǎo)致幀F(xiàn)n被記錄的動(dòng)作被執(zhí)行之前的內(nèi)容來代替。 在幀^中(即在D、中)找到(第2頁面的)想要的已修正內(nèi)容,且先前狀態(tài)因此在下面的意義 上是真實(shí)狀態(tài):先前狀態(tài)的頁面的所有內(nèi)容與它們在當(dāng)F 1Q剛剛被記錄到WAL 102時(shí)的時(shí)間 的所有內(nèi)容相同。
[0056] 在另一示例實(shí)施方式中,該方法可替代地識(shí)別頁面的另外的第三子集D、并確定 這個(gè)子集不是頁面的第二子集D/ f的子集。這可通過確定D/ i包含不是頁面的第二子集的部 分(參)的至少一個(gè)頁面PaGD' i來實(shí)現(xiàn)。該方法可接著指示所提取的先前狀態(tài)不是 真實(shí)的先前狀態(tài)。作為例證,如果替代地選擇較早的示例的特定幀,使得M=7且Fm=F7,則可 能的另一選擇將是3£=^5^7}、01={4}且0/£={1,2}(其中? 541且?742)。如果31=作8, Fio,F(xiàn)n}(使得D' 1 = {1,2,3}),則顯然在D' f中沒有找到在D' 1中的第3頁面(從F8-3)。因此, 導(dǎo)致幀F(xiàn)8被記錄的動(dòng)作不能被反轉(zhuǎn),因?yàn)殛P(guān)于第3頁面的已修正內(nèi)容的確切認(rèn)識(shí)不可得到。 然而應(yīng)注意,不是真實(shí)的先前狀態(tài)的先前狀態(tài)的提取可能仍然是有價(jià)值的,因?yàn)樗崛〉?先前狀態(tài)的至少一些頁面(例如第1、2和4頁面)的內(nèi)容仍然與在當(dāng)^剛剛被記錄時(shí)的時(shí)間 的內(nèi)容相同。
[0057] 在另一示例實(shí)施方式中,可選擇特定幀,使得例如M= 15且Fm = Fi5。如果情況是這 樣,則相應(yīng)的檢查點(diǎn)在C中的多于一個(gè)檢查點(diǎn)之前,因?yàn)镕15在檢查點(diǎn)(^和(3 2兩者之前。子集 的可能選擇將是Sf = {F12,F(xiàn)13,F(xiàn)14,F(xiàn)15}、=參以及D' f = {1,2,3,4}(其中F13- 1、F14-2, F15^3且F12-4),且數(shù)據(jù)庫到包含P15的先前狀態(tài)的回滾可被執(zhí)行,其中頁面的內(nèi)容都被在 D、中找到。
[0058]在一個(gè)實(shí)施方式中,該方法還可包括確定頁面的第一集合D是頁面的第二子集D、 的子集(P g )的步驟,并指示由該方法提取的先前狀態(tài)是真實(shí)的先前狀態(tài)。因?yàn)槿缭?先前示例實(shí)施方式中的,D、包含在D中找到的每個(gè)頁面的已修正版本,確定的是,所提取的 先前狀態(tài)是真實(shí)的先前狀態(tài)。
[0059]在另一實(shí)施方式中,該方法可包括確定頁面的第一集合D不是頁面的第二子集D、 的子集的步驟。這可通過確定D包含未被在D、中找到的至少一個(gè)頁面來實(shí)現(xiàn)。如果情況是 這樣,則該方法可指示所提取的先前狀態(tài)不是真實(shí)的先前狀態(tài)。例如,如果幀F(xiàn) 14將替代地表 示第1頁面(而不是第2頁面)的已修正內(nèi)容,則將不可得到關(guān)于第2頁面的已修正內(nèi)容的認(rèn) 識(shí),且導(dǎo)致例如幀^(還表示第2頁面的已修正內(nèi)容的幀)被記錄的動(dòng)作不能被反轉(zhuǎn)。盡管如 此,即使所提取的先前狀態(tài)不是真實(shí)狀態(tài),它也可能仍然是有用的,因?yàn)橹辽僖粋€(gè)頁面(頁 面Pm )的內(nèi)容與剛在Fm被記錄之后的它的內(nèi)容相同。
[0060] 在另一示例中,如果選擇特定幀使得它的相應(yīng)檢查點(diǎn)按時(shí)間先后順序不在任何其 它檢查點(diǎn)之前(即如果特定幀在最新的檢查點(diǎn)操作之后被添加到WAL 102),則數(shù)據(jù)庫101到 包含特定頁面的特定已修正內(nèi)容的先前狀態(tài)的回滾是徑直的。仍然使用圖2所示的示例,用 于這么做的方法將包括選擇特定幀使得Me {1,2,3,4}。如果例如M= 3且Fm=F3,則子集的可 能選擇可以是3£=作1^3}、0 1={3,4}以及0/£={1,2}(其中?341且?1-2),其后,可執(zhí)行到 包含P 3的先前狀態(tài)的回滾。具有這樣的相應(yīng)特定幀的先前狀態(tài)將總是真實(shí)的先前狀態(tài)(在 數(shù)據(jù)庫、WAL或檢查點(diǎn)信息中沒有一個(gè)已經(jīng)被損壞的假設(shè)下)。
[0061] 在圖4中示出根據(jù)示例實(shí)施方式的被配置成執(zhí)行到數(shù)據(jù)庫101的先前狀態(tài)的數(shù)據(jù) 庫回滾的設(shè)備。設(shè)備401適合于訪問數(shù)據(jù)庫101和與其相關(guān)的WAL 102和檢查點(diǎn)信息。這個(gè)訪 問由訪問裝置404來提供,訪問裝置404可以是例如網(wǎng)絡(luò)、局部總線、電線、無線鏈路或適合 于此的任何其它類型。設(shè)備包括存儲(chǔ)器403和處理器402,其中處理器被配置成當(dāng)請求時(shí)在 WAL 102中的幀的集合中選擇特定幀。特定幀表示相應(yīng)的特定頁面的特定已修正內(nèi)容,以及 特定幀相應(yīng)于按時(shí)間先后順序在至少一個(gè)檢查點(diǎn)的集合中的零個(gè)或多于零個(gè)檢查點(diǎn)之前 的檢查點(diǎn)。處理器402還被配置成在幀的集合中識(shí)別包含特定幀和零個(gè)或多于零個(gè)按時(shí)間 先后順序在其之前的幀的幀的第一子集。處理器402還被配置成從頁面的第一集合提取頁 面的第一子集,以及從幀的第一子集的相應(yīng)頁面提取頁面的第二子集。處理器402被配置成 執(zhí)行數(shù)據(jù)庫101到包含特定頁面的特定已修正內(nèi)容的先前狀態(tài)的回滾,其中基于頁面的第 一子集的內(nèi)容和頁面的第二子集的已修正內(nèi)容來執(zhí)行回滾。當(dāng)需要時(shí),處理器可使用存儲(chǔ) 器403來臨時(shí)和永久地存儲(chǔ)信息。數(shù)據(jù)庫101 (和/或WAL 102)可以被設(shè)備401從單獨(dú)的位置 利用,或設(shè)備401和數(shù)據(jù)庫(和/或WAL 102)可被集成在一起(即數(shù)據(jù)庫101和/或WAL 102可 被存儲(chǔ)在例如被包括在設(shè)備401本身中的介質(zhì)上)。
[0062]相比于使用諸如數(shù)據(jù)雕刻的方法來提取關(guān)于數(shù)據(jù)庫的已刪除或已修改的數(shù)據(jù)的 信息,本發(fā)明的方法在本質(zhì)上不是統(tǒng)計(jì)的,且結(jié)果的可信度確實(shí)可以(假設(shè)數(shù)據(jù)庫和或WAL 未遭受損壞)是已知的。除了有將屬于同一數(shù)據(jù)庫的數(shù)據(jù)拼湊在一起的問題以外,基于雕刻 的方法可面對試圖弄清楚什么數(shù)據(jù)屬于數(shù)據(jù)庫中的哪個(gè)表格的甚至更大的問題(特別是如 果一些表格共用列的相同布置)。使用本發(fā)明的方法,這不是問題,因?yàn)閃AL將包含所需的信 息。根據(jù)本發(fā)明的方法還可以能夠顯示數(shù)據(jù)庫在幾個(gè)時(shí)間點(diǎn)看起來像什么:這對沒有將數(shù) 據(jù)的某個(gè)片段準(zhǔn)確指出到某個(gè)時(shí)間點(diǎn)的能力的雕刻方法是不可行的任務(wù)。如果數(shù)據(jù)庫經(jīng)歷 對它的數(shù)據(jù)庫模式(例如它的表格和列的布置)的改變,則同樣如此。如果例如將新的列給 予表格或如果列的順序已經(jīng)改變,則基于雕刻的方法將沒有分析在當(dāng)對表格的改變被做出 時(shí)之前插入的數(shù)據(jù)的合理機(jī)會(huì)。使用應(yīng)用本發(fā)明的方法,在WAL中找到在每個(gè)時(shí)間點(diǎn)的當(dāng)前 模式(即表格和列布置)。當(dāng)試圖分析屬于數(shù)據(jù)庫的數(shù)據(jù)時(shí),基于雕刻的方法還可面對問題, 其中表格以某種方式彼此有關(guān),因?yàn)樵趦蓚€(gè)表格之間的連接通常在數(shù)據(jù)雕刻將要被執(zhí)行時(shí) 被丟失。對于如下的數(shù)據(jù)庫同樣如此:其結(jié)構(gòu)被有意地修改以阻礙取證分析,例如成碎片的 數(shù)據(jù)庫,其中所有主要數(shù)據(jù)被存儲(chǔ)在單個(gè)鍵值表中,以及其中額外的表格用于組合不同的 鍵值以便提取人類可讀的信息。利用本發(fā)明的方法較不易于受到這樣的有意阻礙。
[0063] 在研究了上面的描述之后,本發(fā)明的又一些另外的實(shí)施方式將對本領(lǐng)域中的技術(shù) 人員變得明顯。即使本描述和附圖公開了實(shí)施方式和示例,本發(fā)明也不限于這些特定的示 例??勺龀龊芏嘈薷暮妥兓黄x由所附權(quán)利要求限定的本發(fā)明的范圍。出現(xiàn)在權(quán)利要 求中的任何參考符號(hào)不應(yīng)被理解為限制其范圍。
[0064] 在上文中公開的設(shè)備和方法可被實(shí)現(xiàn)為軟件、固件、硬件或其組合。雖然方法的步 驟為了清楚的原因被按順序列出,但是一些或所有步驟可以(如果適合的話)被并行地執(zhí) 行。在硬件實(shí)現(xiàn)中,在上面的描述中被提到的功能單元之間的任務(wù)的劃分并不一定相應(yīng)于 到物理單元的劃分;相反,一個(gè)物理部件可具有多個(gè)功能,且一個(gè)任務(wù)可由幾個(gè)物理部件合 作執(zhí)行。某些部件或所有部件可被實(shí)現(xiàn)為由數(shù)字信號(hào)處理器或微處理器執(zhí)行的軟件或被實(shí) 現(xiàn)為硬件或?yàn)閷S眉呻娐?。這樣的軟件可分布在可包括計(jì)算機(jī)存儲(chǔ)介質(zhì)(或非暫時(shí)性介 質(zhì))和通信介質(zhì)(或暫時(shí)性介質(zhì))的計(jì)算機(jī)可讀介質(zhì)上。如本領(lǐng)域中的技術(shù)人員公知的,術(shù)語 計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以任何方法或技術(shù)實(shí)現(xiàn)的、用于存儲(chǔ)信息(例如計(jì)算機(jī)可讀指令、數(shù)據(jù) 結(jié)構(gòu)、程序模塊或其它數(shù)據(jù))的易失性和非易失性、可移動(dòng)和不可移動(dòng)的介質(zhì)兩者。計(jì)算機(jī) 存儲(chǔ)介質(zhì)包括但不限于RAM、ROM、EEPROM、閃存存儲(chǔ)器或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功 能盤(DVD)或其它光盤存儲(chǔ)器、盒式磁帶、磁帶、磁盤存儲(chǔ)器或其它磁存儲(chǔ)設(shè)備或可用于存 儲(chǔ)期望信息并可由計(jì)算機(jī)訪問的任何其它介質(zhì)。此外,技術(shù)人員公知的是,通信介質(zhì)通常體 現(xiàn)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或在調(diào)制數(shù)據(jù)信號(hào)(例如載波或其它傳輸機(jī)制)中 的其它數(shù)據(jù)并包括任何信息輸送介質(zhì)。
【主權(quán)項(xiàng)】
1. 一種用于到數(shù)據(jù)庫的先前狀態(tài)的數(shù)據(jù)庫回滾的計(jì)算機(jī)實(shí)現(xiàn)的方法(300), 其中所述數(shù)據(jù)庫(101)包含頁面的第一集合化={1,...,N},N> 1,110), 其中所述數(shù)據(jù)庫與預(yù)寫式日志(l〇2)WAL相關(guān),表示頁面的第二集合(〇/={ρ/ι,...}, 130)的已修正內(nèi)容的帖的集合(S = {Fi,. . .},120)已經(jīng)被記錄到所述WAL內(nèi),每個(gè)帖(Fj,j > 1)表示相應(yīng)的頁面的已修正內(nèi)容(P/ j e [1,L],L>N), 其中所述數(shù)據(jù)庫還與檢查點(diǎn)信息相關(guān),所述檢查點(diǎn)信息指示至少一個(gè)頁面的已修正內(nèi) 容在至少一個(gè)檢查點(diǎn)的集合(C=ki,. . .})被從所述WAL轉(zhuǎn)移到所述數(shù)據(jù)庫,每個(gè)檢查點(diǎn) (ci,l>l)相應(yīng)于一個(gè)時(shí)間點(diǎn),W及在所述帖的集合中的每個(gè)帖相應(yīng)于所述至少一個(gè)檢查 點(diǎn)之一, 其中所述WAL還包括允許所述帖被按時(shí)間先后順序排序的信息, 所述方法包括W下步驟: 在所述帖的集合中選擇表示相應(yīng)的特定頁面(Pm)的特定已修正內(nèi)容的特定帖(Fm) (S301),所述特定帖相應(yīng)于按時(shí)間先后順序在所述至少一個(gè)檢查點(diǎn)的集合(C)中的零個(gè)或 多于零個(gè)檢查點(diǎn)之前的檢查點(diǎn); 在所述帖的集合中識(shí)別帖的第一子集(% S S ),所述帖的第一子集(% S )包含所 述特定帖和零個(gè)或多于零個(gè)按時(shí)間先后順序在其之前的帖(S302); 從所述頁面的第一集合提取頁面的第一子集(1? ^怒KS303); 從所述帖的第一子集(Sf)的相應(yīng)頁面提取頁面的第二子集(^ #'^(S304); 基于所述頁面的第一子集(Di)的內(nèi)容和所述頁面的第二子集(〇/f)的已修正內(nèi)容執(zhí)行 所述數(shù)據(jù)庫到包含所述特定頁面(Pm)的特定已修正內(nèi)容的先前狀態(tài)的回滾(S305), 其特征在于: 所述特定帖相應(yīng)于按時(shí)間先后順序在所述至少一個(gè)檢查點(diǎn)的集合(C)中的多于一個(gè)檢 查點(diǎn)之前的檢查點(diǎn),W及在于所述方法還包括W下步驟: 確定所述頁面的第一集合(D)是否包含不是所述頁面的第二子集的部分(P&、送1? )的 至少一個(gè)頁面(PbGD),W及 當(dāng)確定所述頁面的第一集合(D)包含不是所述頁面的第二子集的部分(Ps運(yùn)1?^的至 少一個(gè)頁面(PbED)時(shí),指示先前狀態(tài)不是真實(shí)的先前狀態(tài)。2. 根據(jù)權(quán)利要求1所述的方法,還包括W下步驟: 當(dāng)確定所述頁面的第一集合(D)是所述頁面的第二子集的子集(D C Df )時(shí),指示先前 狀態(tài)是真實(shí)的先前狀態(tài)。3. 根據(jù)權(quán)利要求1所述的方法,其中所述數(shù)據(jù)庫是SQLite數(shù)據(jù)庫或其衍生型。4. 根據(jù)權(quán)利要求1所述的方法,其中所述檢查點(diǎn)信息被在所述WAL、共用的存儲(chǔ)器文件 中或在運(yùn)兩者的組合中找到。5. 根據(jù)權(quán)利要求1所述的方法,允許所述帖被按時(shí)間先后順序排序的所述信息包括帖 被W其寫在所述WA帥的順序、salt值、計(jì)數(shù)索引或其組合。6. -種被配置成執(zhí)行到數(shù)據(jù)庫(101)的先前狀態(tài)的數(shù)據(jù)庫回滾的設(shè)備(401),所述數(shù)據(jù) 庫(101)包括頁面的第一集合(110), 其中所述數(shù)據(jù)庫與預(yù)寫式日志(l〇2)WAL相關(guān),表示頁面的第二集合(130)的已修正內(nèi) 容的帖的集合(120)已經(jīng)被記錄到所述WAL內(nèi),每個(gè)帖表示相應(yīng)頁面的已修正內(nèi)容, 其中所述數(shù)據(jù)庫還與檢查點(diǎn)信息相關(guān),所述檢查點(diǎn)信息指示至少一個(gè)頁面的已修正內(nèi) 容在至少一個(gè)檢查點(diǎn)的集合被從所述WAL轉(zhuǎn)移到所述數(shù)據(jù)庫,每個(gè)檢查點(diǎn)相應(yīng)于一個(gè)時(shí)間 點(diǎn),W及在所述帖的集合中的每個(gè)帖相應(yīng)于所述至少一個(gè)檢查點(diǎn)之一, 其中所述WAL還包括允許所述帖被按時(shí)間先后順序排序的信息, 所述設(shè)備適合于訪問所述數(shù)據(jù)庫和與其相關(guān)的WAL和檢查點(diǎn)信息, 所述設(shè)備包括: 存儲(chǔ)器(403); W及 處理器(402),其被配置成: 當(dāng)請求時(shí)在所述帖的集合中選擇表示相應(yīng)的特定頁面的特定已修正內(nèi)容的特定帖,所 述特定帖相應(yīng)于按時(shí)間先后順序在所述至少一個(gè)檢查點(diǎn)的集合中的多于一個(gè)檢查點(diǎn)之前 的檢查點(diǎn); 在所述帖的集合中識(shí)別帖的第一子集,所述帖的第一子集包含所述特定帖和零個(gè)或多 于零個(gè)按時(shí)間先后順序在其之前的帖; 從所述頁面的第一集合提取頁面的第一子集; 從所述帖的第一子集的相應(yīng)頁面提取頁面的第二子集; 基于所述頁面的第一子集的內(nèi)容和所述頁面的第二子集的已修正內(nèi)容來執(zhí)行所述數(shù) 據(jù)庫到包含所述特定頁面的特定已修正內(nèi)容的先前狀態(tài)的回滾, 所述設(shè)備特征在于,所述處理器還被配置成: 確定所述頁面的第一集合(D)是否包含不是所述頁面的第二子集的部分(碳€ ^ )的 至少一個(gè)頁面(PbGD),W及 當(dāng)確定所述頁面的第一集合(D)包含不是所述頁面的第二子集的部分(II.幾毅^ )的至 少一個(gè)頁面(PbGD))時(shí),指示先前狀態(tài)不是真實(shí)的先前狀態(tài)。7.根據(jù)權(quán)利要求6所述的設(shè)備,其中所述處理器還被配置成: 當(dāng)確定所述頁面的第一集合(D)是所述頁面的第二子集的子集(D C )時(shí),指示先前 狀態(tài)是真實(shí)的先前狀態(tài)。
【文檔編號(hào)】G06F11/14GK106095612SQ201610258589
【公開日】2016年11月9日
【申請日】2016年4月22日 公開號(hào)201610258589.4, CN 106095612 A, CN 106095612A, CN 201610258589, CN-A-106095612, CN106095612 A, CN106095612A, CN201610258589, CN201610258589.4
【發(fā)明人】塞巴斯蒂安·贊柯爾, 賈尼·尼曼瑪
【申請人】米克羅西斯特美信公司