本發(fā)明涉及數(shù)據(jù)庫技術(shù)領域,尤其涉及一種數(shù)據(jù)庫恢復技術(shù)領域。
背景技術(shù):
企業(yè)收集的數(shù)據(jù)量以驚人的速度增加,很多數(shù)據(jù)庫能夠在出現(xiàn)損壞或某些系統(tǒng)故障后恢復數(shù)據(jù)并重建,而有些不能。即使數(shù)據(jù)庫能夠被重建,性能也很低下,可能需要數(shù)天或數(shù)周來完成,這取決于要還原的數(shù)據(jù)量。
為了緩解這一問題,企業(yè)通常通過復制或拷貝數(shù)據(jù)來創(chuàng)建多個數(shù)據(jù)庫副本,以確保不會因為任何一個服務器故障而導致數(shù)據(jù)不可用。這對于服務器故障、自然災難、斷電等情況來說是很好的辦法。但某些情況下,數(shù)據(jù)庫物理上完好無損,但錯誤已經(jīng)影響到了數(shù)據(jù),并且不能輕易地通過補償操作來修正。通常這是由于人為的操作錯誤,或應用程序中隱藏的未被發(fā)現(xiàn)的編程錯誤而引起。因此如果數(shù)據(jù)庫能恢復到一個指定的時間點,在此時間點數(shù)據(jù)庫的狀態(tài)是好的,這將十分有用。
目前將數(shù)據(jù)庫恢復到指定時間主要有兩種機制:1)一些數(shù)據(jù)庫通過使用預寫日志(wal)、審計重做或撤消來支持此功能。2)其他一些數(shù)據(jù)庫允許使用數(shù)據(jù)快照作為一個大致的起始點,然后使用上述的審計回放機制來完成此操作。以上兩種機制存在如下不足:首先,這兩種機制都需要在數(shù)據(jù)恢復時保證wal可用,因此需要集成到存儲引擎內(nèi)部,以確保wal文件不會被過早刪除。而對于獨立于存儲引擎的應用系統(tǒng)則無法直接控制wal文件,進而也無法保證wal文件中的變化數(shù)據(jù)能夠被存儲而不會被刪除。其次,一些預寫日志wal中因無法添加輔助信息而導致其中不包含回放所需的所有數(shù)據(jù),例如,對于單獨一張表上所做的特定版本的快照更改,或者特定catalog的更改或元數(shù)據(jù)操作,通常wal都不會有諸如此類的相關(guān)輔助信息。
因此,需要一種恢復方法,使在獨立于存儲引擎的情況下也能保證要回放的變化數(shù)據(jù)被存儲,需要一種能添加輔助信息的文件,使得文件中能夠包含所需的所有數(shù)據(jù),以便能夠更好地對數(shù)據(jù)庫進行恢復。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)中的缺陷,本發(fā)明提供一種基于時間點的數(shù)據(jù)庫恢復方法及系統(tǒng),采用與存儲引擎無關(guān)的變化文件替代預寫日志wal文件,能夠確保在不受存儲引擎控制的情況下,也能使變化數(shù)據(jù)被存儲,并在恢復過程中能夠添加所需的輔助信息。
第一方面,本發(fā)明提供了一種基于時間點的數(shù)據(jù)庫恢復方法,所述方法包括:
建立數(shù)據(jù)庫的快照集;
捕捉所述數(shù)據(jù)庫中的變化數(shù)據(jù),并將所述變化數(shù)據(jù)存儲至變化文件中;
在所述變化文件中添加輔助信息;
將所述變化文件與所述快照集關(guān)聯(lián),形成恢復集;
根據(jù)所述恢復集,將所述數(shù)據(jù)庫恢復到選定時間點。
進一步地,所述快照集包括第一時間點對應的第一快照。
進一步地,所述將所述變化文件與所述快照集關(guān)聯(lián),形成恢復集,具體包括:將所述變化文件與所述第一快照關(guān)聯(lián),形成恢復集。
進一步地,所述根據(jù)所述恢復集,將所述數(shù)據(jù)庫恢復到選定時間點,具體包括:利用所述第一快照,將所述數(shù)據(jù)庫恢復到所述第一時間點;回放所述變化文件中的第一變化數(shù)據(jù);其中,所述第一變化數(shù)據(jù)為所述變化文件中從所述第一時間點至所述選定時間點的時間范圍以內(nèi)產(chǎn)生的變化數(shù)據(jù)。
進一步地,所述快照集包括:第一時間點對應的第一快照,多個中間時間點分別對應的多個中間部分快照;其中,所述中間時間點為所述第一時間點至當前時間點之間的建立了快照的一個時間點。
進一步地,所述將所述變化文件與所述快照集關(guān)聯(lián),形成恢復集,具體包括:
查找第二時間點對應的第二快照;其中,所述第二時間點為所述選定時間點之前距離所述選定時間點最近的中間時間點,所述第二快照為所述第二時間點對應的中間部分快照;
將所述變化文件與所述第二快照關(guān)聯(lián),形成恢復集。
進一步地,所述根據(jù)所述恢復集,將所述數(shù)據(jù)庫恢復到選定時間點,具體包括:
利用所述第二快照,將所述數(shù)據(jù)庫恢復到所述第二時間點;
回放所述變化文件中的第二變化數(shù)據(jù);其中,所述第二變化數(shù)據(jù)為所述變化文件中從所述第二時間點至所述選定時間點的時間范圍以內(nèi)產(chǎn)生的變化數(shù)據(jù)。
第二方面,本發(fā)明還提供了一種基于時間點的數(shù)據(jù)庫恢復系統(tǒng),所述系統(tǒng)包括:數(shù)據(jù)備份模塊,變化捕捉模塊,信息添加模塊,數(shù)據(jù)關(guān)聯(lián)模塊,數(shù)據(jù)恢復模塊;其中,所述數(shù)據(jù)備份模塊與所述變化捕捉模塊連接,所述變化捕捉模塊與所述信息添加模塊連接,所述信息添加模塊與所述數(shù)據(jù)關(guān)聯(lián)模塊,所述數(shù)據(jù)關(guān)聯(lián)模塊與所述數(shù)據(jù)恢復模塊連接;
所述數(shù)據(jù)備份模塊,用于創(chuàng)建數(shù)據(jù)庫的快照集;
所述變化捕捉模塊,用于捕捉所述數(shù)據(jù)庫中的變化數(shù)據(jù),并將所述變化數(shù)據(jù)存儲至變化文件中;
所述信息添加模塊,用于在變化文件中添加輔助信息;其中,所述輔助信息包括文件存儲格式、文件存儲路徑;
所述數(shù)據(jù)關(guān)聯(lián)模塊,用于將所述變化文件與所述快照集關(guān)聯(lián),形成恢復集;
所述數(shù)據(jù)恢復模塊,用于根據(jù)所述恢復集,將數(shù)據(jù)庫恢復到選定時間點。
進一步地,所述快照集包括第一時間點對應的第一快照。
進一步地,所述數(shù)據(jù)關(guān)聯(lián)模塊,具體用于:將所述變化文件與所述第一快照關(guān)聯(lián),形成恢復集。
由上述技術(shù)方案可知,本發(fā)明提供一種基于時間點的數(shù)據(jù)庫恢復方法及系統(tǒng),采用與存儲引擎無關(guān)的變化文件替代預寫日志wal文件,能夠確保在不受存儲引擎控制的情況下,也能使變化數(shù)據(jù)被存儲,并在恢復過程中能夠添加所需的輔助信息,進而能夠更好地將數(shù)據(jù)庫恢復到任意一個選定時間點。
附圖說明
圖1為本發(fā)明提供的基于時間點的數(shù)據(jù)庫恢復方法的流程示意圖。
圖2為本發(fā)明提供的基于時間點的數(shù)據(jù)庫恢復方法的實例示意圖。
圖3為本發(fā)明提供的基于時間點的數(shù)據(jù)庫恢復系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合附圖對本發(fā)明技術(shù)方案的實施例進行詳細的描述。以下實施例僅用于更加清楚地說明本發(fā)明的技術(shù)方案,因此只是作為示例,而不能以此來限制本發(fā)明的保護范圍。
實施例一
圖1示出了本發(fā)明實施例一提供的基于時間點的數(shù)據(jù)庫恢復方法的流程示意圖。如圖1所示,一種基于時間點的數(shù)據(jù)庫恢復方法,包括:
步驟s1,建立數(shù)據(jù)庫的快照集;
步驟s2,捕捉所述數(shù)據(jù)庫中的變化數(shù)據(jù),并將所述變化數(shù)據(jù)存儲至變化文件中;
步驟s3,在所述變化文件中添加輔助信息;
步驟s4,將所述變化文件與所述快照集關(guān)聯(lián),形成恢復集;
步驟s5,根據(jù)所述恢復集,將所述數(shù)據(jù)庫恢復到選定時間點。
本實施例的具體技術(shù)方案如下:
步驟s1,建立數(shù)據(jù)庫的快照集。
通過建立數(shù)據(jù)庫的快照集,來實現(xiàn)對所述數(shù)據(jù)庫的備份,可以對所述數(shù)據(jù)集做一次備份,此時所述快照集僅包括第一時間點對應的第一快照;也可以對所述數(shù)據(jù)庫做多次備份或周期性備份,此時所述快照集包括:第一時間點對應的第一快照,以及多個中間時間點分別對應的多個中間部分快照。其中,所述中間時間點為所述第一時間點至當前時間點之間建立過快照的一個時間點,沒有建立過快照的時間均不屬于本發(fā)明所述的中間時間點的概念范疇。通過多次備份和周期性備份,基于任何時間點的恢復都不需要回放太多的變化數(shù)據(jù),通常恢復到一個完整的備份或快照,一個完整的備份或快照之后不久的狀態(tài),比恢復到大量變化操作后的狀態(tài)更快。
步驟s2,捕捉所述數(shù)據(jù)庫中的變化數(shù)據(jù),并將所述變化數(shù)據(jù)存儲至變化文件中。
快照集建立之后,每個dml操作產(chǎn)生的變化數(shù)據(jù),如插入、修改、刪除產(chǎn)生的變化數(shù)據(jù),都在寫入存儲層之前被捕捉,并被存儲至變化文件中。
每個變化文件包含多種數(shù)據(jù)信息,以便于判斷對于一個給定的恢復操作,哪些數(shù)據(jù)信息是需要被回放的。變化文件是獨立于存儲引擎存在的,能夠由產(chǎn)品控制和維護的文件,而不受本地資源管理器的控制,可避免被過早的刪除。采用該文件取代本地wal文件,本地wal文件則不再被使用,從而減少了磁盤空間,且即使對本地wal結(jié)構(gòu)或協(xié)議并不十分了解也可確保數(shù)據(jù)變化被存儲。
每個變化文件只包含特定資源(比如物理表)的變化數(shù)據(jù),同時每個資源都是獨立的并有自己的變化文件,因此對不同資源可同時執(zhí)行恢復操作,互不影響,也可以按照一定的順序先后執(zhí)行恢復操作,對于先后順序的選擇以能達到最佳性能為準。
步驟s3,在所述變化文件中添加輔助信息。
其中,所述輔助信息包括應用程序的相關(guān)信息,如文件存儲格式、文件存儲路徑等。通過在所述變化文件中添加上述輔助信息,使文件中包含有比通常使用的wal文件更多的數(shù)據(jù),從而允許應用程序?qū)⒁粋€變化文件與對應的快照相關(guān)聯(lián),可確?;胤艜r能夠更方便的處理存儲在其中的變化數(shù)據(jù),這是本地wal文件無法實現(xiàn)的。
步驟s4,將所述變化文件與所述快照集關(guān)聯(lián),形成恢復集。
可選地,當所述快照集中僅包括第一快照時,步驟s4具體包括:將所述變化文件與所述第一快照關(guān)聯(lián),形成恢復集。
可選地,當所述快照集中包括第一快照和多個中間部分快照時,步驟s4具體為:查找第二時間點對應的第二快照;將所述變化文件與所述第二快照關(guān)聯(lián),形成恢復集。其中,所述第二時間點為選定時間點之前距離選定時間點最近的中間時間點,所述第二快照為所述第二時間點對應的中間部分快照。
將變化文件與對應的快照相關(guān)聯(lián),再進行恢復,可以避免在恢復操作中,將一個變化文件應用到錯誤的快照版本上。
步驟s5,根據(jù)所述恢復集,將所述數(shù)據(jù)庫恢復到選定時間點。
恢復集形成后,即可根據(jù)所述恢復集,對數(shù)據(jù)庫進行恢復操作。
可選地,當所述快照集中僅包括第一快照時,步驟s5具體包括:利用所述第一快照,將所述數(shù)據(jù)庫恢復到第一時間點;回放所述變化文件中的第一變化數(shù)據(jù)。其中,所述第一變化數(shù)據(jù)為所述變化文件中從第一時間點至選定時間點的時間范圍以內(nèi)產(chǎn)生的變化數(shù)據(jù)。
對于不同資源,均可通過上述方式進行恢復,例如,對于物理表,可利用所述第一快照,將所述數(shù)據(jù)庫的物理表恢復到第一時間點對應的版本,具體地,可刪除數(shù)據(jù)庫中現(xiàn)有的表,用恢復集里的第一快照來替換,以該版本為基線版本,依次讀取變化文件中的第一變化數(shù)據(jù),將該第一變化數(shù)據(jù)應用到數(shù)據(jù)庫中,第一變化數(shù)據(jù)在數(shù)據(jù)庫中的順序與其在變化文件中的順序相同。
可選地,當所述快照集中包括第一快照和多個中間部分快照時,步驟s5具體包括:利用所述第二快照,將所述數(shù)據(jù)庫恢復到第二時間點;回放所述變化文件中的第二變化數(shù)據(jù)。其中,所述第二變化數(shù)據(jù)為所述變化文件中從第二時間點至選定時間點的時間范圍以內(nèi)產(chǎn)生的變化數(shù)據(jù)。
對于不同資源,均可通過上述方式進行恢復,例如,對于物理表,可利用所述第二快照,將所述數(shù)據(jù)庫的物理表恢復到第二時間點對應的版本,具體地,可刪除數(shù)據(jù)庫中現(xiàn)有的表,用恢復集里的第二快照來替換,以該版本為基線版本,依次讀取變化文件中的第二變化數(shù)據(jù),將該第一變化數(shù)據(jù)應用到數(shù)據(jù)庫中,第二變化數(shù)據(jù)在數(shù)據(jù)庫中的順序與其在變化文件中的順序相同。
通過上述方法,在確定了恢復集和選定時間點后,任何數(shù)據(jù)庫都可以被精確地還原到選定時間點的狀態(tài)。
下面結(jié)合圖2具體舉例說明,圖2用不同的橫線代表不同的物理表:表1、表2、表3、表4和表5,用豎線代表不同快照對應的時間點,用豎線的位置來表示某個快照具體是哪個物理表對應的快照,用折線代表對數(shù)據(jù)庫所做的dml操作,每個dml操作都會產(chǎn)生相應的變化數(shù)據(jù),并存入變化文件。具體地,圖2中所示時間軸上的10:00為第一時間點,10:00對應的豎線代表第一快照;11:00和12:30為兩個中間時間點,11:00和12:30對應的豎線分別代表表2在11:00處對應的中間部分快照、表4在12:30處對應的中間部分快照。
若選12:00為選定時間點,也是要恢復的時間點,則對于表1來說,在12:00之前只有第一快照,將第一快照與變化文件關(guān)聯(lián)形成恢復集。根據(jù)恢復操作進行恢復時,首先將表1利用第一快照恢復到10:00所在的狀態(tài),然后從10:00開始回放變化數(shù)據(jù),直至回放到12:00,即完成了對表1的整個恢復操作,所回放的這部分變化數(shù)據(jù)即為第一變化數(shù)據(jù)。
對于表2來說,在12:00之前有兩個快照,分別是10:00的第一快照和11:00的中間部分快照,其中,11:00的中間部分快照也是在12:00之前距離該選定時間點最近的快照,即第二快照,將第二快照與變化文件關(guān)聯(lián)形成恢復集。根據(jù)恢復操作進行恢復時,首先將表2利用第二快照恢復到11:00所在的狀態(tài),然后從11:00開始回放變化數(shù)據(jù),直至回放到12:00,即完成了對表1的整個恢復操作,所回放的這部分變化數(shù)據(jù)即為第二變化數(shù)據(jù)。
對于表3、表4、表5,其恢復操作的方式與表1相同,其中,表4在12:30時雖然有中間部分快照,但該快照在選定的時間點12:00之后,因此不能作為第二快照使用,同時,12:00以后的變化數(shù)據(jù)因為是在選定時間點之后產(chǎn)生的,也不能在恢復操作中使用。
基于以上內(nèi)容,本發(fā)明實施例一可以實現(xiàn)的技術(shù)效果為:采用與存儲引擎無關(guān)的變化文件替代預寫日志wal文件,能夠確保在不受存儲引擎控制的情況下,也能使變化數(shù)據(jù)被存儲,并在恢復過程中能夠添加所需的輔助信息,進而能夠更即地恢復事務上一致的數(shù)據(jù)庫到任意一個選定時間點。
實施例二
對本發(fā)明實施例一對應地,圖3示出了本發(fā)明實施例提供的一種基于時間點的數(shù)據(jù)庫恢復系統(tǒng)的結(jié)構(gòu)示意圖。如圖3所示,所述系統(tǒng)包括:數(shù)據(jù)備份模塊101,變化捕捉模塊102,信息添加模塊103,數(shù)據(jù)關(guān)聯(lián)模塊104,數(shù)據(jù)恢復模塊105。所述數(shù)據(jù)備份模塊101與所述變化捕捉模塊102連接,所述變化捕捉模塊102與所述信息添加模塊103連接,所述信息添加模塊103與所述數(shù)據(jù)關(guān)聯(lián)模塊104,所述數(shù)據(jù)關(guān)聯(lián)模塊104與所述數(shù)據(jù)恢復模塊105連接。
所述數(shù)據(jù)備份模塊101,用于創(chuàng)建數(shù)據(jù)庫的快照集,對所述數(shù)據(jù)庫進行備份;所述數(shù)據(jù)備份模塊101通過創(chuàng)建數(shù)據(jù)庫的快照集,來實現(xiàn)對所述數(shù)據(jù)庫進行備份,其中,所述快照集可以僅包括第一時間點對應的第一快照,也可以包括多個快照,即第一時間點對應的第一快照,以及多個中間時間點分別對應的多個中間部分快照。
所述變化捕捉模塊102,用于捕捉所述數(shù)據(jù)庫中的變化數(shù)據(jù),并將所述變化數(shù)據(jù)存儲至變化文件中。所述變化捕捉模塊102在變化數(shù)據(jù)被寫入存儲層之前被捕捉,并將所述變化數(shù)據(jù)存儲至變化文件。
所述信息添加模塊103,用于在變化文件中添加輔助信息;其中,所述輔助信息包括應用程序的相關(guān)信息,如文件存儲格式、文件存儲路徑等。采用信息添加模塊103在所述變化文件中添加上述輔助信息,使文件中包含有比通常使用的wal文件更多的數(shù)據(jù),從而允許應用程序?qū)⒁粋€變化文件與對應的快照相關(guān)聯(lián),可確?;胤艜r能夠更方便的處理存儲在其中的變化數(shù)據(jù),這是本地wal文件無法實現(xiàn)的。
所述數(shù)據(jù)關(guān)聯(lián)模塊104,用于將所述變化文件與所述快照集關(guān)聯(lián),形成恢復集。具體用于:當所述快照集包括第一快照時,將所述變化文件與所述第一快照關(guān)聯(lián),形成恢復集;當所述快照集中包括第一快照和多個中間部分快照時,查找第二時間點對應的第二快照,將所述變化文件與所述第二快照關(guān)聯(lián),形成恢復集。
所述數(shù)據(jù)恢復模塊105,用于根據(jù)所述恢復集,將數(shù)據(jù)庫恢復到選定時間點。具體用于:當所述快照集中僅包括第一快照時,利用所述第一快照,將所述數(shù)據(jù)庫恢復到第一時間點,然后回放所述變化文件中的第一變化數(shù)據(jù);當所述快照集中包括第一快照和多個中間部分快照時,利用所述第二快照,將所述數(shù)據(jù)庫恢復到第二時間點,然后回放所述變化文件中的第二變化數(shù)據(jù)。
優(yōu)選地,所述數(shù)據(jù)恢復模塊105包括恢復引擎和回放引擎,所述恢復引擎與所述回放引擎連接,并與所述數(shù)據(jù)關(guān)聯(lián)模塊104連接。所述恢復引擎用于執(zhí)行恢復操作,具體用于利用所述第一快照,將所述數(shù)據(jù)庫恢復到第一時間點,或利用所述第二快照,將所述數(shù)據(jù)庫恢復到第二時間點。所述回放引擎用于執(zhí)行回放操作,具體用于:當所述數(shù)據(jù)庫被恢復到第一時間點時,回放所述變化文件中的第一變化數(shù)據(jù),當所述數(shù)據(jù)庫被恢復到第二時間點時,回放所述變化文件中的第二變化數(shù)據(jù)。
基于以上內(nèi)容,本發(fā)明實施例二可以達到的技術(shù)效果是:所述系統(tǒng)采用與存儲引擎無關(guān)的變化文件替代預寫日志wal文件,能夠確保在不受存儲引擎控制的情況下,也能使變化數(shù)據(jù)被存儲,并在恢復過程中能夠添加所需的輔助信息,進而能夠更好地恢復事務上一致的數(shù)據(jù)庫到任意一個選定時間點。
最后應說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領域的普通技術(shù)人員應當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍,其均應涵蓋在本發(fā)明的權(quán)利要求和說明書的范圍當中。