專利名稱:閃回數據庫的制作方法
技術領域:
本發明涉及數據管理系統,并且更特別地,涉及用于將一組數據恢復到先前狀態的技術。
背景技術:
在使用計算機時可能會產生許多問題。兩種通常類別的錯誤包括計算機引起的錯誤和操作者引起的錯誤。由于這兩種類型的錯誤的性質不同,被設計用于從計算機引起的錯誤恢復的技術未必能用于從操作者引起的錯誤恢復。
例如,一項用于在計算機引起的錯誤(諸如節點或進程故障)之后恢復數據庫的技術包括保存操作日志。特別地,保存重做日志(redo log),使得由在故障之前提交的事務在易失性存儲器中作出的改變能夠在故障之后持久保存在數據庫中。類似地,保存撤消日志(undo log),使得由不是在故障之前提交的事務作出的持久保存的改變可以在故障之后被從數據庫除去。
上述的基于日志的恢復技術不能處理操作者引起的錯誤的問題,因為這些錯誤可以反映在由所提交的事務作出的改變中。即使當反映人員錯誤的所提交的事務后面跟有計算機引起的錯誤時,基于日志的恢復操作僅僅能保證這些錯誤地執行的改變在從計算機引起的錯誤恢復后繼續反映在數據庫中。因此,計算機引起的錯誤的恢復技術傾向于區別已提交的改變和未提交的改變,而不區別正確的已提交的改變和錯誤的已提交的改變。
與計算機引起的錯誤的恢復技術相反,操作者引起的錯誤的恢復技術集中在從數據庫除去已提交的改變和未提交的改變。特別地,操作者引起的錯誤的恢復技術典型地集中在將數據庫返回到存在于在過去的特定點(優選地在包括操作者引起的錯誤的事務的提交時間之前)的一致狀態。例如,一項操作者引起的錯誤的恢復技術包括在特定時間點制作數據庫的備份。如果操作者引起的錯誤在該時間之后引入,可以通過還原到數據庫的備份來將操作者引起的錯誤“除去”。
當然,數據庫管理員很少提前知道操作員引起的錯誤將被引入。如果在最后的備份操作與錯誤的時間之間已經經過了很長時間,則還原回備份的數據庫,然后再次應用在備份操作之后但是在錯誤之前發生的所有改變是非常不切實際和低效的。
另一技術包括保存“鏡像”數據庫(mirror database),其狀態相對于原始數據庫被延遲。在用戶引起的錯誤的情況下,可以還原到鏡像數據庫。然而,如果用于發現錯誤的時間大于延遲的持續時間,則即使所延遲的鏡像也將反映錯誤。此外,由于長的延遲將提高及時發現錯誤的概率,其將同樣增加與故障轉移到鏡像相關的低效率。
另一延遲的鏡像技術包括保存多個延遲的鏡像數據庫,其中各鏡像數據庫具有不同的延遲持續時間。帶有不同延遲的多個鏡像的使用增加了至少一個鏡像將表示在錯誤的時間之前但是不太久前的狀態的可能性。然而,同可以用于該目的的資源相比,保存這樣的鏡像消耗了更多的資源。
可選的技術包括在支持“快照(snapshot)”的存儲器子系統上存儲數據庫,然后使用子系統的快照機制將存儲器子系統還原回在錯誤之前的快照時間。例如,存儲器子系統可以設定特定的“快照時間”T5。在T5之后,子系統中的塊(block)的各個改變通過以下方式處理(1)確定該塊在T5之后是否已經被改變,并且如果沒有,那么(2)在對該塊作出改變之前,從子系統中讀取塊的改變之前的版本并將其復制到與T5快照相關聯的特殊分離“快照存儲器”。使用該技術,通過將塊從T5快照存儲器復制回其在存儲器子系統中的對應塊,可以將存取器子系統返回到其在時間T5存在的狀態。
此外,即使在不將存儲器子系統還原回其前狀態(prior state)的情況下,當進程或事務想要看特殊的塊時,也可以通過執行以下的步驟允許進程或事務看子系統在時間T5的狀態(1),如果特殊塊的拷貝在T5快照存儲器中,則從T5快照存儲器中提供特殊塊的拷貝,以及(2)只有當在T5快照存儲器中沒有塊的拷貝時才從存儲器子系統提供特殊塊的拷貝。
快照技術提供了精確的結果,但是這是通過將潛在地巨大管理量強加于所有的寫入操作來實現的。特別地,當在任意快照時間之后對任意塊的第一次更新時,塊的更新之前的圖像必須被讀取,然后寫出到適當的快照存儲器。此外,當數據庫管理員必須將存儲器子系統返回到先前狀態時,管理員僅被限于那些快照時間被明確地設定的狀態。
操作者引起的錯誤僅僅是一種不容易通過應用生理撤消(physiological undo)除去的錯誤。例如,當試圖從邏輯數據不純(data corruption)恢復時可能會產生困難。例如,類似于操作者引起的錯誤,如果再次應用重做(redo),這樣的不純可以被簡單地“重放(replay)”。
基于前文所述,顯然希望提供一種機制和技術,用于以不存在在該部分中描述的方法中固有的效率或資源消耗問題的方式從可重放錯誤恢復。
在該部分中描述的方法是可執行的方法,但不必是以前已經想到或執行的方法。因此,除非指出,否則不應僅因為在該部分中描述的任何方法包括在該部分中,就認為其為現有技術。
通過附圖中的實例來描述本發明,但是不局限于此,在附圖中相同的參考標號表示類似的元件,其中圖1A-1C是示出根據本發明的實施例的具有閃回(flashback)日志的系統的框圖;圖2是示出根據本發明的實施例的嵌入閃回日志的門標記的框圖;以及圖3是示出可實施本發明實施例的計算機系統的框圖。
具體實施例方式
本發明描述一種用于將儲存庫(repository)還原到前狀態的技術。在下面的描述中,為了解釋的目的,描述了多個特定的細節,以對本發明有徹底的了解。然而,很顯然,在沒有這些特定細節的情況下,本發明也可以被實現。在其它的實例中,以框圖形式示出已知的結構和設備,以避免不必要地模糊本發明。
功能概述在本文中描述的技術用于將儲存庫返回到前狀態。根據一個實施例,該儲存庫為數據庫,并且前狀態是數據庫在過去特定時間點具有的一致狀態。特別地,前狀態是數據庫在其中反映由在特定時間點之前提交的事務作出的所有改變,并且不反映由在特定時間點之前未提交的事務作出的改變的狀態。在另一實施例中,儲存庫是磁盤上的一個或多個文件。
當操作者引起的錯誤通過由已經提交的事務作出的改變引入到數據庫中時,本文中描述的技術可以用于通過將數據庫返回到引入錯誤的事務被提交時間之前的時間點來從錯誤恢復。該技術包括產生成“物理撤消(physical undo)”信息,并且結合生理撤消(physiological undo)和生理重做(physiological redo)使用物理撤消信息,以有效地將儲存庫返回到前狀態。
物理撤消物理撤消包括將存儲器單元返回到先前狀態所必需的信息。術語“塊(block)”在本文中將用于表示為了維持物理撤消而作為原子單位看待的存儲單元。本文中描述的技術不限于任何特定大小或間隔尺寸的塊。
根據一個實施例,塊的物理撤消是塊的更新之前的圖像。已更新的塊的更新之前的圖像可以用于僅僅通過用塊的更新之前的圖像重寫已更新的塊來將已更新的塊返回到更新之前的狀態。然而,更新之前的圖像僅僅是可以用于將存儲單元返回到先前狀態的信息的一種形式,并且在本文中描述的技術不限于任何特定形式的物理撤消。
使用在本文中描述的技術,將已更新的塊寫入磁盤的每項操作均不會引起用于獲得塊的更新之前的圖像的磁盤讀取操作的額外管理。相反地,當數據庫服務器執行更新時,數據庫服務器通常已經具有在易失性存儲器中的塊的拷貝。因此,物理撤消的發生可以僅僅包括在更新第一拷貝之前在易失性存儲器中生成塊的第二拷貝。如下面更加詳細描述的,更新之前的第二拷貝在稍后的時間沖入(flush)磁盤,但是不遲于塊的已更新的圖像沖入磁盤的時間。
生理撤消生理撤消包括將單獨的邏輯信息片(piece)恢復到先前狀態所必需的信息。例如,在關系型數據庫系統中,如果表的一行被更新,則可能會產生生理撤消記錄。在這種情況下,生理撤消記錄將包括用于將該行返回到其更新之前的狀態的信息,但是可能不包括關于可能碰巧同已更新的行存在于相同的數據塊中的其他數據項的狀態的信息。
同生理撤消相比,物理撤消具有優勢。物理撤消的應用通常是成功的,這是因為其不需要關于應用之前的圖像的任何假設。因此物理撤消總是能取消邏輯數據不純。另一方面,如果應用之前的圖像不是自相一致的,則生理撤消的應用可能會失敗。一個塊可能由于存儲器不純、軟件程序錯誤等而變得自相不一致。
生理重做與生理撤消相類似,生理重做存儲關于邏輯數據項的改變的信息。然而,雖然生理撤消存儲關于如何撤消邏輯數據項的改變的信息,但是生理重做存儲關于如何再次執行邏輯數據項的改變的信息。其中,使用生理重做以再次執行由已提交的事務作出的改變,其中這些改變在計算機引起的錯誤產生時尚沒有存儲到永久性存儲器中。
如上所述,為了從計算機引起的錯誤恢復,許多數據庫系統支持生理撤消和重做。在標題為“Method And Apparatus For ImprovedTransaction Recovery”的美國專利第5,850,507號中描述了生理重做和撤消機制的實例,其內容結合于此作為參考。然而,本文中所述的技術不限于任何用于支持生理重做和撤消的特定機制。
雙相恢復根據本發明的一個實施例,儲存庫在兩個相位上被返回到先前狀態,本文中指的是“物理恢復相位”和“生理恢復相位”。例如,假設用戶想要將儲存庫還原回在特定時間點(“目標時間”)存在的狀態。在物理恢復相位期間,物理撤消用于將所有與儲存庫相關的磁盤塊返回到其在某時間點(“物理恢復時間”)的物理狀態。在生理恢復相位期間,生理重做和撤消用于將在儲存庫中的邏輯信息從其在物理恢復之后的狀態移動到與目標時間相關的一致狀態。
應當注意,即使當物理恢復時間是目標時間時,生理恢復相位對于將塊中的邏輯數據返回到一致狀態而言可能仍是必需的。例如,在時間T5,給定的塊可能(1)包括由到時間T5為止還沒有提交的事務作出的改變,并且(2)錯過由已經在T5之前提交的事務作出的改變。因此,將塊返回到其在時間T5的物理狀態,并不必然將在塊上的邏輯數據項返回到其在時間T5的一致狀態。因此,生理重做被應用于,將由已經在T5之前提交的事務作出的任何錯過的改變添加到塊的T5圖像。類似地,生理撤消被應用于,從塊的T5物理圖像除去任何由到時間T5為止還沒有提交的事務作出的改變。
門根據一個實施例,用于管理儲存庫的系統建立特殊時間點,本文中稱為“門(gate)”,并為其產生物理撤消。為了解釋的目的,假設儲存庫是數據庫。在這樣的實施例中,管理儲存庫并建立門的系統是數據庫服務器。
為門產生的物理撤消用于將存儲儲存庫的塊返回到其在與門相關的時間存在的物理狀態。例如,如果門G1為時間T5而建立,則為門G1產生的物理撤消具有用于將塊返回到其在時間T5或在時間T5之前存在的物理狀態的信息。在一個實施例中,G1的物理撤消包括在T5之后更新的所有塊的更新之前的圖像。塊的更新之前的圖像包括塊中的所有數據,即使更新可能僅改變存儲在塊上的多個邏輯數據項的一個。因此,可以僅僅通過用塊的相應的更新之前的圖像重寫塊的已更新的版本來將儲存庫的塊返回到其在T5的物理狀態。
根據一個實施例,當塊在與門相關的時間之后被第一次更新時,通過存儲塊的更新之前的圖像來建立門的物理重做(physicalredo)。特別地,響應于(1)在門時間之后(2)為自門以后沒有被預先更新的任意塊作出的任意更新而產生更新之前的圖像。這樣的更新在本文中稱為“門后第一次更新(first-after-gate update)”。
例如,設想門G1與時間T5相關聯。假設塊在T5之后被更新。如果塊在T5之后已經被更新,則該更新不是門后的第一次更新,并且沒有物理撤消響應于該更新為G1產生。另一方面,如果塊在T5之后被第一次更新,則該更新是門后第一次更新,并且產生塊的更新之前的圖像作為門G1的物理撤消。
多種技術可以用于識別哪些更新具有門后第一次更新的資格。例如,可以將時間戳(timestamp)放在各塊的首部中,以指示塊被更新的最后時間。如果正被更新的塊的塊首部中的時間戳高于門的時間戳,則一些處理已經在門后更新了塊至少一次,因此當前更新不是門后第一次更新。另一方面,如果正被更新的塊的塊首部中的時間戳低于門的時間戳,則當前更新是門后第一次更新。可選地,數據可以被存儲在易失性存儲器中,以指示在最近的門之后哪些塊已經被更新。本發明不限于用于識別哪些更新有資格作為門后第一次更新的任何特定技術。
閃回日志根據一個實施例,門的物理撤消記錄作為條目存儲在“閃回日志”中。正如下文中將更詳細描述的,單個的閃回日志可用于存儲與許多門相關聯的更新之前的圖像,其中標記用于使閃回日志中的位置與特殊的門相關聯。
圖1a根據本發明的實施例示出系統100,將結合系統解釋用于管理物理撤消的技術。參照圖1a,系統100包括易失性存儲器102和非易失性存儲器104。非易失性存儲器104包括用于存儲數據的儲存庫112。儲存庫112可以是,例如,由數據庫服務器管理的數據庫,并且本文中描述的用于管理、維持、和使用物理撤消的操作可以由數據庫服務器中的程序自動執行。然而,本文中描述的技術可以應用于可能需要被返回到先前狀態的任意類型的儲存庫,并因此不限于傳統的數據庫服務器環境。
除了儲存庫112之外,非易失性存儲器104包括閃回日志106。閃回日志106用于存儲條目(entry,入口)(例如,條目140、142、144),該條目(1)對應于儲存庫112中的塊,并且(2)包括用于將相應的塊返回到前狀態的信息。根據一個實施例,閃回日志106中的各個條目包括儲存庫112中的相應的塊的更新之前的圖像。
易失性存儲器102包括塊緩存(block cache)110和閃回日志緩存108。塊緩存110保存來自儲存庫112的塊的拷貝。例如,對于從儲存庫112的塊120讀取數據項的過程,塊120的拷貝122載入到易失性存儲器102中的塊緩存110中。如果該過程然后更新該數據項,則該更新將最初被反映在塊120的緩存的拷貝122中,而不是反映在存在于非易失性存儲器104中的塊120中。
易失性存儲器102進一步包括閃回日志緩存108。閃回日志緩存108用于存儲閃回日志條目(例如,條目130、132和134),該條目已經被設立但是還沒有沖入非易失性存儲器104中。例如,如果塊120的拷貝122將被修改,可能有必要生成包括塊120的更新之前的圖像的閃回日志條目(例如,圖1B中的條目136)。閃回日志條目最初將被存儲在閃回日志緩存108中,然后沖入位于非易失性存儲器104上的閃回日志106中。在圖1C中,響應于被沖入非易失性存儲器104的條目136,條目146已經被添加到閃回日志106。
預期的物理撤消生成在上述的實施例中,響應于(1)在門之后(2)為在該門之后沒有被預先更新的塊而作的每個更新,產生閃回日志條目。遺憾的是,該技術導致在閃回日志條目(其在任意給定的門之后必須立即被產生)的數量中產生“毛刺(spike)”。特別地,實際上在經過門之后立即發生的所有更新都是門后第一次更新。因此,緊跟在門之后,需要生成閃回日志條目的更新操作的百分率實際上是100%。自初始毛刺之后,由于在門之后已經被更新的塊將要更新的百分率增加,因此需要生成閃回日志條目的更新的百分率將下降。
根據一個實施例,通過執行預期的物理撤消生成,降低了毛刺的數量。特別地,閃回日志條目為不是門后第一次更新的更新而生成。相反地,閃回日志條目是在恰好在與該門相關的時間之前的門時而生成。這樣的閃回日志條目,在本文中稱為“預期條目”,減少了當到達門時產生的毛刺,這是因為,不需要為具有預期條目的塊的門后第一次更新生成另外的閃回日志條目。
根據一個實施例,在實際門之前建立預期門(anticipatory gate)。然而,與實際門不同,在預期門之后為塊作出的第一次更新不能自動生成閃回條目。相反地,在預期門之后生成閃回條目是可選的。在這些情形下是否生成條目可能取決于多個因素,諸如系統的工作量以及資源的有效性。例如,是否有閃回條目響應于在預期門之后作出的更新而生成,可能取決于在閃回日志緩存108中有多少空間是當前可用的。又例如,系統可以僅僅生成全部預期門后第一次更新(first-after-anticipatory-gate updates)的確定百分率(例如50%)的閃回條目。這些因素僅僅是可用于確定是否為預期門之后的更新生成閃回條目的因素的實例。本文中所描述的技術不限于因素的任何特定集合。
當已經為門生成預期閃回條目時,預期閃回條目可能不反映相應的塊在與門相關的時間的狀態。例如,假設G1與時間T5相關,并且在時間T3發布(publish)G1的預期門。在T3和T5之間生成的所有預期閃回條目將反映塊在T3和T5之間的某時間點的狀態,但并不必然反映塊在時間T5的狀態。
例如,塊B1可以在時間T4被更新,這使得預期閃回條目將被產生。如果與門G1相關的閃回條目隨后被用于將數據庫還原回時間T5,則B1的預期閃回條目將實際將塊B 1還原回時間T4。因此,當使用預期門時,儲存庫在物理恢復相位后將是“模糊的(fuzzy)”。特別地,在物理恢復相位之后,一些塊將反映其在時間T5的物理狀態,并且其他的塊將反映其在時間T3和T5之間的物理狀態。
預期門的使用僅僅是可能引起這樣的“模糊”的技術的一個實例。例如,在下文中描述的用于多服務器系統的雙相位廣播技術同樣可能產生反映在與相應的門相關的時間之前的狀態的更新之前的圖像。同樣,當門與物理撤消的產生“同時”發生時,物理撤消可以被分配在門之前的時間戳。然而,不考慮這些原因,當所有的邏輯數據項從其當前所處的任何狀態返回到目標狀態時,“模糊”在生理恢復相位期間被消除。
門標記如上所述,閃回條目最初存儲在閃回緩存108中,并周期性的沖入位于非易失性存儲器104上的閃回日志106中。根據一個實施例,單個閃回日志106可用于多個門,其中標記(在本文中稱為“門標記”)被插入閃回日志106,以指示與特定門相關的條目的啟動。
圖2是示出根據本發明的實施例的已經放置(populate)的閃回日志200的框圖。參照圖2,由于閃回條目被從緩存沖入永久性存儲器,因此閃回日志200順序放置(在所述實施例中,從左到右)。
根據一個實施例,門標記存儲在閃回日志200中,以便于應用與給定的門相關的閃回條目。在所述的實施中,閃回日志200包括與時間T500的門G5相關的門標記202,以及與時間T600的門G6相關的門標記204。
門標記鏈根據一個實施例,閃回日志200中的不同門標記鏈接在一起,使得它們可以在閃回日志中被快速定位。在示出的實施例中,每個門標記均包括到緊接在前面的門標記的鏈接,并且控制文件206包括到最新存儲的門標記的鏈接。當以這種方式鏈接時,通過跟隨控制文件206中的鏈接,任何給定的門標記可以快速地被定位于最新的門標記,然后跟隨門標記中的鏈接回到預期的門標記。例如,為了定位門標記202,使用控制文件206中的鏈接來定位門標記204,并使用門標記204中的鏈接來定位門標記202。
當新的門標記被添加到閃回日志200中時,門標記鏈通過如下方式保持使新門標記指向當前由控制文件指向的門標記,然后使控制文件指向新近插入的門標記。例如,如果新門標記被添加到閃回日志200中,則該新新標記將具有到門204的鏈接,并且控制文件206中的鏈接將被更新以指向新門標記。
門標記的使用根據一個實施例,用于特定門的門標記可以實現多個目的,包括(1)標記閃回日志中的位置以及(2)識別生理重做日志中的位置。在一個實施例中,閃回日志中的門標記的位置指示從哪里開始處理閃回條目,以將儲存庫返回到與相應的門相關的時間。例如,為了將儲存庫返回到與時間T500相關的物理狀態,可通過從條目220開始一直到位于閃回日志末端的條目228來處理閃回日志200。另一方面,為了將儲存庫返回到與時間T600相關的物理狀態,可通過從條目222開始一直到位于閃回日志末端的條目228來處理閃回日志204。
在可選實施例中,使用門標記中的指針而不是門標記本身的位置,來識別在相應的門時處理閃回日志的開始位置。通過使用指針來指示閃回日志中的開始位置,門標記本身存儲的順序對于閃回日志而言是無關緊要的。例如,當閃回日志在位置P1時,可以發布與時間T500相關的門G1。如果門標記的位置將被用于識別開始處理的位置,則必須提供一些機制以確保在用于G1的門標記之前沒有與G1相關的閃回條目存儲在閃回日志中,使得用于G1的門標記存儲在位置P1。然而,如果使用指針,則在用于G1的門標記之前在G1時產生的其它閃回條目可以被沖入磁盤。存儲在閃回日志的P1之后某處的用于G1的門標記,將僅包括用于指示位置P1的指針。
當處理閃回條目時,儲存庫的對應的塊被還原回閃回條目中的圖像,除非該閃回條目反映比與被用于還原儲存庫的門相關的時間更晚的更新。例如,如果閃回條目220和222均對應于相同的塊B1,并且儲存庫被還原回與門G5相關的時間T500,則塊B1將基于閃回條目220被還原,但將不會基于閃回條目222被還原,這是因為閃回條目將反映在T500之后對塊B1作出的更新。
在上面給出的實例中,門標記用于指示應用閃回條目的開始位置。在可選的實施例中,閃回條目可以以逆序被應用,從最新的條目開始并繼續到適當的門標記(或由在門標記中的指針指示的位置)。在這些情況下,門標記或指針指示在哪里停止處理閃回條目。同樣,當閃回日志從最新到最老被處理時,當與條目相關的時間戳比被用于恢復的門的時間更近時,一個閃回條目被跳過。例如,在條目220和222均對應于相同的塊B1,并且儲存庫被還原回與門G5相關的時間T500的情況下,由于條目222將與比時間T500更大的時間戳相關聯,其將被跳過。換言之,由于在條目222中反映的塊B1的圖像包括在時間T500后作出的改變,因此條目222將被跳過。另一方面,由于條目220將與在時間T500之前的時間戳相關聯,并將反映塊B1在T500之前某時間的物理圖像,因此條目220將被應用。
如上所述,閃回條目可以以時間順序或逆時間順序被應用。事實上,閃回條目可以以任意順序被處理。如果有用于具有比與被用于還原儲存庫的門相關的時間更早的時間戳的塊的多個閃回條目,則來自任意一個條目的圖像同塊的在“物理恢復相位”之后的恢復圖像一樣好。以任意順序應用閃回條目的能力在能夠并行應用閃回條目的系統中尤其有用,從而進一步提高了恢復操作的效率。例如,需要被應用的閃回條目的子集可以被分配給多個過程。這些過程的每個然后可以使其指定的閃回條目具有與其他處理的最小配合。
如上所述,在一個實施例中,各門標記還包括指向生理重做日志中的位置的指針(“重做指針”)。特別地,存儲在門標記中的重做指針指示生理重做日志250中的在儲存庫已經被還原回與門標記相關的門之后開始處理重做記錄的位置。例如,假設儲存庫將被返回到時間T550。在物理恢復相位期間,在目標時間T550或在目標時間T550之前的第一門被識別。在當前實例中,門標記鏈被跟隨回到對應于時間T500的標記202。在門標記202之后的閃回條目然后被用于將儲存庫還原回其在時間T500的物理狀態。
在物理恢復相位之后,儲存庫將反映塊在時間T500或在T500之前的物理狀態。因此,由在T550之前提交的事務作出的改變中的一些,可能不被反映在儲存庫在時間T500的物理狀態中。為了使這些改變被反映,從重做日志250中的由門標記202的重做指針指示的位置開始,使用生理重做記錄。重做記錄的使用將儲存庫中的邏輯數據項向前滾動到其在時間T550時的一致狀態。同樣在生理恢復相位期間,生理撤消被應用于將(1)在物理圖像中,但(2)由在時間T550時尚未提交的事務作出的任何更新從邏輯數據項中去除。
多服務器系統在一些數據庫系統中,多個數據庫服務器可能可以進入相同的數據庫。根據一個實施例,可以進入數據庫的各個數據庫服務器保存其自己的用于恢復數據庫的日志集合,包括閃回日志和生理重做日志。該多個數據庫服務器還可以具有分離的生理撤消日志,或者可以有單個由全部數據庫服務器共享的生理撤消日志。為了將數據庫還原回先前狀態,可能需要來自所有服務器的所有日志的恢復信息。例如,在特定的門G3之后,一個服務器S1可能對塊B1執行門后第一次更新,另一服務器S2可能對塊B2執行門后第一次更新,并且另一服務器S3可能對塊B3執行門后第一次更新。在這些情形下,如果數據庫將被還原回門G3,則來自S1的閃回日志的閃回記錄將必須被應用到B1,來自S2的閃回日志的閃回記錄將必須被應用到B2,并且來自S3的閃回日志的閃回記錄將必須被應用到B3。
遺憾的是,多個服務器之間的通信不是瞬時的。服務器間通信中的時間延遲能夠引起關于門的建立的同步問題。例如,假設服務器S1建立與5pm相關的門G3。如果服務器間通信是瞬時的,則在時間5pm服務器S1可以發布門G3,并且S2和S3將準確地在G3之后開始為所有門后第一次更新生成閃回條目。然而,G3的通知可能直到5pm之后一秒才到達S2,并直到5pm之后三秒才到達S3。因此,G3將錯過由S2在5pm和5pm之后一秒之間作出的更新的閃回條目。類似地,G3將錯過由S3在5pm和5pm之后三秒之間作出的更新的閃回條目。
根據一個實施例,通過使用雙相位過程建立門解決了該同步問題。在第一相位期間,被指定為“協調器(coordinator)”的服務器向所有其他服務器發送“開始記錄(begin-logging)”消息。響應于該開始記錄消息,各其他服務器(1)向協調器發送指示在其閃回日志中的當前插入點的位置的響應消息,并(2)開始為其作出的每個更新生成閃回條目。
例如,假設S2接收到來自S1的開始記錄消息,并且S2的閃回日志中的當前插入點是S2-POS1。響應于該開始記錄消息,S2(1)發送響應到S1,指示其當前位置S2-POS1,并且(2)開始為其作出的每個更新生成閃回條目。類似地,當S3接收到來自S1的開始記錄消息時,如果S3的閃回日志中的當前插入點是S3-POS1,則響應于該開始記錄消息,S3(1)發送響應到S1,指示其當前位置S3-POS1,并且(2)開始為其作出的每個更新生成閃回條目。
當協調器已經接收到來自所有其他服務器的響應時,協調器(1)建立與不比接收到最后的響應的時間早的時間相關的門,并且(2)為該門生成標記。例如,假設S1在5pm接收到最后的響應,并且建立與該時間5pm相關的門G3。在建立該門之后,協調器向其他服務器發送“門已建立(gate-established)”消息。該門已建立消息指示與該新門相關的時間。由于新門的建立時間必定在服務器開始生成閃回條目的時間之后,因此閃回條目將為由服務器作出的所有門后第一次改變而存在,而不考慮它們何時接收到門已建立消息。
響應于接收門已建立消息,其他服務器停止為所有更新生成閃回條目,并開始僅為門后第一次更新生成閃回條目。返回到當前的實例,S2和S3接收到來自S1的指示G3在5pm被建立的門已建立消息。S2和S3停止為所有更新生成閃回條目,并開始為在5pm之后對任何給定的塊作出的第一次更新生成閃回條目。
上述的雙相位門創建技術避免了與同步相關的問題,這是因為,即使服務器在與門相關的時間之后接收到門已建立消息,該服務器將已經為在與門相關的時間和服務器接收到門已建立消息的時間之間作出的任何改變生成了閃回條目。例如,即使S2在5:01pm接收到G3的門已建立消息,S2將已經為在5:00pm(該時間相關于門G3)之后作出的所有更新生成了閃回信息。
如上所述,協調器為其建立的門生成門標記。根據一個實施例,除了在多服務器環境中門標記包括指示在其他服務器的閃回日志中與該門相關的位置的數據外,為在多服務器環境中的門生成的門標記類似于在單服務器環境中生成的門標記。例如,存儲在S1的閃回日志中的門G3的閃回標記,包括指示在S2的閃回日志中的S2-POS1和S3的閃回日志中的S3-POS1的數據。因此,當根據G3執行物理恢復時,G3的標記將指示在S1、S2和S3的每個的閃回日志中從哪里開始處理閃回條目。
在可選實施例中,特定門的門標記可以放在各個分離的閃回日志中。例如,存儲在S1的閃回日志中的門G3的閃回標記,將指示在S 1的閃回日志中的與門G3相關的位置。門G3的分離的閃回標記將被存儲在S2的閃回日志中,并指示位置S2-POS1。門G3的另一個閃回標記將被存儲在S3的閃回日志中,并指示位置S3-POS1。
根據其中單個門標記被用于為所有服務器指示門位置的實施例,服務器通過發送其在其各自的閃回日志中的當前位置以及其在其生理重做日志中的當前位置來響應開始記錄消息。兩份信息均可以存儲在門的標記中。因此,當數據庫根據門被還原到先前物理狀態時,門標記中的信息將不僅指示在多個閃回日志中從哪里開始處理閃回條目,還指示在多個生理重做日志中從哪里開始處理重做條目。
時序為了確保儲存庫的完整性,必須以特定的順序執行某些操作。由一個實施例使用的可以用于閃回日志維持操作的時序依賴(timing dependency)包括
在塊的已更新的拷貝沖入非易失性存儲器之時或之前,含有塊的更新之前的圖像的閃回條目必須被沖入非易失性存儲器。例如,參照圖1C,閃回條目136必須在塊120的修正拷貝124被沖入儲存庫112之時或之前,被沖入閃回日志106。
用于反映在塊的前圖像(prior image)中的所有改變的重做條目必須在含有前圖像的閃回條目被沖入非易失性存儲器之時或之前,被沖入非易失性存儲器。例如,假設塊B1在4:49pm被更新,使得重做記錄R1將被生成。進一步假設為塊B1的門后第一次更新生成閃回條目F1,其中引起F1生成的門G3與5pm相關。在這些情形下,包含在F1中的B1的前圖像將反映在4:49pm作出的改變。因此,R1必須在F1被沖入非易失性存儲器的時間之時或之前被沖入非易失性存儲器。
一項用于確保用于改變的重做在反映改變的前圖像被沖入非易失性存儲器之前被沖入非易失性存儲器的技術包括在門被建立的時候,將與在門之前作出的改變相關的所有重做沖入非易失性存儲器。因此,當G3在5pm被建立時,與在5pm之前作出的改變相關的所有重做被沖入非易失性存儲器。因此,G3的閃回條目將不反映重做信息還未在非易失性存儲器上反映的任何改變。
最優化多種技術可以被用于改善如本文中描述一樣執行的恢復操作的執行。例如,假設還沒有數據被存儲在塊B1上。如果B1的第一次更新是門后第一次更新,則將用B1的更新之前的圖像生成閃回條目。在這種情況下,然而,B1的更新之前的圖像不含有任何有用的信息。因此,當對未存儲任何須被保留的信息的塊作出門后第一次更新時,產生特殊的閃回條目。該特殊的閃回條目不含有塊的完整的更新之前的圖像,而是僅僅識別塊以及指示該塊不含有任何需要的信息。
如另一個實例,在一些情形中,諸如在插入(INSERT)操作的情形中,當在塊上執行門后第一次更新時,塊的前版本可能還沒有在易失性存儲器中。在這些情況下,塊的前圖像通常必須被從非易失性存儲器中讀取,以生成用于更新的閃回條目。然而,如果知道塊的前圖像不含有必須被記錄的任何信息,則可以避免從非易失性存儲器讀取前圖像的必要。根據一個實施例,如果塊為已經在隨后被取消(drop)的結構(諸如表)預先存儲了數據,則確定該結構是否在與該數據庫可能被還原到的最老的門相關的時間之前被取消。如果該結構是在與該數據庫可能被還原到的最老的門相關的時間之前被丟棄,則不需要從磁盤讀取前圖像。相反,特殊的閃回條目可被用于識別塊,并指示該塊不含有任何需要的信息。
例如,如果塊預先存儲在一周前取消表的部分,并且該數據庫所需的最老的門是兩天以前,則該塊屬于在與數據庫可能被還原到的最老的門相關的時間之前被取消的結構。因此,不含有塊的前圖像的特殊閃回條目可以被用于該塊。
另一項可被用于保存資源的技術包括將物理和生理撤消日志組合成單個的撤消日志,該單個的撤消日志包括將儲存庫還原回一致狀態的足夠的信息。使用組合的撤消日志可以避免在分離的物理和生理撤消日志中保存的信息之間的大量冗余。可選地,可以通過僅在生理撤消不具有將塊還原回前狀態的足夠信息的情形下生成閃回條目來避免這樣的冗余。生理撤消不具有足夠信息的特殊情況將隨著執行的變化而變化,并且,例如,由被更新的塊的特殊類型而決定。
根據另一技術,含有文件的標題信息的塊被同存儲構成文件的內容的數據的塊區別對待。根據一個實施例,為文件標題塊生成的閃回條目不含有標題塊的全部前圖像。相反地,文件標題塊的閃回條目描述文件的元變化,并被邏輯應用于文件,而不是完全的重寫相應的文件標題塊。例如,這樣的閃回條目可以指示文件在特定的時間點被擴展。這樣的閃回條目的應用包括將文件退回到其原始邊界。類似地,閃回條目可為儲存庫指示文件的添加。閃回條目的應用包括刪除所添加的文件。
硬件描述圖3是框圖,示出了可應用本發明的實施例的計算機系統300。計算機系統300包括用于傳遞信息的總線302或其它通信裝置、以及用于處理信息的、與總線302連接的處理器304。計算機系統300還包括主存儲器306,例如隨機訪問存儲器(RAM)或者其它動態存儲裝置,與總線302連接,用于儲存信息及處理器304要執行的指令。主存儲器306還可用于在處理器304執行指令過程中,儲存臨時變量或其他中間信息。計算機系統300還包括只讀存儲器(ROM)308或者其他靜態存儲裝置,與總線302連接,用于儲存靜態信息和處理器304要執行的指令。還提供了存儲裝置310,如磁盤或光盤,與總線302連接,用于儲存信息和指令。
計算機系統300可以經由總線302連接到顯示器312,如陰極射線管(CRT),用于向計算機用戶顯示信息。包括字母數字鍵和其他鍵的輸入裝置314與總線302相連,用于傳遞信息和命令選擇到處理器304。另一種用戶輸入裝置是光標控制316,如鼠標、跟蹤球、或光標方向鍵,用于傳遞方向信息和命令選擇到處理器304并用于控制顯示器312上的光標移動。這個輸入設備通常在兩個軸上(第一個軸(例如X軸)和第二個軸(例如Y軸))具有兩個自由度,使裝置能指定平面上的位置。
本發明涉及計算機系統300的使用,用于執行在此描述的技術。根據本發明的一個實施例,由計算機系統300響應于執行包括在主存儲器306中的一個或多個指今的一個或多個序列的處理器304,來實現這些技術。這樣的指令可以從諸如存儲設備310的其它計算機可讀介質讀入主存儲器306。通過執行包括在主存儲器306中的指令序列,使處理器304執行此處所述的處理步驟。在可選實施例中,硬連線電路(hard-wired circuitry)可取代軟件指令或者與軟件指令結合來實施該發明。因此,本發明中的實施例將不限于硬件電路和軟件的任何特定組合。
這里使用的術語“計算機可讀介質”是指參與提供指令至用于執行的處理器304的任何介質。這種介質可以采取很多形式,包括但不限于非易失性介質、易失性介質和傳遞介質。非易失性介質舉例來說包括光盤或磁盤,如存儲裝置310。易失性介質包括動態存儲器,如主存儲器306。傳輸介質包括同軸電纜、銅線、和光纖,包括組成總線302的導線。傳輸介質還可采取聲波或光波形式,例如那些在無線電波和紅外線數據通信過程中產生的聲波和光波。
通常形式的計算機可讀介質包括如軟盤、軟性盤、硬盤、磁帶,或者任何其它磁性介質、CD-ROM、任何其它光介質、打孔紙、紙帶、或者任何帶孔圖樣的物理介質、RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存儲芯片或者盒式磁帶,或者以下提到的載波、或者計算機可讀的任何其他介質。
各種形式的計算機可讀介質可參與承載一個或者多個指令的一個或多個序列到處理器304用于執行。例如,指令開始可承載在遠程計算機的磁盤中。遠程計算機可以將指令加載到其動態存儲器中,然后使用調制解調器通過電話線發送信息。計算機系統300本地的調制解調器可接收電話線上的數據,并使用紅外發射器將數據轉換成紅外信號。紅外探測器可以接收紅外信號攜帶的數據,合適的電路可以把信息放到總線302上。總線302把數據傳遞到主存儲器306中,處理器304從主存儲器取回并執行這些指令。在處理器304執行這些指令之前或之后,主存儲器306接收的指令可隨意地儲存于存儲裝置310中。
計算機系統300還包括連接到總線302的通信接口318。通信接口318提供雙向數據通信,連接到與局域網322相連的網絡鏈路320。例如,通信接口318可以是綜合業務數字網(ISDN)卡或者調制解調器,用于提供到相應類型電話線的數據通信連接。又如,通信接口318可以是局域網(LAN)卡,用于提供至兼容局域網(LAN)的數據通信連接。也可以使用無線鏈路。在任何這樣的實施中,通信接口318發送和接受承載表示各種信息的數字數據流的電信號、電磁信號和光學信號。
網絡鏈路320通常可通過一個或者多個網絡提供數據通信給其它數據裝置。例如,網絡鏈路320可通過局域網322與主機324連接,或者與互聯網服務提供商(ISP)326操作的數據設備連接。ISP326又通過目前通稱為“互聯網”328的全球分組數據通信網絡提供數據通信服務。局域網322和互聯網328都使用承載數字數據流的電信號、電磁信號或光學信號。這些信號,如通過各種網絡的信號,網絡鏈路320上的信號,通過通信接口318的信號,都傳送數字數據給計算機系統300或者傳送來自計算機系統300的數字數據,是傳輸信息的載波的示范性形式。
計算機系統300能通過網絡、網絡鏈路320和通信接口318發送消息和接收數據(包括程序代碼)。例如,在互聯網的例子中,服務器330可通過互聯網328、ISP 326、局域網322、和通信接口318,傳送所請求的用于應用程序的程序代碼。
當代碼被接收和/或儲存在存儲裝置310上或者其它非易失性介質上用于隨后執行時,處理器304可執行所接收到的代碼。按照這種方式,計算機系統300可以以載波的形式獲得應用代碼。
上所述僅為本發明的優選實施例而已,并不用于限制本發明,對于本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
權利要求
1.一種將儲存庫返回到目標前邏輯狀態的方法,所述方法包括以下步驟接收將所述儲存庫返回到所述目標前邏輯狀態的請求,其中,所述目標前邏輯狀態對應于目標時間點;響應于所述請求,執行如下步驟對為所述儲存庫存儲數據的一個或多個塊應用物理撤消,其中,所述物理撤消的應用使得所述一個或多個塊的每個反映與在所述目標時間點之前的時間點相關的物理狀態;以及應用生理撤消和生理重做中的至少一個,以將存在于所述一個或多個塊中的邏輯數據項移動到所述目標前邏輯狀態。
2.根據權利要求1所述的方法,其中,所述應用物理撤消的步驟包括為多個過程分配物理撤消記錄;以及所述多個過程相對于彼此并行的應用所述物理撤消記錄。
3.根據權利要求1所述的方法,其中,所述應用物理撤消的步驟使得在所述儲存庫中的塊反映在所述目標時間點之前的時間;以及所述應用生理撤消和生理重做中的至少一個的步驟,包括應用生理重做,以將在所述儲存庫中的邏輯數據項在時間上向前移動到所述目標前邏輯狀態。
4.根據權利要求3所述的方法,其中,所述應用生理撤消和生理重做中的至少一個的步驟包括,在應用所述生理重做之后,應用生理撤消,以從所述邏輯數據項的至少一些去除由在所述目標時間點時或在所述目標時間點之前還未提交的事務作出的改變。
5.根據權利要求1所述的方法,其中,所述對為所述儲存庫存儲數據的一個或多個塊應用物理撤消的步驟包括對所述一個或多個塊的第一集合,應用與對應于特定時間點的門相關的物理撤消;以及對所述一個或多個塊的第二集合,應用與在所述門之前的預期門相關的物理撤消。
6.根據權利要求5所述的方法,進一步包括如下步驟為在所述預期門之后作出的一些但不是所有的預期門后第一次更新產生物理撤消;以及除對在所述預期門之后為其產生物理撤消的塊作出的更新之外,為在所述門之后作出的所有門后第一次更新產生物理撤消。
7.根據權利要求6所述的方法,進一步包括如下步驟當所述預期門后第一次更新被執行時,根據資源的可用性確定是否為所述預期門后第一次更新產生物理撤消。
8.根據權利要求1所述的方法,進一步包括如下步驟根據與特定時間點相關的門產生所述物理撤消;將所述物理撤消作為一系列閃回記錄存儲在閃回日志中;以及將使所述門與位置相關聯的數據存儲在所述閃回日志中。
9.根據權利要求8所述的方法,其中,所述將使所述門與位置相關聯的數據存儲在所述閃回日志中的步驟,包括為所述門的各個門在所述閃回日志中存儲門標記。
10.根據權利要求9所述的方法,進一步包括如下步驟使用與門相關的門標記,來確定處理哪個閃回記錄,以將所述儲存庫返回到與所述門相關的物理狀態。
11.根據權利要求9所述的方法,其中所述門標記包括指示在生理重做日志中的位置的數據;以及所述方法進一步包括使用在所述生理重做日志中的所述位置來確定處理哪個生理重做。
12.根據權利要求9所述的方法,其中所述門標記包括指示在所述閃回日志中的位置的數據;以及,所述方法進一步包括使用在所述閃回日志中的所述位置來確定處理哪個閃回條目。
13.根據權利要求9所述的方法,進一步包括,在各門標記中存儲到在所述閃回日志中的先前門標記的鏈接。
14.根據權利要求1所述的方法,其中,多個條目可以進入所述儲存庫;以及所述多個條目的各條目保存分離日志,所述分離日志含有所述儲存庫存在于其上的至少一些塊的物理撤消信息。
15.根據權利要求14所述的方法,進一步包括通過執行以下步驟來建立門將所述多個條目中的一個指定為協調器;使所述協調器向各其他所述條目發送開始記錄消息;使各其他條目通過為所有更新產生物理重做來響應所述開始記錄消息;在發送所述開始記錄消息之后,使所述協調器向各其他所述條目發送門已建立消息;以及使各其他條目通過僅為門后第一次更新建立物理撤消來響應所述門已建立消息。
16.根據權利要求15所述的方法,其中各其他條目還通過向所述協調器發送響應來響應所述開始記錄消息;以及所述協調器在接收到所有所述其他條目的響應后,發送所述門已建立消息。
17.根據權利要求16所述的方法,其中由各其他條目發送的所述響應,指示所述條目在所述分離日志中的位置;以及所述協調器存儲使所述門與位置信息相關聯的數據,其中,所述位置信息用于識別在從所述各其他條目接收到的所述響應中指示的位置。
18.根據權利要求17所述的方法,其中,所述存儲使所述門與位置信息相關聯的數據的步驟包括為所述門在所述協調器的所述分離日志中存儲標記,其中,所述標記包括在從所述各其他條目接收到的所述響應中指示的位置的鏈接。
19.一種用于將儲存庫還原到前狀態的方法,所述方法包括建立與第一時間點相關的預期門;為對所述儲存庫存在于其上的塊作出的一些但不是全部的預期門后第一次更新產生物理撤消;建立與比所述第一時間點晚的第二時間點相關的門;除在所述預期門時為其產生物理撤消的塊作出的更新之外,為對所述儲存庫存在于其上的塊作出的所有門后第一次更新產生物理撤消;通過執行以下步驟,將所述儲存庫還原到至少與所述第二時間點一樣早的狀態使用與所述預期門相關的物理撤消,以將所述儲存庫的塊的第一集合還原回在所述第二時間點之前的時間;以及使用與所述門相關的物理撤消,以將所述儲存庫的塊的第二集合還原回所述第二時間點。
20.根據權利要求19所述的方法,進一步包括以下步驟在所述預期門后第一次更新被執行時,根據資源的可用性確定是否為預期門后第一次更新產生物理撤消。
21.一種計算機可讀介質,承載有一個或多個指令序列,當由一個或多個處理器執行所述指令序列時,使所述一個或多個處理器執行在權利要求1到20中任一項所述的方法。
全文摘要
本發明描述的技術用于將儲存庫返回到前狀態。儲存庫可以是,例如數據庫,并且前狀態可以是,例如數據庫在過去的特定時間點具有的一致狀態。當操作者引起的錯誤通過由已經提交的事務作出的改變引入到數據庫中時,本發明描述的技術可以用于通過將數據庫返回到在引入錯誤的事務被提交的時間之前的時間點來從錯誤恢復。該技術包括產生“物理撤消”信息,以及物理撤消信息與生理撤消和生理重做的聯合使用,以有效地將儲存庫返回到前狀態。
文檔編號G06F17/00GK1781081SQ200480010768
公開日2006年5月31日 申請日期2004年3月31日 優先權日2003年4月30日
發明者J·威廉·李, 羅萬安, 邁克爾·斯圖爾特, 胡維民, 威廉·布里奇 申請人:甲骨文國際公司