專利名稱:維護數(shù)據(jù)庫與文件系統(tǒng)之間的鏈接級一致性的制作方法
技術領域:
本發(fā)明一般涉及數(shù)據(jù)庫管理領域。更具體地,本發(fā)明涉及維護數(shù)據(jù)庫與相應 的文件系統(tǒng)之間的鏈接級一致性。
背景技術:
近年來,對諸如圖片、視頻和電影的大型非結構化數(shù)據(jù)類型的使用增長巨大, 伴隨以高效方式存儲這些大量數(shù)據(jù)流的需求。傳統(tǒng)上,在諸如文件系統(tǒng)的結構中或 數(shù)據(jù)庫中存儲數(shù)據(jù)。
文件系統(tǒng)是其中在諸如硬盤的存儲介質上將文件存入文件夾內(nèi)的分級數(shù)據(jù)結 構。操作系統(tǒng)的一部分維護文件系統(tǒng),并控制對文件系統(tǒng)中的文件的訪問。文件系 統(tǒng)擅K將大量非結構化數(shù)據(jù)以流的形式傳入和傳出文件。目前已知的文件系統(tǒng)的問 題之一在于,諸文件必須被手動組織成分組(諸文件夾和子文件夾),并且,如果 用戶忘記了他在哪里存儲了特定的文件,則可能難以找到該文件。磁盤技術的進步 已經(jīng)預見到發(fā)展越來越大的硬盤,諸如此類的技術動力使得這一問題更為嚴重。能 夠存儲在單張磁盤上的數(shù)據(jù)的絕對容量可能使跟蹤文件系統(tǒng)中的文件成為極其困 難的任務。
數(shù)據(jù)組織的另一廣泛使用的方法是數(shù)據(jù)庫。數(shù)據(jù)庫系統(tǒng)將數(shù)據(jù)存儲為一個或 多個表,其中表的每一行包括涉及一個實體的相關數(shù)據(jù)元素的多個分組,各列表示
關于該行主題的實體的有用信息。例如,可維護人力資源信息的數(shù)據(jù)庫,其中人力 資源數(shù)據(jù)庫的每一行表示一個雇員,而人力資源數(shù)據(jù)庫中的每一列表示諸如雇員 名、雇員社會保障號以及雇員薪資的數(shù)據(jù)元素。
數(shù)據(jù)庫提供優(yōu)于數(shù)據(jù)的文件系統(tǒng)組織的眾多有用優(yōu)點。數(shù)據(jù)庫管理系統(tǒng)擅長 存儲、尋找和檢索結構化數(shù)據(jù)的細小片段。此外,通常存在搜索和訪問存儲在數(shù)據(jù) 庫中的數(shù)據(jù)的指定部分的高度靈活的手段。然而,數(shù)據(jù)庫還未能很好地處理大量非 結構化數(shù)據(jù)(被稱為BLOB (Binary Large Object, 二進制大對象))的存儲和訪 問。具體地,當數(shù)據(jù)庫包括BLOB列時,BLOB—般被拆分成分散在磁盤的細小 片段。數(shù)據(jù)庫列中的條目包含指向BLOB第一片段的指針而非包含BLOB本身。 這種情況導致檢索BLOB中的數(shù)據(jù)的低效率,因為必須找到并重新組合不同的 BLOB片段。為了減少這些低效率的影響,通常返回指向BLOB的第一片段的指 針而非即時檢索BLOB本身。
例如,假定雇員信息的數(shù)據(jù)庫包括雇員相片的BLOB歹ij。假定用戶請求特定 雇員的相片,并向其返回了指向該相片的指針。指針表示一個物理位置——例如, 表示磁盤扇區(qū)上存儲相片第一片段的實際磁盤地址的16字節(jié)十六進制值。在這種 情況中,會引起若干問題。除了磁盤地址無法為用戶所知以外,如果操作系統(tǒng)重新 組織磁盤上的數(shù)據(jù),則相片可能不再存在于該位置,在這種情況中將向用戶返回"找 不到"消息。
近來,開發(fā)了存儲BLOB的另一方式,其中BLOB在文件系統(tǒng)中被存儲為毗 鄰文件即"FILESTREAM (文件流)"。提供可用于對關系表中的一列附加標簽 的FILESTREAM數(shù)據(jù)存儲屬性。FILESTREAM屬性指示該列的數(shù)據(jù)將被存儲為 操作系統(tǒng)(OS)的文件系統(tǒng)中的文件。數(shù)據(jù)庫管理系統(tǒng)管理文件系統(tǒng)中的文件的 創(chuàng)建和刪除。在文件系統(tǒng)中的文件與單元(行和列的交集)之間存在1: 1的引用。 可使用諸如SQL或MICROSOFT⑧的T-SQL等程序設計語言按照與其它列中的數(shù) 據(jù)相同的方式操作FILESTREAM列中的數(shù)據(jù)。
因此,F(xiàn)ILESTREAM列在數(shù)據(jù)庫中用于大型非結構化數(shù)據(jù)。對FILESTREAM 數(shù)據(jù)存儲屬性的使用允許將大型非結構化數(shù)據(jù)存儲為文件系統(tǒng)中的毗鄰文件,而同 時仍可供數(shù)據(jù)庫訪問。這樣的數(shù)據(jù)庫管理系統(tǒng)需要維護具有FILESTREAM屬性的 數(shù)據(jù)庫行與其相應的FILESTREAM數(shù)據(jù)之間的鏈接的一致性(即,"鏈接級一致 性")以確保數(shù)據(jù)完整性并避免數(shù)據(jù)庫的訛誤。例如,如果在將改變提交給磁盤(即 "刷新(flush)")之前,發(fā)生諸如電源故障或系統(tǒng)崩潰的故障,則可能導致若干 問題。例如,數(shù)據(jù)庫可能不會反映文件系統(tǒng)中存在的文件或目錄的存在;或者,數(shù) 據(jù)庫可能會反映文件系統(tǒng)中不存在的文件或目錄的存在。因此,數(shù)據(jù)庫與文件之間 被破壞鏈接損害了數(shù)據(jù)庫的完整性,因為數(shù)據(jù)庫用戶不能確信數(shù)據(jù)庫準確地反映了 由數(shù)據(jù)庫列中FILESTREAM單元所表示的數(shù)據(jù)的當前狀態(tài)。
一般,通過兩種不同的方式實現(xiàn)了對鏈接級一致性的維護 一致性檢查和修 復,以及日志記錄和恢復。在一致性檢查和修復中,爬行(crawling)任務搜索數(shù) 據(jù)庫和文件系統(tǒng)來檢查不一致性并潛在地對其修復。這樣的方法費時、目標不明,且消耗過多的系統(tǒng)資源。
常規(guī)的日志記錄和恢復方法可在數(shù)據(jù)庫日志中使用日志記錄,或與事務化文件系統(tǒng)協(xié)作。在前一方法中,文件系統(tǒng)操作與數(shù)據(jù)庫數(shù)據(jù)更新一起被記錄在數(shù)據(jù)庫日志中。在這樣的方法中,當數(shù)據(jù)庫管理系統(tǒng)恢復數(shù)據(jù)庫時,可為所記入日志的文件系統(tǒng)操作觸發(fā)取消和重做操作,并使文件系統(tǒng)數(shù)據(jù)與同一數(shù)據(jù)庫恢復框架中的數(shù)據(jù)庫數(shù)據(jù)一致。這種方法的一個缺點是,數(shù)據(jù)庫管理系統(tǒng)通常不與文件系統(tǒng)緊密集成,從而不了解文件系統(tǒng)對磁盤的數(shù)據(jù)刷新。在不能協(xié)調(diào)數(shù)據(jù)刷新的情況下,數(shù)據(jù)庫管理系統(tǒng)必須強制日志刷新每一文件系統(tǒng)操作的日志記錄以實現(xiàn)正確的預寫式曰志,這有助于在崩潰恢復中維護事務鏈接級一致性。這種強制日志記錄導致每個文件系統(tǒng)操作就有一個磁盤I/O操作,通常這是不可接受的性能開支量。
后一方法涉及與事務化文件系統(tǒng)協(xié)作,其中文件系統(tǒng)本身是事務性的,且能
夠恢復。數(shù)據(jù)庫管理系統(tǒng)參與由高級事務管理器(Transaction Manager, "TM")協(xié)調(diào)的分布式事務。在崩潰恢復期間,高級TM解決有疑問的事務,并確保數(shù)據(jù)庫與文件系統(tǒng)資源管理器之間的一致性。該方法的缺點在于,在商業(yè)操作系統(tǒng)上沒有可用的事務化文件系統(tǒng)。從而,對許多OS平臺上的許多數(shù)據(jù)庫管理系統(tǒng)而言,該方法不可用。此外,該方法具有在實現(xiàn)中增加復雜性和執(zhí)行成本的缺點。
從而,需要維護數(shù)據(jù)庫的諸列與文件系統(tǒng)中其相應的FILESTREAM數(shù)據(jù)之間的鏈接級一致性同時解決以上缺點的機制。本發(fā)明滿足這種需求。
發(fā)明概述
考慮以上缺點和不足,此處公開用于維護數(shù)據(jù)庫與文件系統(tǒng)之間的事務鏈接級一致性的方法和計算機可讀介質。在一種方法中,在數(shù)據(jù)庫日志的記錄中將文件系統(tǒng)改變記入日志,且在文件系統(tǒng)文件夾中創(chuàng)建對應于該文件系統(tǒng)改變的文件。在重啟恢復過程期間,基于數(shù)據(jù)庫日志執(zhí)行分析操作和條件重做操作,并基于文件系統(tǒng)文件夾中的文件執(zhí)行條件重做操作和取消操作。然后基于數(shù)據(jù)庫日志執(zhí)行取消操作。
附圖簡述
圖1是可在其中實現(xiàn)本發(fā)明的各方面的示例計算環(huán)境;圖2是可在其中實現(xiàn)本發(fā)明的各方面的示例數(shù)據(jù)庫配置;圖3A-C是可在其中實現(xiàn)本發(fā)明的各方面的示例日志;圖4-5是例示根據(jù)本發(fā)明諸實施例的示例方法的流程圖。說明性實施例的詳細描述
結合特征描述本發(fā)明的主題以滿足法定要求。然而,描述本身不旨在限制本專利的范圍。相反,發(fā)明人考慮到,所要求的主題可結合其它目前或將來的技術按照其它方式來具體化,以包括不同的步驟或與本文檔中所述的相似的元素。而且,盡管術語"步驟"可在此處用于指示所采用的方法的不同方面,但除非明確描述了各個步驟的順序,否則該術語不應被解釋為暗示此處公開的各個步驟之間的任何特定順序。
示例計算環(huán)境
圖1示出了可在其上實現(xiàn)本發(fā)明的合適的計算系統(tǒng)環(huán)境100的示例。計算系統(tǒng)環(huán)境IOO只是合適的計算環(huán)境的一個示例,并不旨在對本發(fā)明的使用范圍或功能提出任何限制。也不應該把計算環(huán)境100解釋為對示例性操作環(huán)境100中示出的任
一組件或其組合有任何依賴性或要求。
本發(fā)明可用眾多其它通用或專用計算系統(tǒng)環(huán)境或配置來操作。適合在本發(fā)明中使用的眾所周知的計算系統(tǒng)、環(huán)境和/或配置的示例包括但不限于,個人計算機、服務器計算機、手持或膝上型設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機頂盒、
可編程消費者電子產(chǎn)品、網(wǎng)絡PC、小型機、大型機、包含上述系統(tǒng)或設備中的任
一個的分布式計算機環(huán)境等。
本發(fā)明可在諸如程序模塊等由計算機執(zhí)行的計算機可執(zhí)行指令的通用語境中描述。 一般而言,程序模塊包括例程、程序、對象、組件、數(shù)據(jù)結構等,它們執(zhí)行特定任務或實現(xiàn)特定抽象數(shù)據(jù)類型。通常,程序模塊的功能可按各個實施例中所需組合或分布。本發(fā)明也可以在分布式計算環(huán)境中實現(xiàn),其中任務由通過通信網(wǎng)絡鏈接的遠程處理設備執(zhí)行。在分布式計算環(huán)境中,程序模塊可以位于包括存儲器存儲設備在內(nèi)的本地和遠程計算機存儲介質中。
參考圖l,用于實現(xiàn)本發(fā)明的一個示例性系統(tǒng)包括計算機110形式的通用計算設備。計算機110的組件可以包括但不限于,處理單元120、系統(tǒng)存儲器130和將包括系統(tǒng)存儲器在內(nèi)的各種系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是若干類型的總線結構中的任一種,包括存儲器總線或存儲器控制器、外圍總線和使用各種總線體系結構中的任一種的局部總線。作為示例而非限制,這樣的體系結構包括工業(yè)標準體系結構(ISA)總線、微通道體系結構(MCA)總線、擴展的ISA (EISA)總線、視頻電子技術標準協(xié)會(VESA)局部總線和外圍部件互連(PCI)總線(也被稱為Mezzanine總線)。
計算機110通常包括各種計算機可讀介質。計算機可讀介質可以是能夠被計算機110訪問的任何可用介質,且包括易失性和非易失性介質、可移動和不可移動介質。作為示例而非限制,計算機可讀介質可以包括計算機存儲介質和通信介質。計算機存儲介質包括以任何方法或技術實現(xiàn)的用于存儲諸如計算機可讀指令、數(shù)據(jù)結構、程序模塊或其它數(shù)據(jù)等信息的易失性和非易失性、可移動和不可移動介質。計算機存儲介質包括但不限于,RAM、 ROM、 EEPROM、閃存或其它存儲器技術;CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲器;磁帶盒、磁帶、磁盤存儲或其它磁性存儲器;或能用于存儲所需信息且可以由計算機110訪問的任何其它介質。通信介質通常具體化為諸如載波或其它傳輸機制等已調(diào)制數(shù)據(jù)信號中的計算機可讀指令、數(shù)據(jù)結構、程序模塊或其它數(shù)據(jù),且包含任何信息傳遞介質。術語"己調(diào)制數(shù)據(jù)信號"指的是這樣一種信號,其一個或多個特征以在信號中編碼信息的方式被設定或更改。作為示例而非限制,通信介質包括諸如有線網(wǎng)絡或直接連接的有線介質,以及諸如聲學、RF、紅外線和其它無線介質的無線介質。上述中任一個的組合也應包括在計算機可讀介質的范圍之內(nèi)。
系統(tǒng)存儲器130包括易失性和/或非易失性存儲器形式的計算機存儲介質,諸如只讀存儲器(ROM) 131和隨機存取存儲器(RAM) 132。基本輸入/輸出系統(tǒng)133(BIOS)包含有助于諸如啟動時在計算機110中元件之間傳遞信息的基本例程,它通常被存儲在ROM 131中。RAM 132通常包含處理單元120可以立即訪問和/或目前正在操作的數(shù)據(jù)和/或程序模塊。作為示例而非限制,圖1示出了操作系統(tǒng)134、應用程序135、其它程序模塊136和程序數(shù)據(jù)137。
計算機110也可以包括其它可移動/不可移動、易失性/非易失性計算機存儲介質。僅作為示例,圖l示出了從不可移動、非易失性磁介質中讀取或向其寫入的硬盤驅動器140,從可移動、非易失性磁盤152中讀取或向其寫入的磁盤驅動器151,以及從諸如CD ROM或其它光學介質等可移動、非易失性光盤156中讀取或向其寫入的光盤驅動器155??梢栽谑纠圆僮鳝h(huán)境下使用的其它可移動/不可移動、易失性/非易失性計算機存儲介質包括但不限于,盒式磁帶、閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅動器141通常由諸如接口 140的不可移動存儲器接口連接至系統(tǒng)總線121,磁盤驅動器151和光盤驅動器155通常由諸如接口 150的可移動存儲器接口連接至系統(tǒng)總線121。
以上描述和在圖1中示出的驅動器及其相關聯(lián)的計算機存儲介質為計算機110提供了對計算機可讀指令、數(shù)據(jù)結構、程序模塊和其它數(shù)據(jù)的存儲。例如,在
圖1中,硬盤驅動器141被示為存儲操作系統(tǒng)144、應用程序145、其它程序模塊146和程序數(shù)據(jù)147。注意,這些組件可以與操作系統(tǒng)134、應用程序135、其它程序模塊136和程序數(shù)據(jù)137相同或不同。操作系統(tǒng)144、應用程序145、其它程序模塊146和程序數(shù)據(jù)147在這里被標注了不同的標號是為了說明至少它們是不同的副本。用戶可以通過輸入設備,諸如鍵盤162和定點設備161 (通常指鼠標、跟蹤球或觸摸墊)向計算機20輸入命令和信息。其它輸入設備(未示出)可以包括麥克風、操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸入設備通常由耦合至系統(tǒng)總線的用戶輸入接口 160連接至處理單元120,但也可以由其它接口或總線結構如并行端口、游戲端口或通用串行總線(USB)連接。監(jiān)視器191或其它類型的顯示設備也經(jīng)由接口如視頻接口 190連接至系統(tǒng)總線121。除監(jiān)視器以外,計算機也可以包括其它外圍輸出設備,如揚聲器197和打印機196,它們可以通過輸出外圍接口 190連接。
計算機110可使用至一個或多個遠程計算機如遠程計算機180的邏輯連接在網(wǎng)絡化環(huán)境下操作。遠程計算機180可以是個人計算機、服務器、路由器、網(wǎng)絡PC、對等設備或其它常見網(wǎng)絡節(jié)點,且通常包括上文相對于計算機110描述的許多或所有元件,盡管在圖1中只示出存儲器存儲設備181。圖1中所示邏輯連接包括局域網(wǎng)(LAN) 171和廣域網(wǎng)(WAN) 173,但也可以包括其它網(wǎng)絡。這樣的聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍計算機網(wǎng)絡、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。
當在LAN聯(lián)網(wǎng)環(huán)境中使用時,計算機IIO通過網(wǎng)絡接口或適配器170連接至LAN 171。當在WAN聯(lián)網(wǎng)環(huán)境中使用時,計算機IIO通常包括調(diào)制解調(diào)器172或用于在諸如因特網(wǎng)等WAN 173上建立通信的其它裝置。調(diào)制解調(diào)器172可以是內(nèi)置或外置的,它可以通過用戶輸入接口 160或其它合適的機制連接至系統(tǒng)總線121。在網(wǎng)絡化環(huán)境中,相對于計算機UO描述的程序模塊或其部分可以存儲在遠程存儲器存儲設備中。作為示例而非限制,圖1示出了遠程應用程序185駐留在存儲器設備181上??梢岳斫猓镜木W(wǎng)絡連接是示例性的,且可以使用在計算機之間建立通信鏈路的其它手段。
示例分布式計算架構或體系機構考慮到個人計算和因特網(wǎng)的會聚,已經(jīng)開發(fā)了并正在開發(fā)各種分布式計算架構。向個人和企業(yè)用戶同樣地提供用于應用程序和計算設備的無縫的可共同操作并
可使用web的接口,使計算活動日益面向web瀏覽器或網(wǎng)絡。
例如,MICROSOFT⑧的.NET平臺包括服務器、諸如基于web的數(shù)據(jù)存儲的構件塊服務以及可下載設備軟件。 一般而言,.NET平臺提供(1)使整個范圍內(nèi)的計算設備一起工作并在所有計算設備上自動更新和同步化用戶信息,(2)通過更多地使用XML而非HTML來增加web站點的交互能力,(3)以從中心起點至用戶的產(chǎn)品和服務的定制訪問和傳遞為特征的在線服務,這種訪問和傳遞用于管理諸如(例如)電子郵件的各種應用程序或諸如Office.NET的軟件,(4)集中化的數(shù)據(jù)存儲,這將增加訪問信息的效率和簡易性,并在用戶和設備之間同步信息,(5)集成諸如電子郵件、傳真和電話等各種通信介質的能力,(6)對開發(fā)人員而言,創(chuàng)建可重用模塊的能力,從而增加生產(chǎn)率并減少編程錯誤的次數(shù),以及(7)眾多其它跨平臺集成特征。
盡管此處結合駐留在計算設備上的軟件描述了示例實施例,但本發(fā)明的一個或多個部分也可經(jīng)由操作系統(tǒng)、API或協(xié)處理器與請求對象之間的中間件來實現(xiàn),使得可經(jīng)由所有的.NET語言和服務并在其它分布式計算框架中執(zhí)行、支持或訪問諸服務。
數(shù)據(jù)庫環(huán)境
在以下的討論中,假定本領域的技術人員熟悉結合數(shù)據(jù)庫的FILESTREAM數(shù)據(jù)存儲屬性的實現(xiàn)。此類問題在于2003年1月29日提交的、題為"FILESTREAMData Storage Attribute(FILESTREAM數(shù)據(jù)存儲屬性)"的美國專利申請第10/353,730號以及2003年1月29日提交的、題為"Logical Pathname as a Reference Mechanismfor Data (作為數(shù)據(jù)引用機制的邏輯路徑名)"的美國專利申請第10/353,545號中討論,這些專利申請均整體引用在此作為參考。從而,為清楚起見,此處將忽略此類問題的細節(jié)。
然而,為了提供附加的背景信息以將以下實施例的討論置于上下文中,圖2示出了可在其中實現(xiàn)本發(fā)明的各方面的示例數(shù)據(jù)庫配置?,F(xiàn)在參考圖2,可實現(xiàn)三種機制來扮演三個不同的角色(1)客戶機280,可由其針對數(shù)據(jù)庫210啟動查詢來定位和操作相關信息;(2)主存數(shù)據(jù)庫210的數(shù)據(jù)庫服務器200;以及(3)FILESTREAM服務器240,它管理可在其上存儲與給定數(shù)據(jù)庫210相關聯(lián)的FILESTREAM值(或文件)的文件系統(tǒng)巻225,并支持對數(shù)據(jù)庫210的頻帶外更新。可以理解,F(xiàn)ILESTREAM文件可對應于正被存儲在數(shù)據(jù)庫列中的BLOB。每一數(shù)據(jù)庫可含有一個或多個FILESTREAM分組215,且每一 FILESTREAM分組215可包括一個或多個巻225。諸巻可駐留在FILESTREAM服務器240上。在示例數(shù)據(jù)庫安裝中,可存在數(shù)千客戶機、數(shù)十個FILESTREAM服務器和一個數(shù)據(jù)庫服務器。當其上存儲FILESTREAM的巻與數(shù)據(jù)庫并置時,會產(chǎn)生專門的配置。
可提供注冊機制,借此利用定位器服務注冊與包含F(xiàn)ILESTREAM值的所有文件系統(tǒng)巻225相關聯(lián)的標識符(例如,GUID),以允許客戶機280與FILESTREAM服務器240建立網(wǎng)絡連接。而且,(諸)數(shù)據(jù)庫服務器200注冊其所主存的數(shù)據(jù)庫210的標識符(例如,GUID)。這樣的定位器服務的一種可能實現(xiàn)可以是將巻GUID和數(shù)據(jù)庫GUID映射到IP地址的域名系統(tǒng)(DomainName System, DNS)服務。
可在一協(xié)議上構建FILESTREAM服務器240和客戶機重定向器,以便維護SQL數(shù)據(jù)庫服務器200與FILESTREAM服務器240之間SQL元數(shù)據(jù)和FILESTREAM值數(shù)據(jù)的相干性。在客戶機一側,協(xié)議擴展允許客戶機280處理從數(shù)據(jù)庫服務器200到FILESTREAM服務器240的重定向請求。為了便于從數(shù)據(jù)庫服務器200到各個FILESTREAM服務器240的活動的最佳下載,協(xié)議擴展可包括交換關于各個表的元數(shù)據(jù)中的改變的通知的能力,例如,添加約束、觸發(fā)事件或列,以及刪除觸發(fā)事件、約束或列。被實現(xiàn)為SQL堆棧一部分的FILESTREAM訪問模塊等可包含在FILESTREAM服務器240上啟動高速緩存元數(shù)據(jù)的傳播/失效以及確保它們與對數(shù)據(jù)庫服務器200上的元數(shù)據(jù)改變同步所需的標注(callout)。
存在其中圖2中所示的三種機器配置可被壓縮成較少機器的某些情況。在一個場景中,例如,包含F(xiàn)ILESTREAM數(shù)據(jù)的文件系統(tǒng)巻可被主存在與數(shù)據(jù)庫(例如,SQL)服務器相同的機器上。在另一示例場景中,可從主存SQL服務器的機器訪問該表。從底層體系結構角度來看,這可轉換成訪問網(wǎng)絡上的資源或本地資源。
示例實施例
一實施例提供用于維護數(shù)據(jù)庫列(例如,結構化數(shù)據(jù))與文件系統(tǒng)中其相應的FILESTREAM數(shù)據(jù)(例如,非結構化數(shù)據(jù))之間的事務鏈接級一致性的機制。如此處所使用,事務鏈接級一致性對響應于其中諸如(例如)SQL數(shù)據(jù)庫等的數(shù)據(jù)庫就文件和目錄的名字、位置等而言具有文件和目錄的準確狀況的一種狀態(tài)。例如,如果數(shù)據(jù)庫相信存在具有給定名稱的文件或目錄,則文件系統(tǒng)中一定存在該具有給定名稱的文件或目錄。同樣地,如果數(shù)據(jù)庫不相信存在一文件或目錄,則文件系統(tǒng)中一定不存在該文件或目錄。在一個實施例中,可保持事務一致性的文件和/或目錄操作類型可包括,例如,創(chuàng)建、刪除和/或重命名。如上所述,失去事務鏈接級一致性可能引起錯誤、數(shù)據(jù)破壞或甚至系統(tǒng)崩潰,這是因為這樣的狀態(tài)會導致數(shù)據(jù)不一致性。在系統(tǒng)崩潰的情況中,可能失去鏈接級一致性。從而,如果要恢復數(shù)據(jù)庫操作,則在崩潰或其它系統(tǒng)故障之后重建鏈接級一致性的能力是非常重要的。
為了能夠維護事務鏈接級一致性, 一個實施例可在執(zhí)行文件系統(tǒng)操作之前將取消和重做信息均記入日志。在這樣的實施例中,可在更新日志序列號(LogS叫uence Number, "LSN")的條件下恢復重做操作,因為邏輯運算在文件系統(tǒng)中不是冪等的。而且, 一個實施例可按照在文件系統(tǒng)元數(shù)據(jù)被保存到磁盤之前刷新日志記錄的方式來操作,以便于在恢復期間需要回滾數(shù)據(jù)庫事務的情況中實現(xiàn)文件系統(tǒng)回滾效果。最后,應在某時刻將文件系統(tǒng)結果刷新到磁盤,以允許截短曰志,從而節(jié)省存儲空間。
因此, 一個實施例提供了用于將文件系統(tǒng)操作(例如在文件或目錄上執(zhí)行的操作)記錄在數(shù)據(jù)庫日志和文件系統(tǒng)目錄中的機制。 一個實施例的機制是通過利用諸如例如NTFS的常見文件系統(tǒng)中存在的"排序屬性"以高效方式(例如,無需強制刷新至數(shù)據(jù)庫日志)使用以上日志記錄技術來實現(xiàn)預寫式日志。"排序特性"規(guī)定,如果文件系統(tǒng)對文件或目錄進行了改變J,然后對文件或目錄進行了改變凡則在崩潰重啟之后,文件系統(tǒng)永遠不會在沒有改變j的情況下具有改變S。換言之,無論崩潰的原因是什么,系統(tǒng)崩潰的時刻("崩潰點")可能產(chǎn)生沒有任何改變、僅產(chǎn)生改變J、或產(chǎn)生改變^和凡但不會在沒有改變^的情況下產(chǎn)生改變仏除非文件系統(tǒng)自身被破壞。此外, 一個實施例可使用數(shù)據(jù)庫恢復框架的現(xiàn)有組件而無需外部協(xié)調(diào)器或事務化文件系統(tǒng)。結果,因為一個實施例的相對簡單和有效的操作而可被廣泛部署。
在上述數(shù)據(jù)庫環(huán)境中,可將FILESTREAM數(shù)據(jù)文件組織成給定數(shù)據(jù)庫的特定目錄。在一個實施例中,每個FILESTREAM文件可具有一路徑名,其中該路徑名編碼可在其中出現(xiàn)該文件的行(可由文件名表示)、歹(J、表和數(shù)據(jù)庫。例如,F(xiàn)ILESTREAM文件相對于文件流分組的根的示例路徑名可以是VFY^E^TW^Af-t/ara- co"ta/"£r\to6/e\co/wm"\TOwgwW??稍诶鐒h除或添加列、表重命名等更改表結構的操作過程期間改變目錄結構。在每一情況中,可獲取適當?shù)逆i定以便在任何這樣的表結構操作期間排除操作表內(nèi)諸行的操作。換言之,數(shù)據(jù)庫管 理系統(tǒng)可使文件系統(tǒng)對象(文件或目錄)上所執(zhí)行的諸并發(fā)文件系統(tǒng)操作串行化, 其中諸并發(fā)文件系統(tǒng)操作都是沿著文件系統(tǒng)分層結構中的同一祖先鏈。
可以理解, 一個實施例利用對這樣的目錄規(guī)則的知識來維護事務鏈接級一致 性。此外, 一個實施例還將基于文件系統(tǒng)日志的利用語義的恢復和隔離算法
(Algorithms for Recovery and Isolation Exploiting Semantics , "ARIES")恢復方 法與數(shù)據(jù)庫管理系統(tǒng)的ARIES恢復方法進行組合。以此方式,每一系統(tǒng)的恢復都 是彼此獨立的,而當由一個實施例組合時,諸恢復給數(shù)據(jù)庫數(shù)據(jù)和文件系統(tǒng)數(shù)據(jù)帶 來事務鏈接級一致性。ARIES恢復系統(tǒng)應為本領域的技術人員所知,因而為清楚 起見,其實現(xiàn)細節(jié)將不被包括在此。
數(shù)據(jù)庫管理系統(tǒng)的ARIES恢復與文件系統(tǒng)的ARIES恢復的這種組合可由實施 例對(例如)用于在文件系統(tǒng)中日志記錄的目的的文件名的使用而允許。在這樣的 實施例中,特定操作的LSN可被編碼成文件的名字。文件的同一名字也可與經(jīng)歷 文件系統(tǒng)改變的文件系統(tǒng)對象(文件或目錄)的名字一起編碼??梢岳斫猓@樣的 基于文件名的日志記錄(即,將LSN與文件系統(tǒng)對象名聯(lián)系起來)避免了與基于 文件ID日志記錄相關聯(lián)的問題,因為文件ID在數(shù)據(jù)庫還原之后可能會由文件系 統(tǒng)重新分配,從而對日志記錄目的而言不夠穩(wěn)定。
因此,可結合使用FILESTREAM數(shù)據(jù)屬性來存儲BLOB的數(shù)據(jù)庫實現(xiàn)一個實 施例。在這樣的數(shù)據(jù)庫中,文件系統(tǒng)操作(例如,創(chuàng)建、重命名或刪除BLOB)被 記入數(shù)據(jù)庫日志和文件系統(tǒng)日志中。當在文件系統(tǒng)日志中記入該操作時,該操作可
被記錄為零字節(jié)文件(這樣的零字節(jié)文件此處被稱為"文件系統(tǒng)日志條目")。可 向每一數(shù)據(jù)庫日志記錄分配一 LSN。在文件系統(tǒng)日志條目的情況中,可使用相應 的數(shù)據(jù)庫日志記錄的LSN并將其編碼到文件名中。文件名也可包含描述正在記入 曰志的操作的其它經(jīng)編碼的信息。可以理解,正如將在以下描述的那樣,這樣的編 碼僅將LSN和其它操作描述符信息置入文件名內(nèi)而沒有任何附加處理,或者LSN 和任何其它信息可按照任何類型的格式存儲,例如使用算法加密等。
在操作中, 一個實施例規(guī)定,當要執(zhí)行文件系統(tǒng)操作時,首先將該操作記入 數(shù)據(jù)庫日志中,然后記入文件系統(tǒng)日志,然后執(zhí)行該文件系統(tǒng)操作。通過規(guī)定在實 際文件系統(tǒng)操作之前輸入日志條目,恢復方法應能夠確定如何取消任何操作,因為 無論何時進行了操作本身或操作需要被回滾,操作的文件系統(tǒng)日志條目都將存在。
可使用文件系統(tǒng)文件夾來將文件系統(tǒng)記入日志以實現(xiàn)預寫式日志。例如,在文件夾Z下創(chuàng)建文件^之前,將在名為IOG的文件系統(tǒng)文件夾中創(chuàng)建名為 LOGLY~ALS7\^Ya"-/Z).C>eafc的文件。該文件名內(nèi)編碼了足夠的信息以表示正被執(zhí) 行的動作(作為分別表示LSN、事務ID、文件名和創(chuàng)建操作的描述符的^LSV、 Ab"-/£ 、 ^和Oe^e )。在一個實施例中,在創(chuàng)建操作執(zhí)行之前存儲該文件名。 從而,上述排序特性指示,如果爿存在,則ZC>(7L^^.LSAa"a"-/Z).Oea/e日志條 目也一定存在。 一個實施例可在操作要被回滾的情況中使用該知識。注意,在NTFS 中,如果上述"排序特性"僅適用于同一巻,則一個實施例可能要求文件系統(tǒng)日志 文件夾在與文件系統(tǒng)數(shù)據(jù)相同的巻上并置。
對于刪除目錄和/或文件中任一個, 一個實施例規(guī)定,對要刪除的項目重命名, 使得在回滾的情況中,該項目可被還原??梢岳斫?,如果要刪除的項目實際被刪除 而不是被重命名,則刪除操作的回滾將是不可能的,因為沒有可還原該項目的數(shù)據(jù)。 一個實施例可為此目的而使用(例如)名為1)£丄£7^£)的文件系統(tǒng)文件夾。
既然討論了示例文件日志記錄操作,將討論涉及崩潰恢復的實施例。可以理 解,在系統(tǒng)崩潰的情況中,在崩潰點,日志條目和/或文件系統(tǒng)操作中的一個或多 個可能不會發(fā)生。當要重啟數(shù)據(jù)庫時,日志可能處于由崩潰所導致的各種配置中。 圖3A-C示出了因系統(tǒng)故障諸如崩潰等而可能導致的三種示例日志情形。
圖3A示出了其中記錄日志條目的數(shù)據(jù)庫日志302和文件系統(tǒng)日志304。崩潰 點310表示系統(tǒng)停止操作的時間,無論是由于系統(tǒng)崩潰、錯誤還是其它。可見,曰 志302和304在圖3A中被表示為時間線,日志302和304的左側在時間上更早, 而右側在時間上更近。操作J和B表示具有適當LSN的日志條目。因此,圖3A 中可見一種場景,其中數(shù)據(jù)庫日志302記錄了改變^和凡而文件系統(tǒng)日志304 僅具有改變J。被記錄到文件系統(tǒng)日志304中的操作J可具有如上所述的文件名。 正如將在以下結合圖4討論的那樣, 一個實施例可完全基于數(shù)據(jù)庫日志302來執(zhí)行 ARIES恢復,因為數(shù)據(jù)庫日志302比文件系統(tǒng)日志304捕捉的信息更多。
圖3B表示一種場景,其中數(shù)據(jù)庫日志302和文件系統(tǒng)日志304均在崩潰點之 前刷新了改變^和S。在這樣的情形中,實施例也可完全基于數(shù)據(jù)庫日志302來執(zhí) 行ARIES恢復,因為數(shù)據(jù)庫日志至少捕捉與文件系統(tǒng)日志304所捕捉的信息相同 量的信息。
圖3C表示一種考慮一般涉及數(shù)據(jù)庫日志的某些實際問題的場景。盡管如上所 述, 一個實施規(guī)定數(shù)據(jù)庫日志302可在文件系統(tǒng)日志304之前被更新,但數(shù)據(jù)庫日 志記錄可能還是未能以足夠的頻率被刷新,以在文件系統(tǒng)日志條目被提交給文件系統(tǒng)日志304之前將日志記錄提交給數(shù)據(jù)庫日志302??梢岳斫猓⑿氯罩拘枰_銷 甚多的系統(tǒng)I/O操作。因此,當數(shù)據(jù)庫被配置成以較低的頻率來刷新其日志記錄/ 條目作為獲得更高處理速度的折衷時,可能會出現(xiàn)某些情況。從而,圖3C表示改 變^被記入到數(shù)據(jù)庫日志302和文件系統(tǒng)日志304中,但僅在文件系統(tǒng)日志304 中被提交,從而在系統(tǒng)崩潰之后,改變S僅保留在文件系統(tǒng)日志304中。因此, 在崩潰重啟之后,即使首先為數(shù)據(jù)庫日志302創(chuàng)建了日志記錄,改變S也僅被記 入文件系統(tǒng)日志304中。正如將在以下結合圖4討論的那樣,在這樣的情形中,一 個實施例可將文件系統(tǒng)日志304作為數(shù)據(jù)庫日志302的邏輯擴展,其中數(shù)據(jù)庫日志 302未捕捉的關于文件系統(tǒng)的附加信息可被用于將文件系統(tǒng)回滾到與數(shù)據(jù)庫曰志 302的崩潰點一致的狀態(tài)。
現(xiàn)在參考圖4,提供表示用于在系統(tǒng)崩潰等之后恢復數(shù)據(jù)庫的示例方法400 的流程圖??梢岳斫?,示例方法400包括ARIES算法。此外應理解,示例方法400 可回顧上面結合圖3A-C所描述的數(shù)據(jù)庫和文件系統(tǒng)日志。
因此,在步驟401,分析諸如上面結合圖3A-C所描述的數(shù)據(jù)庫日志302的數(shù) 據(jù)庫日志來找出自檢查點以來積累的所有日志記錄等,包括含有最近LSN的日志 記錄。應理解,在一個實施例中,步驟401可以像在典型ARIES分析階段中那樣 進行,其中一個實施例收集活動事務,以便在回滾時標識需要被回滾的事務。
在步驟403中,可通過根據(jù)日志記錄中所存儲的信息有條件地重新應用文件 系統(tǒng)改變來前滾(roll forward)數(shù)據(jù)庫日志,如上面結合圖3A-C所討論的數(shù)據(jù)庫 日志302。對每個日志記錄,重做操作可以兩個LSN之間的比較為條件,即日志 記錄本身的LSN (例如,出于例示目的的"LSN1"),以及被記入到對應于重做 信息的文件或目錄名或者任何祖先目錄的文件系統(tǒng)日志文件夾中的最大的LSN(例 如,出于例示目的的"LSN2")。如果LSN1大于LSN2,則指示基于上述"排 序特性",文件系統(tǒng)改變的文件系統(tǒng)日志條目未被提交給磁盤。此外這還指示,實 際的文件系統(tǒng)改變也未被提交給磁盤,因為如上所述實際文件系統(tǒng)改變總是在創(chuàng)建 文件系統(tǒng)日志條目之前進行。在這種情況中,執(zhí)行數(shù)據(jù)庫日志記錄中所述的文件系 統(tǒng)改變的重做。
如果LSN1小于LSN2,則實際的文件系統(tǒng)改變已被提交給磁盤。這是因為, 如上所述,在保存FILESTREAM數(shù)據(jù)的數(shù)據(jù)庫中,對同一文件/目錄名及其祖先的 改變是串行化的。換言之,帶有LSN2的文件系統(tǒng)日志條目將不會被創(chuàng)建,直到對 應于LSN1的文件系統(tǒng)改變被首先完成。"排序特性"保證,如果帶有LSN2的文件系統(tǒng)日志條目已被提交給磁盤,則對應于LSN1的文件系統(tǒng)改變也一定已被提交 給磁盤。因此,在這種情況中,跳過重做。
如果LSN1等于LSN2,則實際的文件系統(tǒng)改變有可能已提交給磁盤,也有可 能未提交給磁盤。在這種情況中, 一個實施例可基于文件系統(tǒng)的實際狀態(tài)來確定該 改變是否需要被重新應用。例如,如果日志記錄/條目描述了 "創(chuàng)建文件A",然 后可檢査文件系統(tǒng)來查看文件"A"是否已經(jīng)存在。如果是,則無需重新應用改變。 如果文件"A"不存在,則將重新創(chuàng)建文件"A"。應理解,在一個實施例中,步 驟403可像在典型ARIES重做階段中那樣進行。
在步驟405,取決于數(shù)據(jù)庫和文件系統(tǒng)日志的狀態(tài),作出關于所需的恢復類型 的判斷。此外,可結合步驟405采取準備恢復的步驟。例如,日志可處于以上結合 步驟403和圖3A-C討論的任何情形中。在一個實施例中,可掃描文件系統(tǒng)日志文 件夾中經(jīng)過相應的數(shù)據(jù)庫日志末端的每一文件并將其文件名記錄在存儲器中。然后 諸文件名可按照(例如)LSN順序來排序,以允許根據(jù)用于前滾和回滾的諸LSN 的順序或逆序等的掃描次序。含有超出數(shù)據(jù)庫日志末端LSN的諸LSN的日志條目 需要被回滾,因為一個實施例可將文件系統(tǒng)恢復到由數(shù)據(jù)庫日志的末端所反映的狀 態(tài)。如果步驟405發(fā)現(xiàn)文件系統(tǒng)日志中沒有日志條目帶有大于數(shù)據(jù)庫日志末端LSN 的LSN,則一個實施例可跳過下述步驟407和409。以上結合圖3A-B描述了這樣 的情況。
在步驟407,以步驟405按基于LSN的升序記錄在存儲器中的每個文件系統(tǒng) 日志條目為基礎,前滾過程有條件地執(zhí)行重做操作。在一個實施例中,實際的條件 重做算法可與以上結合步驟403所述的完全相同。在步驟409,能以步驟406按基 于LSN的降序記錄在存儲器中的文件系統(tǒng)日志條目為基礎來執(zhí)行回滾過程。如本 領域的技術人員應該知道,文件系統(tǒng)的日志文件夾中取消操作的執(zhí)行可生成補償日 志記錄(Compensation Log Record , "CLR")。這樣的CLR可能需要被追加到 文件系統(tǒng)日志文件夾中而不會被追加到數(shù)據(jù)庫日志中。在文件系統(tǒng)日志中完成了回 滾過程之后,所有的文件系統(tǒng)結果可被刷新,以使得可以刪除帶有大于數(shù)據(jù)庫曰志 末端LSN的諸LSN的文件系統(tǒng)日志條目。
可以理解,這樣的操作是重要的,因為一旦任何后續(xù)數(shù)據(jù)庫日志回滾開始, 回滾過程可開始將諸CLR記入數(shù)據(jù)庫日志和文件系統(tǒng)日志內(nèi)。結果,如果超出數(shù) 據(jù)庫日志末端LSN的文件系統(tǒng)日志未被清除,則可能存在由數(shù)據(jù)庫日志的回滾 CLR日志記錄活動引起的LSN沖突。為了刷新文件系統(tǒng), 一個實施例可跟蹤直到步驟409結束受到影響的所有文件,然后刷新這些文件中的每一個。 一個實施例也
可利用文件系統(tǒng)的"排序特性"來簡單地創(chuàng)建新的臨時文件,刷新該臨時文件,隨 后刪除它。該新文件創(chuàng)建和刷新使得所有之前的文件系統(tǒng)改變(例如,創(chuàng)建、刪除、
重命名)也被刷新,否則"排序特性"就不再有效。從而,步驟409完成時,將文 件系統(tǒng)回滾至由數(shù)據(jù)庫日志末端所反映的狀態(tài)。
在一個實施例中,取消操作不會占用額外的磁盤空間。例如,文件創(chuàng)建的取 消僅釋放磁盤資源。文件刪除的取消可僅重命名現(xiàn)有文件而不會增加磁盤空間使 用??梢岳斫?,這樣的特征在磁盤空間幾乎完全耗盡的情況中是重要的。
在步驟411,可以從數(shù)據(jù)庫日志的末端到最舊的活動LSN進行回滾。應該理 解,在一個實施例中,步驟411可以像在典型ARIES取消階段中那樣進行。 一旦 完成步驟411,數(shù)據(jù)庫和文件系統(tǒng)就被恢復到互相一致的狀態(tài)。
從而,在步驟413,可在接受任何新文件系統(tǒng)操作之前執(zhí)行檢查點操作。以此 方式,如果在將來出現(xiàn)系統(tǒng)錯誤如崩潰等,則不必為相同操作重復以上結合步驟 40卜411所進行的恢復過程。
可以理解,通過將ARIES方法集成到一個實施例的數(shù)據(jù)庫和文件系統(tǒng)恢復方 法來實施圖4的方法400。然而也應理解, 一個實施例可以集成不同于ARIES操 作的元素。例如,現(xiàn)在轉到圖5,例示了回滾具有諸CLR的文件系統(tǒng)日志的示例 方法500。方法500結合以上結合圖4討論的方法400實施。在典型的ARIES恢 復中,諸CLR是不可取消的。正如以下討論中將會看到的那樣, 一個實施例允許 對諸CLR執(zhí)行這樣的取消操作。
從而,在步驟501,對日志記錄是否是非CLR日志記錄作出判斷。如果是, 則在步驟505,對日志記錄是否由CLR補償作出進一步判斷。如果不是,則在步 驟509執(zhí)行取消操作。如果是,則在步驟507跳過取消操作。如果步驟501中作出 的判斷的結果是該日志記錄不是非CLR記錄(即,該日志記錄是CLR記錄),則 在步驟503作出關于該日志記錄是否是補償了位于數(shù)據(jù)庫日志末端之前的日志記 錄的CLR (如由諸LSN等確定)的判斷。如果是,則在步驟509,對該記錄執(zhí)行 取消操作。如果否,則該日志記錄是補償位于數(shù)據(jù)庫日志末端之后的日志記錄的 CLR。在這樣的情況中,在步驟507,跳過取消操作??梢岳斫?,取消CLR可能 會使另一CLR被記入日志(指示之前CLR的取消)。然而, 一個實施例考慮因 為特定文件系統(tǒng)操作的恢復操作可導致在文件系統(tǒng)日志中生成最多兩條CLR,因 此文件系統(tǒng)日志空間預留應該(例如)保證預留了用于創(chuàng)建表示兩個單獨CLR的兩個文件的足夠空間。
應該理解,上述處理CLR的過程避免了存儲跨文件系統(tǒng)日志回滾和數(shù)據(jù)庫日 志回滾的任何持續(xù)狀態(tài),使得每一個回滾進程彼此獨立。其它實施例可持久記住關 于數(shù)據(jù)庫日志中的哪些日志記錄已由文件系統(tǒng)日志中的CLR補償?shù)倪@種狀態(tài),同 時遵循ARIES算法來跳過對CLR的取消操作。
也可以理解, 一個實施例可選擇排他地根據(jù)文件系統(tǒng)日志文件夾來實現(xiàn)上述 日志記錄和恢復,而不必在數(shù)據(jù)庫日志中重復記錄。然而, 一個實施例考慮到數(shù)據(jù) 庫日志記錄設備的性能通常遠優(yōu)于基于文件系統(tǒng)文件夾的日志的性能。從而, 一個 實施例基于數(shù)據(jù)庫日志來執(zhí)行恢復操作,僅使用文件系統(tǒng)日志作為數(shù)據(jù)庫日志未捕 獲的那些操作的擴展。結果,相比于單單使用文件系統(tǒng)日志,總體的恢復性能得到 改善。
盡管結合各個附圖的諸實施例描述了本發(fā)明,可以理解,可使用其它類似的 實施例,或可對所述實施進行修改和添加以便執(zhí)行本發(fā)明的相同功能而不與之背 離。從而,本發(fā)明應不限于任何單個實施例,而應根據(jù)所附權利要求書的廣度和范 圍來解釋。
權利要求
1. 一種維護數(shù)據(jù)庫與文件系統(tǒng)之間的事務鏈接級一致性的方法,包括將文件系統(tǒng)改變記入數(shù)據(jù)庫日志的記錄中;在文件系統(tǒng)日志文件夾中創(chuàng)建對應于所述文件系統(tǒng)改變的文件;以及在重啟恢復中,基于所述數(shù)據(jù)庫日志,執(zhí)行分析操作和條件重做操作;基于所述文件系統(tǒng)日志,執(zhí)行條件重做操作和取消操作;以及基于所述數(shù)據(jù)庫日志,執(zhí)行取消操作。
2. 如權利要求l所述的方法,其特征在于,進一步包括創(chuàng)建與所述文件相關 聯(lián)的文件名。
3. 如權利要求2所述的方法,其特征在于,所述文件名包括對應于所述文件 系統(tǒng)改變的文件系統(tǒng)對象名、日志序列號、事務標識符和操作描述符。
4. 如權利要求2所述的方法,其特征在于,進一步包括在所述文件名中記錄 所述數(shù)據(jù)庫日志記錄的日志序列號,其中所述日志序列號對應于所述文件系統(tǒng)改變。
5. 如權利要求l所述的方法,其特征在于,所述記入步驟和創(chuàng)建步驟在所述 文件系統(tǒng)改變執(zhí)行之前進行。
6. 如權利要求5所述的方法,其特征在于,所述記入步驟在所述創(chuàng)建步驟之前進行。
7. 如權利要求l所述的方法,其特征在于,所述數(shù)據(jù)庫日志和所述文件系統(tǒng) 日志文件夾分別包括多項記錄和多個文件,所述方法進一步包括把與所述文件系統(tǒng)改變相關聯(lián)的日志序列號記錄到所述多項記錄的其中之選擇所述多項記錄的其中之一,其中所述執(zhí)行條件重做操作步驟進一步包括將與所述文件系統(tǒng)改變相關聯(lián) 的最大日志序列號同與所選擇的記錄相關聯(lián)的日志序列號進行比較。
8. 如權利要求7所述的方法,其特征在于,如果與所選擇的記錄相關聯(lián)的所述日志序列號大于或等于與所述文件系統(tǒng)改變相關聯(lián)的最大日志序列號,則對所述 文件執(zhí)行所述條件重做操作。
9. 如權利要求1所述的方法,其特征在于,所述文件系統(tǒng)改變是對存儲在所 述文件系統(tǒng)中的二進制大對象數(shù)據(jù)做出的。
10. 如權利要求1所述的方法,其特征在于,所述文件系統(tǒng)改變是對所述文 件系統(tǒng)的文件或目錄做出的。
11. 如權利要求1所述的方法,其特征在于,所述對數(shù)據(jù)庫日志執(zhí)行分析操作、條件重做操作和取消操作的各步驟是根據(jù)利用語義的恢復和隔離算法(ARIES) 執(zhí)行的。
12. 如權利要求1所述的方法,其特征在于,所述對文件執(zhí)行條件重做操作 和取消操作的各步驟是根據(jù)ARIES執(zhí)行的。
13. 如權利要求1所述的方法,其特征在于,所述文件是第一文件,所述方 法進一步包括通過創(chuàng)建和刷新第二文件來執(zhí)行文件系統(tǒng)刷新操作。
14. 一種維護數(shù)據(jù)庫與文件系統(tǒng)之間的事務鏈接級一致性的方法,包括 將文件系統(tǒng)改變記入含有多項記錄的數(shù)據(jù)庫日志的記錄中; 向所述記錄分配第一日志序列號;在含有多個日志序列號的文件系統(tǒng)日志文件夾中創(chuàng)建具有文件名且對應于所 述文件系統(tǒng)改變的文件;將所述第一日志序列號編碼到所述文件名中;以及在重啟恢復中,對所述數(shù)據(jù)庫日志執(zhí)行分析操作和條件重做操作;選擇所述多項記錄之一;將與所選擇的記錄相關聯(lián)的日志序列號同與所述文件系統(tǒng)改變相關聯(lián) 的最大日志序列號進行比較;如果與所選擇的記錄相關聯(lián)的所述日志序列號大于或等于與所述文件 系統(tǒng)改變相關聯(lián)的最大日志序列號,則重做一日志記錄;基于所述文件系統(tǒng)日志文件夾執(zhí)行取消操作;以及基于所述數(shù)據(jù)庫日志執(zhí)行取消操作。
15. 如權利要求14所述的方法,其特征在于,所述文件名進一步包括對應于 所述文件系統(tǒng)改變的文件系統(tǒng)對象名、事務標識符和操作描述符。
16. 如權利要求14所述的方法,其特征在于,所述記入步驟和創(chuàng)建步驟在所 述文件系統(tǒng)改變執(zhí)行之前進行,且其中所述記入步驟在所述創(chuàng)建步驟之前進行。
17. 如權利要求14所述的方法,其特征在于,所述文件系統(tǒng)改變是對存儲在 所述文件系統(tǒng)中的二進制大對象數(shù)據(jù)做出的。
18. 如權利要求14所述的方法,其特征在于,所述基于數(shù)據(jù)庫日志執(zhí)行分析 操作、條件重做操作和取消操作以及基于文件系統(tǒng)日志執(zhí)行條件重做操作和取消操作的各步驟是根據(jù)利用語義的恢復和隔離算法(ARIES)執(zhí)行的。
19. 如權利要求14所述的方法,其特征在于,所述文件是第一文件,所述方 法進一步包括通過創(chuàng)建和刷新第二文件來執(zhí)行文件系統(tǒng)刷新操作。
20. —種含有計算機可執(zhí)行指令的計算機可讀介質,所述計算機可執(zhí)行指令 用于執(zhí)行維護數(shù)據(jù)庫與文件系統(tǒng)之間的事務鏈接級一致性的方法,所述方法包括.-將文件系統(tǒng)改變記入數(shù)據(jù)庫日志的記錄中;在文件系統(tǒng)文件夾中創(chuàng)建對應于所述文件系統(tǒng)改變的文件;以及在重啟恢復中,基于所述數(shù)據(jù)庫日志執(zhí)行分析操作和條件重做操作; 基于所述文件系統(tǒng)日志文件夾執(zhí)行條件重做操作和取消操作;以及 對所述數(shù)據(jù)庫日志執(zhí)行取消操作。
全文摘要
用于維護數(shù)據(jù)庫與文件系統(tǒng)之間的事務鏈接級一致性的方法和計算機可讀介質。在數(shù)據(jù)庫日志的記錄中將文件系統(tǒng)的改變記入日志,且在文件系統(tǒng)文件夾中創(chuàng)建對應于該文件系統(tǒng)改變的文件。在重啟恢復過程期間,基于數(shù)據(jù)庫日志執(zhí)行分析操作和條件重做操作,并基于文件系統(tǒng)文件夾中的文件執(zhí)行條件重做操作和取消操作。然后基于數(shù)據(jù)庫日志執(zhí)行取消操作。
文檔編號G06F12/00GK101460930SQ200680012268
公開日2009年6月17日 申請日期2006年3月9日 優(yōu)先權日2005年5月6日
發(fā)明者B·S·拉曼, K·嚴, R·B·拉杰恩 申請人:微軟公司