国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于由數(shù)據(jù)庫服務(wù)器執(zhí)行文件操作的基礎(chǔ)結(jié)構(gòu)的制作方法

      文檔序號:6553329閱讀:225來源:國知局
      專利名稱:用于由數(shù)據(jù)庫服務(wù)器執(zhí)行文件操作的基礎(chǔ)結(jié)構(gòu)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及在數(shù)據(jù)庫管理系統(tǒng)中執(zhí)行文件操作的方法和裝置。
      背景技術(shù)
      可以以諸如數(shù)據(jù)庫和文件服務(wù)器等許多存儲機制類型來存儲數(shù)據(jù)。每種存儲機制通常都具有自己的存取方式。例如,SQL協(xié)議通常用于執(zhí)行對數(shù)據(jù)庫的操作,而NFS協(xié)議通常用于執(zhí)行文件系統(tǒng)上的操作。SQL協(xié)議是用于訪問和操縱存儲于數(shù)據(jù)庫中數(shù)據(jù)的ANSI標準。NFS協(xié)議是分布式文件系統(tǒng)協(xié)議,其支持跨網(wǎng)絡(luò)對文件執(zhí)行文件操作。NFS是用于在UNIX主機之間共享文件的公知標準。在NFS協(xié)議中,使用文件句柄(filehandle)來對文件執(zhí)行文件系統(tǒng)操作,文件句柄是標識特定文件的標識符。在RFC 3010中所指定的NFS的當前版本(版本4)支持版本3之上的附加功能,比如,加強了安全性和狀態(tài)操作的執(zhí)行性。
      目前,數(shù)據(jù)庫管理系統(tǒng)不支持使用NFS協(xié)議來存取數(shù)據(jù)庫中的數(shù)據(jù)項。因此,當用戶想存取數(shù)據(jù)時,該用戶就必須確認正存儲該數(shù)據(jù)的存儲機制類型,以確定存取該數(shù)據(jù)的合適的方式。例如,為了確定是否可用NFS協(xié)議,該用戶就必須確定該數(shù)據(jù)是否關(guān)系性地(relationally)存儲在數(shù)據(jù)庫或文件系統(tǒng)中。在許多情況下,對該用戶來說,確定數(shù)據(jù)實際被存儲的存儲機制是一項繁瑣的任務(wù)。
      而且,出于各種原因,需要在單一存儲機制中存儲盡可能多種類的數(shù)據(jù)。例如,用于存儲數(shù)據(jù)的不同類型存儲機制的數(shù)量最小化的過程可以說減少了維護存儲機制所需要的資源量。而且,在諸如數(shù)據(jù)庫等中心存儲單元存儲許多種類的數(shù)據(jù)提高了易用性和安全性,這是因為,數(shù)據(jù)不是存儲在其中的每個機制都可執(zhí)行不同的安全策略的多個機制中。
      因此,需要一種用于在數(shù)據(jù)庫管理系統(tǒng)中執(zhí)行文件系統(tǒng)操作的方法。在本節(jié)中描述的方法是一種可被推行的方法,但不必須是以前已經(jīng)被想到或推行的方法。因而,除非另外說明,不應(yīng)該假定本節(jié)描述的任何方法根據(jù)它們在本節(jié)的包含內(nèi)容而只限定為現(xiàn)有技術(shù)。

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


      附圖是用于實例示出而不是用于限制了本文描述的系統(tǒng)和方法。貫穿附圖中的類似參考標號用于表示類似元素和類似特征。其中圖1是根據(jù)本發(fā)明實施例能夠處理在狀態(tài)協(xié)議下所執(zhí)行的請求的系統(tǒng)的框圖;圖2是根據(jù)本發(fā)明實施例的數(shù)據(jù)庫服務(wù)器的功能組件的框圖;圖3是表示根據(jù)本發(fā)明的實施例來處理文件操作的功能步驟的流程圖;
      圖4是表示根據(jù)本發(fā)明的實施例來使用數(shù)據(jù)庫的鎖和基于文件的鎖的功能步驟的流程圖;圖5是根據(jù)本發(fā)明的實施例來存儲基于圖表的資源的先前版本信息的框圖;圖6A和圖6B是根據(jù)本發(fā)明的實施例來存儲非基于圖表的資源的先前版本信息的框圖;圖7是示出了根據(jù)本發(fā)明實施例的各種類型的基于文件的鎖及其兼容性的表;以及圖8是表示實施本發(fā)明實施例的計算機系統(tǒng)的框圖。
      具體實施例方式
      在以下的描述中,出于說明的目的,為了提供對本發(fā)明實施例的完整理解,給出了許多特定的細節(jié)。但是,很清楚,沒有這些具體細節(jié)也可以實施本發(fā)明的實施例。在其它的實例中,為了避免對本文所述的本發(fā)明實施例的不必要的誤解,以框圖的形式示出了公知的結(jié)構(gòu)和裝置。
      功能概述給出了能使數(shù)據(jù)庫服務(wù)器處理在存儲在數(shù)據(jù)庫中的數(shù)據(jù)上執(zhí)行諸如狀態(tài)文件系統(tǒng)操作等狀態(tài)操作請求的框架?!盃顟B(tài)操作”是這樣的操作,其(1)是在會話中被請求的,以及其(2)在某方式下考慮了先前在該會話中所執(zhí)行的操作。某些操作的執(zhí)行影響狀態(tài)操作的執(zhí)行。例如,執(zhí)行數(shù)據(jù)庫操作的結(jié)果可能是成功執(zhí)行狀態(tài)操作所需要的。大多數(shù)應(yīng)用NFS執(zhí)行的文件系統(tǒng)操作是狀態(tài)操作。當通過數(shù)據(jù)庫服務(wù)器執(zhí)行時,狀態(tài)文件系統(tǒng)操作就可跨越一個或多個數(shù)據(jù)庫事務(wù)。
      在實施例中,在數(shù)據(jù)庫系統(tǒng)端接收請求。例如,該項請求可以是應(yīng)用NFS協(xié)議來執(zhí)行狀態(tài)操作的請求。該項請求包括狀態(tài)標識數(shù)據(jù),其為標識與該項請求關(guān)聯(lián)的狀態(tài)信息的數(shù)據(jù)。以下更詳盡描述的狀態(tài)信息是描述在任一會話中由請求者先前在資源上所執(zhí)行的任何操作的信息。例如,假若一個請求者在不同會話中針對資源而執(zhí)行了幾個狀態(tài)操作,那么該資源的狀態(tài)信息就會描述反映所執(zhí)行的狀態(tài)操作的資源狀態(tài)。
      當在資源上執(zhí)行狀態(tài)操作時,就檢索與該資源關(guān)聯(lián)的狀態(tài)信息,致使該狀態(tài)操作的執(zhí)行反映先前所執(zhí)行的其它任何的狀態(tài)操作。基于包含在該項請求中的狀態(tài)標識數(shù)據(jù)來在數(shù)據(jù)庫系統(tǒng)中檢索與該項請求關(guān)聯(lián)的狀態(tài)信息。然后,至少部分基于該狀態(tài)信息來處理該項請求。
      方便地提供了本發(fā)明的實施例以用于為在數(shù)據(jù)庫管理系統(tǒng)端處理文件系統(tǒng)操作來存取諸如文件、關(guān)系數(shù)據(jù)、和對象關(guān)系數(shù)據(jù)(object-relational data)等任何由數(shù)據(jù)庫管理系統(tǒng)維護的數(shù)據(jù)而作好準備。本文所述的框架可方便地允許遵守諸如NFS等將在數(shù)據(jù)庫服務(wù)器端被處理的狀態(tài)協(xié)議的請求。雖然本發(fā)明的實施例應(yīng)當主要描述有關(guān)處理運用NFS協(xié)議來執(zhí)行的請求,該框架可以用來處理任何狀態(tài)或非狀態(tài)協(xié)議。本發(fā)明的實施例可用來處理遵守NFS協(xié)議(包括版本4或以后所開發(fā)的任何版本)的請求。
      架構(gòu)概述圖1為根據(jù)本發(fā)明的實施例能夠處理執(zhí)行文件系統(tǒng)操作的請求的系統(tǒng)100的框圖。系統(tǒng)100包括客戶端110、數(shù)據(jù)庫管理系統(tǒng)(DBMS)120、和通信鏈路130。客戶端110的用戶可發(fā)送指定了執(zhí)行一個或多個文件系統(tǒng)操作的請求到DBMS 120。出于說明的目的,將給出其中遵循NFS版本(如版本4)的請求的實例。
      可以通過能夠發(fā)送請求到DBMS 120的任何介質(zhì)或機制來執(zhí)行客戶端110??蛻舳?10可發(fā)送狀態(tài)請求到DBMS 120。本文所用的“狀態(tài)請求”是用于執(zhí)行狀態(tài)操作的請求。通常,應(yīng)用諸如NFS的狀態(tài)協(xié)議來發(fā)送狀態(tài)請求。客戶端110的非限制性的、說明性的實例包括在對通信鏈路130來說可訪問的裝置上執(zhí)行的應(yīng)用程序。雖然便于說明圖1中只示出了一個客戶端,但系統(tǒng)100可包括任何數(shù)量的客戶端110,其每個都與DBMS 120通過通信鏈路130進行通信。
      可通過能夠同時發(fā)送多個請求的介質(zhì)或機制來執(zhí)行客戶端110。例如,客戶端110可與在裝置上執(zhí)行的應(yīng)用程序相對應(yīng),并且該應(yīng)用程序可以包括多個處理進程,其每個都可傳送請求到DBNS120。因此,為了避免混亂,術(shù)語“請求者”在本文被用來指任何發(fā)送請求到DBMS 120去的實體。因此,請求者可以對應(yīng)于客戶端110、在客戶端110上執(zhí)行的處理進程、或由客戶端110生成的處理進程。
      DBMS 120是便于電子數(shù)據(jù)存儲和檢索的軟件系統(tǒng)。DBMS 120包括數(shù)據(jù)庫服務(wù)器122和數(shù)據(jù)庫124。應(yīng)用一種允許數(shù)據(jù)庫服務(wù)器122處理任何狀態(tài)請求(例如,針對在數(shù)據(jù)庫124中所維護的文件執(zhí)行文件操作的請求)的框架來執(zhí)行數(shù)據(jù)庫服務(wù)器122。
      可以在正被模擬為多線程服務(wù)器的多進程單線程環(huán)境中執(zhí)行數(shù)據(jù)庫服務(wù)器122。其中的每個進程都能夠執(zhí)行操作的進程池駐留在數(shù)據(jù)庫服務(wù)器122端。當數(shù)據(jù)庫服務(wù)器122收到請求時,數(shù)據(jù)庫服務(wù)器122就可分配進程池中的任一進程來處理所收到的請求。在多進程單線程環(huán)境中執(zhí)行數(shù)據(jù)庫服務(wù)器122就允許數(shù)據(jù)庫服務(wù)器122擴展(scale)來支持大量的客戶端110。
      可以通過提供用于在客戶端110和DBMS 120之間交換數(shù)據(jù)的任何介質(zhì)或機制來執(zhí)行通信鏈路130。通信鏈路的實例包括,但不限于,諸如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、以太網(wǎng)、或互聯(lián)網(wǎng)等網(wǎng)絡(luò),或者,一個或多個地球、人造衛(wèi)星、或無線鏈路。
      框架圖2為根據(jù)本發(fā)明實施例的數(shù)據(jù)庫服務(wù)器122的功能組件的框圖。如上所述,應(yīng)用一種允許數(shù)據(jù)庫服務(wù)器122在維護于數(shù)據(jù)庫124中的文件上處理狀態(tài)請求的框架200來執(zhí)行數(shù)據(jù)庫服務(wù)器122。另外,相同的框架200可允許數(shù)據(jù)庫服務(wù)器122處理無狀態(tài)請求,諸如維護于數(shù)據(jù)庫124中的數(shù)據(jù)上以HTTP或FTP協(xié)議所執(zhí)行的請求。而且,如下所說,框架200可以被構(gòu)造來包括支持新的無狀態(tài)協(xié)議或狀態(tài)協(xié)議的、或添加新功能到現(xiàn)有的由框架200所支持的協(xié)議中去的附加組件。
      下邊討論數(shù)據(jù)庫服務(wù)器122的框架200中的每個組件,以及將給出隨后在題為“應(yīng)用框架處理文件操作”的那節(jié)中的、運用框架200來處理示例性狀態(tài)請求的說明。
      可以用圖2中未示出的另外的組件來執(zhí)行框架200,這些組件提供了狀態(tài)或無狀態(tài)請求所需的附加功能。例如,擴展234是指可被插接到框架200中的組件,框架200允許其自身支持新的無狀態(tài)或狀態(tài)協(xié)議、或添加新功能到由其自身支持的現(xiàn)有協(xié)議中去。為了插接擴展組件234到框架200中,協(xié)議解釋器210被構(gòu)造來在合適的時間用合適的信息調(diào)用擴展組件234。
      協(xié)議解釋器協(xié)議解釋器210通過通信鏈路130接收被發(fā)送到DBMS 120去的信息包??梢允褂萌魏文軌蛲ㄟ^通信鏈路130從客戶端110接收信息包的、以及能夠按如下所述處理信息包的軟件或硬件組件,來執(zhí)行協(xié)議解釋器210。協(xié)議解釋器210一旦接收信息包就標識與該信息包關(guān)聯(lián)的信息包類型,并且發(fā)送該信息包到被構(gòu)造來讀取該信息包類型的多個信息包的組件。舉例來說,如果協(xié)議解釋器210通過檢查該信息包的報頭確定該信息包包含有NFS請求,那么,協(xié)議解釋器210就發(fā)送該信息包到NFS信息包讀取器224。在NFS信息包讀取器224讀取含有該NFS請求的信息包后,NFS信息包讀取器224就把與在該信息包內(nèi)所指定的單個文件系統(tǒng)操作有關(guān)的信息發(fā)送回協(xié)議解釋器210以便進一步處理。
      協(xié)議解釋器210包含查找機制212??梢允褂媚軌驗镈BMS 120的請求者存儲狀態(tài)信息的任何軟件或硬件組件來執(zhí)行查找機制212。查找機制可把狀態(tài)信息存儲在易失存儲器中,并且可使用諸如B-樹和散列表(其便于狀態(tài)信息的檢索)等任何機制來執(zhí)行該查找機制。在以下的題為“維護狀態(tài)信息”的節(jié)中給出了查找機制212的示例性實施例的另外的細節(jié)。
      協(xié)議解釋器210被配置來處理由協(xié)議解釋器210收到的信息包所請求的操作。協(xié)議解釋器210可以被配置來執(zhí)行由收到的信息包所請求的操作,或者在如下進一步的細節(jié)中所說明的那樣,協(xié)議解釋器210可以與框架200的一個或多個組件進行通信以執(zhí)行由協(xié)議解釋器210收到的信息包所請求的操作。
      輸出器可以使用能夠執(zhí)行輸出操作的任何軟件或硬件組件執(zhí)行輸出器220。輸出允許請求者好象目錄樹就駐留在請求者那里(實際上該目錄樹正駐留在服務(wù)器端)一樣查看該目錄樹的一部分。
      在實施例中,在框架200成功地執(zhí)行輸出操作以后,框架200傳送如下到該輸出操作的請求者(a)標識被輸出到該請求者的目錄文件夾的信息,以及(b)標識該請求者是否已經(jīng)讀和/或?qū)懺L問所輸出的目錄文件夾的信息。當請求者通過輸出操作接收對目錄文件夾的存取的時候,該請求者就可以查看包括任何子文件夾在內(nèi)的、該請求者存取的目錄文件夾的所有內(nèi)容。
      在實施例中,輸出器220可維護與以下有關(guān)的信息(a)哪些請求者已輸出了目錄文件夾,以及(b)與任何所輸出的目錄文件夾關(guān)聯(lián)的存取權(quán)限。可以把目錄文件夾輸出到指定的客戶端110(如,輸出目錄文件夾到指定的IP地址或域名)或到一個或多個客戶端,例如,通過輸出目錄文件夾到IP掩碼就可輸出目錄文件夾到一組相關(guān)聯(lián)的裝置。
      資源鎖可以使用能夠鎖定資源的任何軟件或硬件組件來進行資源鎖(Resource locker)222。在一個實施例中,資源鎖222被配置來在存儲于數(shù)據(jù)庫124中的文件上進行字節(jié)范圍的鎖定。
      當需要在資源上進行鎖定時,資源鎖222就進行該項鎖定。在執(zhí)行對基于文件的鎖進行授權(quán)的請求中,資源鎖222可更新由查找機制212所維護的信息。以下對基于文件的鎖進行更詳盡的描述。
      例如,在一個實施例中,協(xié)議解釋器210可指令資源鎖222執(zhí)行請求對在文件上的基于文件的鎖進行授權(quán)的文件系統(tǒng)操作。資源鎖222可存取B-樹來初始確定所基于文件的鎖是否可被授權(quán),并且如果所請求的基于文件的鎖可被授權(quán),那么資源鎖222就更新一個或多個B-樹以反映所基于文件的鎖已經(jīng)被授權(quán)到該文件。以下進一步詳細討論資源鎖222可存取或更新特定的B-樹。
      信息包讀取器框架200包括幾個信息包讀取器。每個信息包讀取器都被設(shè)計來從遵守特定協(xié)議的信息包中讀取信息。例如,框架200包括NFS信息包讀取器224、FTP信息包讀取器226、以及HTTP信息包讀取器228。
      可以使用能夠讀取和解析遵守NFS協(xié)議的信息包的任何軟件或硬件組件來執(zhí)行NFS信息包讀取器224。這種信息包可請求一個操作、或許多操作。請求兩個或更多文件系統(tǒng)操作的信息包稱為“復合請求”。NFS信息包讀取器224被配置來讀取在信息包中所指定的第一操作,以及返回標識該操作的數(shù)據(jù)到協(xié)議解釋器210。一旦先前的操作已處理完畢,隨后協(xié)議解釋器210就指令NFS信息包讀取器224從該信息包讀取另一個操作。
      可以使用能夠讀取和解析含有FTP請求的信息包的任何軟件或硬件組件來執(zhí)行FTP信息包讀取器226。FTP信息包讀取器226被配置來讀取和解析包含在該FTP信息包內(nèi)的FTP操作信息,以及隨后傳送FTP操作信息到協(xié)議解釋器210來處理。
      可以使用能夠讀取和解析含有HTTP請求的信息包的任何軟件或硬件組件來執(zhí)行HTTP信息包讀取器228。HTTP信息包讀取器228被配置來讀取和解析包含在該HTTP信息包內(nèi)的HTTP操作信息,以及隨后傳送HTTP操作信息到協(xié)議解釋器210來處理。
      雖然圖2示出了用于信息包類型的三種不同類型(即NFS、FTP、和HTTP信息包)的信息包讀取器,其它的實施例可以包括用于另外類型的信息包的另外的信息包讀取器。在這種方式下,框架可包括能夠讀取任何無狀態(tài)或狀態(tài)協(xié)議的組件。
      權(quán)限驗證器可以使用能夠驗證特定的請求者是否具有足夠的權(quán)限級別執(zhí)行特定的文件系統(tǒng)操作的任何軟件或硬件組件來實施權(quán)限驗證器230。每次協(xié)議解釋器210執(zhí)行文件系統(tǒng)操作時,協(xié)議解釋器210都可指令權(quán)限驗證器230來確定特定的請求者是否具有足夠的權(quán)限級別執(zhí)行特定的文件系統(tǒng)操作。以下將參照圖3的步驟318更詳細地討論如何確定特定的用戶是否有足夠的權(quán)限級別執(zhí)行特定的文件系統(tǒng)操作。
      授權(quán)器可以使用能夠確定發(fā)送由協(xié)議解釋器210所接收的特定請求的請求者實際上是否是在該項特定請求中所標識的同一個請求者來實施授權(quán)器232。這樣,可以在執(zhí)行該請求中指定的任一操作之前,由授權(quán)器232驗證該請求者的身份。每次協(xié)議解釋器210接收請求時,協(xié)議解釋器210都可指令授權(quán)器232來確定發(fā)送由協(xié)議解釋器210所接收的特定請求的請求者是否是在特定請求中所標識的同一個請求者。以下將參照步驟316更詳細地闡述如何確定特定的請求是否是已由特定的客戶端110所發(fā)送的。
      維護狀態(tài)信息在NFS協(xié)議中,在已經(jīng)“打開”、但還未“關(guān)閉”的文件上執(zhí)行文件系統(tǒng)操作。在請求者在文件上執(zhí)行其它的文件系統(tǒng)操作以前,請求者請求執(zhí)行打開文件系統(tǒng)操作以打開該文件。在請求者在該文件上完成了所有需要的文件系統(tǒng)操作以后,請求者請求執(zhí)行關(guān)閉文件系統(tǒng)操作以關(guān)閉該文件。
      由數(shù)據(jù)庫服務(wù)器所執(zhí)行的文件系統(tǒng)操作可以跨越一個或多個數(shù)據(jù)庫事務(wù)。結(jié)果,在文件打開和文件關(guān)閉的時刻之間可以在該文件上執(zhí)行其每個都改變文件狀態(tài)的一個或多個數(shù)據(jù)庫事務(wù)。
      因為NFS為狀態(tài)協(xié)議,當處理狀態(tài)請求時,對于框架200來說,就需要維護狀態(tài)信息。狀態(tài)信息是描述了在任何會話中由請求者先前在資源上所執(zhí)行的任何操作的信息。根據(jù)一個實施例,維護請求者已打開的每個文件的狀態(tài)信息。例如,如果請求者打開了文件A和文件B,那么該請求者就為文件A關(guān)聯(lián)第一組狀態(tài)信息以及為文件B關(guān)聯(lián)第二組狀態(tài)信息。
      可以在請求者(a)打開或關(guān)閉文件,或(b)獲得打開文件上的新鎖等任何時候都指定或更新狀態(tài)信息。因此,無論何時請求者或是(a)打開或關(guān)閉文件,或是(b)獲得打開文件上的新鎖,就更新狀態(tài)信息以反映在該文件上所執(zhí)行的狀態(tài)操作。
      與請求者關(guān)聯(lián)的狀態(tài)信息反映了自文件打開以來由該請求者在該文件上執(zhí)行的所有狀態(tài)操作。例如,當請求者第一次打開文件,就可分配狀態(tài)信息A。此后,如果同一個請求者獲得了該文件上的鎖,狀態(tài)信息A就變得無效,并且就分配新的狀態(tài)信息B。注意狀態(tài)信息B既反映了該鎖,也反映了該文件被請求者所打開這一事實。此后,如果同一個請求者獲得了該文件上的第二個鎖,狀態(tài)信息B就變得無效,并且就分配新的狀態(tài)信息C。注意狀態(tài)信息C既反映了這些鎖,也反映了該文件被請求者所打開這一事實。當請求者關(guān)閉該文件,就不再需要維護用于該請求者的、用于該文件的狀態(tài)信息。
      追蹤請求者-文件關(guān)系狀態(tài)狀態(tài)標識數(shù)據(jù)可與在客戶端110和數(shù)據(jù)庫服務(wù)器122之間所交換的通信信息一起來指出該通信信息中所引用的文件的當前狀態(tài)。當請求者打開文件時,就由框架200創(chuàng)建狀態(tài)標識數(shù)據(jù)。狀態(tài)標識數(shù)據(jù)標識了與關(guān)于由特定請求者所打開的特定文件的請求者關(guān)聯(lián)的狀態(tài)信息。
      為了追蹤打開文件的狀態(tài),新近創(chuàng)建的狀態(tài)標識數(shù)據(jù)被返回到該請求者。例如,假定請求者XYZ發(fā)送打開文件ABC的請求??蚣?00生成描述與新近打開的文件ABC關(guān)聯(lián)的狀態(tài)信息的狀態(tài)標識數(shù)據(jù),并且將該狀態(tài)標識數(shù)據(jù)返回到請求者XYZ。
      當請求者傳送請求到數(shù)據(jù)服務(wù)器122以在打開文件上執(zhí)行文件系統(tǒng)操作時,該項請求就包含先前被傳送到該請求者的任何狀態(tài)標識數(shù)據(jù),例如,狀態(tài)標識數(shù)據(jù)可能響應(yīng)于正被打開的文件而先前已經(jīng)被傳送到了該請求者。在這種方式下,該項請求標識與該文件關(guān)聯(lián)的狀態(tài)信息。例如,如果請求者XYZ傳送對在文件ABC上的鎖所進行的請求,該項請求就將包含先前響應(yīng)于在文件ABC上執(zhí)行打開文件系統(tǒng)操作的數(shù)據(jù)庫服務(wù)器122而被發(fā)送到請求者XYZ的狀態(tài)標識信息。框架200可使用包含在該項請求中的狀態(tài)標識以利用查找機制212來檢索相應(yīng)的狀態(tài)信息。
      因此,如上所述,框架200響應(yīng)于執(zhí)行某些狀態(tài)文件系統(tǒng)操作來生成狀態(tài)標識數(shù)據(jù),并且所生成的狀態(tài)標識數(shù)據(jù)被傳送到該文件系統(tǒng)操作的請求者。此后,該請求者通過在該請求中包括該狀態(tài)標識數(shù)據(jù)(其允許框架200使用該狀態(tài)標識數(shù)據(jù)來檢索該文件的狀態(tài)信息)可在相同的文件上執(zhí)行附加的狀態(tài)文件系統(tǒng)操作。
      當在打開文件上執(zhí)行文件系統(tǒng)操作時,與該文件關(guān)聯(lián)的狀態(tài)信息就被更新以反映該文件的新的操作狀態(tài)。參照所更新的狀態(tài)信息來生成新的狀態(tài)標識數(shù)據(jù)。此后,框架200傳送該新的狀態(tài)標識數(shù)據(jù)到該請求者。這樣,在該請求者和框架200之間就只有一組狀態(tài)標識數(shù)據(jù)被交換。在該框架成功地執(zhí)行了狀態(tài)文件系統(tǒng)操作以后,從框架200所傳送來的狀態(tài)標識數(shù)據(jù)標識與其已為該狀態(tài)文件系統(tǒng)操作的主題的資源相關(guān)聯(lián)的最近的狀態(tài)信息。
      如在下一節(jié)中所述,框架200可在查找機制212中存儲狀態(tài)信息,以及可使用該狀態(tài)標識數(shù)據(jù)來檢索被存儲在查找機制212中的狀態(tài)信息。
      維護狀態(tài)信息根據(jù)一個實施例,使用查找機制212來維護狀態(tài)信息。在一個實施例中,應(yīng)用多個B-樹來實施查找機制212。多個B-樹存儲在處理狀態(tài)文件系統(tǒng)操作請求中所使用的狀態(tài)信息。例如,多個B-樹可存儲請求者數(shù)據(jù)、文件數(shù)據(jù)、和鎖定數(shù)據(jù)。請求者數(shù)據(jù)是標識被登記來發(fā)送文件系統(tǒng)操作的請求者的數(shù)據(jù)。文件數(shù)據(jù)是標識哪些文件已被哪些請求者所打開的數(shù)據(jù)。鎖定數(shù)據(jù)是標識哪些文件上的哪些鎖已被授權(quán)給哪些請求者的數(shù)據(jù)。
      在一個實施例中,多個B-樹包括“客戶端B-樹”(“clientB-tree”)、“現(xiàn)有客戶端B-樹”(“client_exists B-tree”)、“請求者B-樹”(“requestor B-tree”)、“打開文件B-樹”(“open_files B-tree”)、“打開B-樹”(“opens B-tree”)、“鎖請求者B-樹”(“l(fā)ocks_requestorB-tree”)、以及“授權(quán)鎖B-樹”(“granted_locks B-tree”)。這些B-樹的每一種存儲狀態(tài)信息都可存儲狀態(tài)信息,并將在下面進一步地詳細描述。
      本發(fā)明的其它實施例可應(yīng)用不同的B-樹集來實施查找機制212。例如,上述的幾個B-樹(如,現(xiàn)有客戶端B-樹)存儲了還被存儲在其它B-樹中的信息,因此,上述所有的B-樹對查找機制212的某些實施來說都不是必需的。然而,因為可以使用第一環(huán)境下的第一關(guān)鍵字更高效地存取該信息、以及使用第二環(huán)境下的第二關(guān)鍵字更高效地存取該信息,于是就可以把相同或相似的信息方便地存儲在多于一個的B-樹中。
      在本發(fā)明的其它實施例中,應(yīng)用多個散列表而不是多個B-樹來執(zhí)行查找機制212。執(zhí)行該查找機制212的多個散列表存儲與此后描述的信息類似的信息。本發(fā)明的其它實施例中還可以運用其它的機制來執(zhí)行查找機制212。
      客戶端B-樹客戶端B-樹是維護關(guān)于客戶的信息的B-樹。已向框架200登記的每個客戶端110都將被反映在客戶端B-樹中的索引條目內(nèi)??蛻舳?10通過發(fā)送建立客戶標識符的請求來向框架200登記,這一點以下將進一步詳細闡述??蛻舳薆-樹的關(guān)鍵字是先前由數(shù)據(jù)庫服務(wù)器分配給客戶端的客戶標識符??蛻魳俗R符唯一地標識向框架200登記的特定的客戶端110。客戶端B-樹的每個節(jié)點都存儲包括有客戶標識符和客戶端提供的標識符(如該客戶端的網(wǎng)絡(luò)地址)在內(nèi)的關(guān)于特定客戶的信息。
      現(xiàn)有客戶端B-樹與客戶端B-樹類似,現(xiàn)有客戶端B-樹維護關(guān)于客戶的信息。雖然客戶端B-樹和現(xiàn)有客戶端B-樹都維護關(guān)于客戶的信息,現(xiàn)有客戶端B-樹的關(guān)鍵字是客戶端提供的標識符。例如,該客戶端提供的標識符可以是該客戶端的網(wǎng)絡(luò)地址。
      現(xiàn)有客戶端B-樹可用于基于客戶端提供的標識符來確定特定的客戶端110是否已經(jīng)向框架200登記?,F(xiàn)有客戶端B-樹的每個索引條目也都存儲包括客戶標識符和客戶端提供的標識符在內(nèi)的、與特定的客戶端有關(guān)的信息。
      請求者B-樹請求者B-樹是維護有關(guān)請求者信息的B-樹。請求者B-樹的關(guān)鍵字既反映與請求者關(guān)聯(lián)的客戶標識符也反映唯一標識該請求者的請求者標識符。請求者B-樹可用于確定與特定客戶端110關(guān)聯(lián)的所有請求者,其可能在某一打開文件系統(tǒng)操作的處理過程中或當恢復已變得不可操作的客戶端時要用到。
      該請求者B-樹的每個索引條目都存儲有關(guān)于請求者的信息。例如,與特定的請求者對應(yīng)的請求者B-樹的索引條目可存儲有關(guān)的信息,即,哪個客戶與該請求者關(guān)聯(lián)、何時曾收到來自該請求者的最新通信信息、該請求者打開了哪些文件、以及何種與該請求者關(guān)聯(lián)的狀態(tài)信息。
      打開文件B-樹打開文件B-樹是維護已經(jīng)打開的文件的信息的B-樹。打開文件B-樹的關(guān)鍵字是文件的文件句柄。打開文件B-樹可用于確定是否有可能在特定文件上執(zhí)行文件系統(tǒng)操作。打開文件B-樹的每個索引條目都可存儲關(guān)于打開文件的信息。這種信息可包括諸如在所打開的文件上的基于文件的鎖的數(shù)量、在所打開的文件上的基于文件的鎖的類型、標識與所打開的文件關(guān)聯(lián)的狀態(tài)信息為何的狀態(tài)標識數(shù)據(jù)、用于所打開的文件的對象標識符。
      打開B-樹打開B-樹是維護已經(jīng)被打開的文件的信息的B-樹。打開B-樹的關(guān)鍵字是狀態(tài)標識數(shù)據(jù)。通過遍歷所述打開B-樹,人們就可以定位與由用作所述打開B-樹的關(guān)鍵字的狀態(tài)標識數(shù)據(jù)所標識的狀態(tài)信息關(guān)聯(lián)的所述打開文件的信息。
      例如,假定客戶端已經(jīng)打開了特定文件。為該客戶端進行維護的狀態(tài)信息將指示該客戶端已經(jīng)打開了該特定文件。狀態(tài)信息將要被分配給一組狀態(tài)標識數(shù)據(jù)。該狀態(tài)標識數(shù)據(jù)可用于遍歷所述打開B-樹以找到指示該特定文件為打開的索引條目。
      所述打開B-樹的每個索引條目都存儲下列與一打開文件相關(guān)的信息諸如標識與所述打開文件關(guān)聯(lián)的狀態(tài)信息的狀態(tài)標識數(shù)據(jù)、曾打開所述打開文件的請求者、該文件是否已打開以用于讀或?qū)?、所述打開文件是否已被修改、以及是否拒絕了除已打開所述打開文件的請求者之外的其他任何請求者讀或?qū)憽?br> 為了打開文件,就生成狀態(tài)標識數(shù)據(jù)以標識所述打開文件。該狀態(tài)標識數(shù)據(jù)(a)被傳送到曾請求文件打開的請求者,以及(b)被用于添加條目到所述打開B-樹以反映該文件已經(jīng)被打開了。
      鎖請求者B-樹鎖請求者B-樹是維護關(guān)于鎖請求者信息的B-樹。鎖請求者B-樹的關(guān)鍵字是狀態(tài)標識數(shù)據(jù)。鎖請求者B-樹的每個索引條目都包含諸如客戶標識符、請求者標識符、以及鎖所有者標識符等關(guān)于鎖的請求者的信息。鎖所有者標識符唯一地標識被授權(quán)鎖的特定請求者。由框架200來分配客戶標識符和請求者標識符,而該請求者提供鎖所有者標識符。
      授權(quán)鎖B-樹授權(quán)鎖B-樹是維護關(guān)于被授權(quán)的鎖的信息的B-樹。授權(quán)鎖B-樹的關(guān)鍵字是文件句柄。授權(quán)鎖B-樹被用于快速確定特定文件上已被授權(quán)了哪些基于文件的鎖(如果有的話)。
      當協(xié)議解釋器210指令資源鎖222執(zhí)行請求特定鎖的授權(quán)的文件系統(tǒng)操作時,資源鎖222就可存取查找機制212的一個或多個B-樹。為了說明,假定協(xié)議解釋器210接收在文件上的特定鎖的授權(quán)的請求,此后,協(xié)議解釋器210指令資源鎖222處理該文件系統(tǒng)操作。資源鎖222可通過存取授權(quán)鎖B-樹來初始確定是否有沖突鎖已經(jīng)被授權(quán)到該文件。資源鎖222可使用由該文件系統(tǒng)操作所標識的該文件的文件句柄來遍歷所述授權(quán)鎖B-樹。如果授權(quán)鎖B-樹中存在用于該文件句柄的條目,對該條目進行的檢查將通知資源鎖222是否有沖突鎖已經(jīng)被授權(quán)到該文件。
      如果資源鎖222確定還沒有沖突鎖被授權(quán)到該文件,那么資源鎖222就可(a)生成新的狀態(tài)標識數(shù)據(jù)來標識該資源這一新狀態(tài),以及(b)添加條目到授權(quán)鎖B-樹以反映所請求的鎖的授權(quán)。資源鎖222可使用為該資源所新近生成的新狀態(tài)標識數(shù)據(jù)以把新條目添加到授權(quán)鎖B-樹,并且在此后,刪除已被先前的狀態(tài)標識數(shù)據(jù)所引用的鎖B-樹中的先前條目。鎖B-樹中的新條目包含對在該資源上所執(zhí)行的所有先前狀態(tài)操作的引用,因此不需要存儲由所述先前的狀態(tài)標識數(shù)據(jù)所引用的條目。
      使用框架來處理文件操作圖3是表示根據(jù)本發(fā)明實施例用于處理文件系統(tǒng)操作的步驟的流程圖。通過執(zhí)行圖3的步驟,可以用DBMS 120來執(zhí)行諸如狀態(tài)NFS操作等狀態(tài)操作。
      總的來說,該框架維護關(guān)于該框架執(zhí)行的操作的狀態(tài)信息。一旦執(zhí)行狀態(tài)操作,該框架就把對應(yīng)于操作狀態(tài)的狀態(tài)標識數(shù)據(jù)傳送回請求者。在狀態(tài)操作的后續(xù)請求中,請求者將該狀態(tài)標識數(shù)據(jù)發(fā)送回該框架。該框架然后就使用該狀態(tài)標識數(shù)據(jù)作為關(guān)鍵字來標識應(yīng)用于該后續(xù)請求中的操作的狀態(tài)信息。
      獲得框架生成的客戶標識符參看圖2,起始在步驟310,在數(shù)據(jù)庫服務(wù)器端接收第一請求以建立請求者的客戶標識符??捎赏ㄟ^接收含有所述第一請求的、由客戶端110通過通信鏈路130所發(fā)送的信息包的協(xié)議解釋器210來執(zhí)行步驟310。
      協(xié)議解釋器210可接收各種信息包類型的信息包。雖然協(xié)議解釋器210被配置來標識所接收的信息包的信息包類型,協(xié)議解釋器210不需要被配置來讀取每種信息包類型。例如,協(xié)議解釋器210可以通過檢查包含在信息包的報頭內(nèi)的信息來確定所接收的信息包的信息包類型。一旦協(xié)議解釋器210確定了所接收到的信息包的信息包類型,協(xié)議解釋器210發(fā)送該信息包到負責讀取那種信息包類型的信息包的組件。
      出于說明的目的,應(yīng)當假定在步驟310中所接收到的信息包為包含建立請求者的客戶標識符的請求的NFS信息包。建立客戶標識符是一項NFS操作。在這些情況下,協(xié)議解釋器將發(fā)送該信息包到NFS信息包讀取器224以讀取該信息包。NFS信息包讀取器224讀取和解析該信息包,以及把標識所請求的文件系統(tǒng)操作(即,建立客戶標識符)的數(shù)據(jù)發(fā)送回協(xié)議解釋器210。
      在接收標識該文件系統(tǒng)操作的數(shù)據(jù)以后,協(xié)議解釋器210處理該文件系統(tǒng)操作。在本實例中,協(xié)議解釋器210處理建立客戶標識符的請求。作為處理該項請求的一部分,協(xié)議解釋器210例如查閱查找機制212以確定(a)迄今為止是否已經(jīng)為請求者建立了客戶標識符,以及(b)如果還沒有為該請求者建立客戶標識符,那么就確定何種客戶標識符應(yīng)與該請求者關(guān)聯(lián)。
      在一實施例中,數(shù)據(jù)庫服務(wù)器基于客戶端提供的標識符(如,客戶端的網(wǎng)絡(luò)地址)來遍歷現(xiàn)有客戶B-樹以確定是否已經(jīng)為特定的請求者建立了客戶標識符。如果還沒有為該請求者建立客戶標識符,那么數(shù)據(jù)庫服務(wù)器就可以為該客戶生成客戶標識符。在為該客戶生成了客戶標識符以后,數(shù)據(jù)庫服務(wù)器就可添加索引條目到客戶B-樹和現(xiàn)有客戶B-樹以存儲有關(guān)被分配給該請求者的新客戶標識符的信息。
      在執(zhí)行步驟310以后,處理過程就行進到步驟312。在步驟312中,在以上步驟310中已建立的客戶標識符被傳送到該請求者。可以由通過通信鏈路130傳送包含有客戶標識符的信息到該請求者去的協(xié)議解釋器210來執(zhí)行步驟312。在一實施例中,請求者可通過與數(shù)據(jù)庫服務(wù)器122交換附加的通信信息來用數(shù)據(jù)庫服務(wù)器122驗證所接收到的客戶標識符以驗證客戶標識符。在步驟312執(zhí)行以后,處理過程就行進到步驟314。
      接收復合請求在步驟314中,接收執(zhí)行文件系統(tǒng)操作的第二請求??梢杂山邮瞻诙埱蟮摹⒂煽蛻舳?10通過通信鏈路130發(fā)送的信息包的協(xié)議解釋器210執(zhí)行步驟314。第二請求包括客戶標識符。
      為了說明復合請求的處理過程,假定在步驟314中被接收到的第二請求為包含兩個或更多文件系統(tǒng)操作的復合請求。在復合請求中指定的文件系統(tǒng)操作由框架200依次處理。
      為了說明狀態(tài)文件系統(tǒng)操作請求的處理過程,進一步假定在第二請求中所指定的第一文件系統(tǒng)操作為在該請求者先前已經(jīng)打開的文件上的基于文件的鎖的請求。在框架200打開文件以后,框架200(a)生成標識與所打開的文件相關(guān)聯(lián)的狀態(tài)信息的狀態(tài)標識數(shù)據(jù),以及(b)傳送該狀態(tài)標識數(shù)據(jù)到該請求者。因此,如果在步驟314中所收到的請求為在打開文件上執(zhí)行文件系統(tǒng)操作的請求,在步驟314中所收到的請求就包含先前被發(fā)送到該請求者的狀態(tài)標識數(shù)據(jù)。在本實例中,狀態(tài)標識數(shù)據(jù)將允許框架200引用與其為基于文件的鎖的請求的主題的文件相關(guān)聯(lián)的狀態(tài)信息。
      在協(xié)議解釋器210確定步驟314的請求包含文件系統(tǒng)操作請求以后,協(xié)議解釋器212就可發(fā)送包含有步驟314的請求的信息包到NFS信息包讀取器224以讀取該信息包。此后,NFS信息包讀取器224傳送與該信息包中指定的第一未被處理的文件系統(tǒng)操作(參見以下的“當前”文件系統(tǒng)操作)有關(guān)的信息到協(xié)議解釋器210。在當前文件系統(tǒng)操作已處理完畢以后,框架200應(yīng)當處理該信息包中所指定的附加的未被處理的文件系統(tǒng)操作,這點如以下更詳盡的描述。
      分配請求到會話一旦協(xié)議解釋器210接收了與來自NFS信息包讀取器224的復合請求中所指定的當前文件系統(tǒng)操作有關(guān)的信息以后,協(xié)議解釋器210分配當前文件系統(tǒng)操作到數(shù)據(jù)庫會話。從數(shù)據(jù)庫會話池中所選擇的被分配的數(shù)據(jù)庫會話是數(shù)據(jù)庫服務(wù)器將在其中處理包含在復合請求中的文件系統(tǒng)操作的會話。因為狀態(tài)信息與會話分開來維護(如上所述,在查找機制212中維護狀態(tài)信息),可以從數(shù)據(jù)庫會話池中選擇任何會話以服務(wù)于當前文件系統(tǒng)操作。在步驟314執(zhí)行以后,處理過程就行進到步驟316。
      驗證客戶在步驟316中,做出判斷以確定關(guān)于在步驟314中所接收到的請求是否已由包含在該請求中的客戶標識符所標識的客戶發(fā)送出來。在一個實施例中,每次收到一個請求,都要對該項請求進行驗證以確認請求者的身份??梢杂膳c授權(quán)器232通信的協(xié)議解釋器210來執(zhí)行步驟316以使得授權(quán)器232驗證該項請求。授權(quán)器232在驗證過程中可使用包含在該項請求中的客戶標識符。在授權(quán)器232驗證了在步驟314中所接收到的請求以后,授權(quán)器232傳送驗證處理結(jié)果到協(xié)議解釋器210。授權(quán)器232使用包括Kerberos、LIPKEY、和SPKM-3的標準庫和協(xié)議來驗證該請求者。
      如果在步驟314中所收到的請求沒有經(jīng)過授權(quán)器232驗證,那么協(xié)議解釋器210發(fā)送通信信息到發(fā)送第二請求(在步驟314中收到的)的請求者以通知該請求者第二請求沒有經(jīng)過驗證。一旦第二請求被驗證,那么處理過程就行進到步驟318。
      確定所請求的操作是否被授權(quán)在步驟318中,做出判斷以確定請求者是否有足夠的權(quán)限級別執(zhí)行當前的文件系統(tǒng)操作。由與權(quán)限驗證器230通信的協(xié)議解釋器210執(zhí)行步驟318來指令驗證器230驗證請求者是否有足夠的權(quán)限級別執(zhí)行當前的文件系統(tǒng)操作。
      在一個實施例中,權(quán)限驗證器230通過使用每個請求者的存取控制列表來確定請求者是否有足夠的權(quán)限級別執(zhí)行指定的文件系統(tǒng)操作。權(quán)限驗證器230維護每個請求者的存取控制列表。每個存取控制列表都包含存取控制條目的列表(ACE)。每個ACE都標識該請求者是否被授予或拒絕某一特定的權(quán)限。
      為了說明,假定請求者1234已經(jīng)發(fā)送一個請求來執(zhí)行要求權(quán)限A和權(quán)限B的文件系統(tǒng)操作。權(quán)限驗證器230維護請求者1234的ACE列表。權(quán)限驗證器230依次處理在存取控制列表中所指定的ACE。如果請求者1234的存取控制列表包括指示了請求者1234已被授予權(quán)限A的第一ACE,指示了請求者1234已被授予權(quán)限B的第二ACE,指示了請求者1234已被拒絕權(quán)限A的第三ACE,那么,權(quán)限驗證器230就將確定請求者1234具有足夠的權(quán)限級別來執(zhí)行所請求的文件系統(tǒng)操作,這是因為權(quán)限驗證器230將依次處理在存取控制列表中的ACE一直到能夠做出決定。因此,一旦權(quán)限驗證器230讀取請求者1234的存取控制列表中的第二ACE,權(quán)限驗證器230就可以做出關(guān)于請求者1234是否有足夠的權(quán)限級別執(zhí)行所請求的文件系統(tǒng)操作的決定,以及權(quán)限驗證器230將不會讀取所述存取控制列表的剩余部分。在步驟318執(zhí)行以后,處理過程就行進到步驟320。
      定位合適的狀態(tài)信息在步驟320中,如果當前文件系統(tǒng)操作的執(zhí)行需要狀態(tài)信息,那么基于包含在第二請求中的狀態(tài)標識數(shù)據(jù)來檢索合適的狀態(tài)信息。狀態(tài)標識數(shù)據(jù)可能先前已被分配并傳送到請求者,例如,該請求者可能先前已打開過文件或先前已在文件上被授權(quán)了鎖。如果該項請求為復合請求,在步驟320中所檢索的狀態(tài)信息就可與當前的文件系統(tǒng)操作關(guān)聯(lián)??梢杂赏ㄟ^使用查找機制212檢索狀態(tài)信息的協(xié)議解釋器來執(zhí)行步驟320。在步驟320中被檢索的狀態(tài)信息包括執(zhí)行當前的文件系統(tǒng)操作必需的任何狀態(tài)信息。在步驟320執(zhí)行以后,處理過程就行進到步驟322。
      執(zhí)行所請求的文件系統(tǒng)操作在步驟322中,在所選定的數(shù)據(jù)庫會話中基于合適的狀態(tài)信息來處理當前的文件系統(tǒng)操作。在一個實施例中,由協(xié)議解釋器210自身來執(zhí)行步驟322。在另一個實施例中,協(xié)議解釋器210可與框架200的其它的組件通信以指令其它的組件執(zhí)行當前的文件系統(tǒng)操作。在當前的文件系統(tǒng)操作已處理后,處理過程就行進到步驟324。
      更新狀態(tài)信息在步驟322中,在會話中執(zhí)行文件系統(tǒng)操作。根據(jù)文件系統(tǒng)操作的執(zhí)行來改變由該會話所使用的狀態(tài)。在本實例中,表示該會話狀態(tài)的狀態(tài)信息被稱為“所更新的狀態(tài)信息”。所更新的狀態(tài)信息反映了由當前的文件系統(tǒng)操作的處理過程所生成的狀態(tài)變化。例如,所更新的狀態(tài)信息反映了其為文件系統(tǒng)操作主題的文件是否已經(jīng)被打開以及是否在該文件上已授權(quán)了任何鎖。因此,在已經(jīng)針對該文件執(zhí)行了當前的文件系統(tǒng)操作以后,所更新的狀態(tài)信息反映了該文件的當前狀態(tài)。
      在步驟324中,存儲在查找機制212中的信息被更新以反映與當前的文件系統(tǒng)操作相關(guān)聯(lián)的所更新的狀態(tài)信息。在實施例中,一個或多個包含查找機制212的B-樹被更新以指示該會話的新狀態(tài)。包含查找機制212的B-樹可以通過以下方式被更新(a)生成新的狀態(tài)標識數(shù)據(jù)以標識所更新的狀態(tài)信息,以及(b)更新或添加條目到合適的查找機制212的B-樹中以反映所更新的狀態(tài)信息。
      例如,假定在步驟322中,在步驟322中被處理的當前的文件系統(tǒng)操作是在特定文件的第一個100字節(jié)上所執(zhí)行的基于文件的鎖的操作。資源鎖222可通過存取授權(quán)鎖B-樹來初始確定是否有沖突鎖已經(jīng)被授權(quán)到該文件上。資源鎖222可使用在當前的文件系統(tǒng)操作中所標識的文件的文件句柄來遍歷該授權(quán)鎖B-樹。如果在授權(quán)鎖B-樹中存在該文件句柄的條目,則檢查該條目將通知資源鎖222該文件上是否已被授權(quán)有沖突鎖。
      如果資源鎖222確定還沒有沖突鎖被授權(quán)到該文件,那么資源鎖222(a)生成新的狀態(tài)標識數(shù)據(jù)以標識該資源的新狀態(tài),以及(b)添加條目到授權(quán)鎖B-樹以反映所請求的鎖的授權(quán)。具體來說,資源鎖222可使用該資源的所新近生成的新狀態(tài)標識數(shù)據(jù)來添加新條目到授權(quán)鎖B-樹,以及隨后,刪除由先前的狀態(tài)標識數(shù)據(jù)所已引用的鎖B-樹中的先前條目。授權(quán)鎖B-樹中的新條目除了包含在該資源上所授權(quán)的先前鎖以外,還包含對在該文件的第一個100字節(jié)上所授權(quán)的基于文件鎖的引用,因此不需要存儲由先前的狀態(tài)標識數(shù)據(jù)所引用的條目。
      在步驟324執(zhí)行以后,處理過程就行進到步驟326。
      復合請求中所指定的迭代操作每個請求都可以是指定了一個或多個待執(zhí)行的文件系統(tǒng)操作的復合請求。在步驟326中,如果在步驟314中所接收到的請求為復合請求,并且還有復合請求中所指定的另外的未被處理的文件系統(tǒng)操作,那么處理過程就行進到步驟318,其中步驟314的第二請求中所指定的下一個未被處理的文件系統(tǒng)操作變?yōu)椤爱斍暗奈募到y(tǒng)操作”。在這種方式下,由框架200依次處理在復合請求中所指定的每個文件系統(tǒng)操作。
      在步驟314的第二請求中所指定的所有文件系統(tǒng)操作都被處理完畢以后,處理過程就行進到328。
      向請求者提供結(jié)果和經(jīng)修正的狀態(tài)標識符在步驟328中,執(zhí)行在步驟314的請求中所指定的所有的文件系統(tǒng)操作的結(jié)果被傳送到有通信聯(lián)絡(luò)的請求者。該通信信息可包含標識已被分配到其曾為被成功執(zhí)行的文件系統(tǒng)操作的主題的特定資源的狀態(tài)信息的任何狀態(tài)標識數(shù)據(jù)。可以由協(xié)議解釋器210通過把處理復合請求的每個文件系統(tǒng)操作的結(jié)果以及響應(yīng)于執(zhí)行狀態(tài)文件系統(tǒng)操作所生成的任何狀態(tài)標識數(shù)據(jù)發(fā)送到該請求者來執(zhí)行步驟328。例如,如果該請求者已經(jīng)請求了該請求者先前打開的文件上的特定字節(jié)范圍上的讀寫鎖的授權(quán),則協(xié)議解釋器210可通過發(fā)送包括標識該資源的新狀態(tài)的新狀態(tài)標識數(shù)據(jù)的通信信息(即,該讀寫鎖被授權(quán)到特定文件的特定字節(jié)范圍上)到該請求者執(zhí)行步驟328。注意響應(yīng)于狀態(tài)文件系統(tǒng)操作的成功處理、而不是響應(yīng)于無狀態(tài)文件系統(tǒng)操作的成功處理,新的狀態(tài)標識信息就被傳送到該請求者。
      在NFS協(xié)議中,處理在復合請求中所指定的多個文件系統(tǒng)操作的結(jié)果可以單一通信信息方式被傳送到該請求者。因此,在步驟328中傳送到該請求者的狀態(tài)標識數(shù)據(jù)可以被包括在復合請求中所指定的每個被成功執(zhí)行的狀態(tài)文件系統(tǒng)操作的狀態(tài)標識信息的單一通信信息以所述通信信息方式發(fā)送。
      如果框架200不能夠處理復合請求中的特定文件系統(tǒng)操作,那么單一通信信息被傳送到該請求者。該通信信息包括對以下進行描述的信息(a)包括任何新狀態(tài)標識信息的、在已被處理的復合請求中所指定的文件系統(tǒng)操作的處理結(jié)果,以及(b)指示不能被執(zhí)行的文件系統(tǒng)操作的信息。
      應(yīng)用框架來處理無狀態(tài)事務(wù)框架200還可處理無狀態(tài)請求,諸如,無狀態(tài)文件系統(tǒng)操作或遵守無狀態(tài)協(xié)議的請求。當協(xié)議解釋器210接收含有無狀態(tài)請求的信息包時,協(xié)議解釋器210就可傳送該信息包到組件以讀取和解析該信息包。例如,協(xié)議解釋器210發(fā)送包含有FTP請求的信息包到FTP信息包讀取器226以及協(xié)議解釋器210發(fā)送包含有HTTP請求的信息包到HTTP信息包讀取器228。
      在讀取和解析了無狀態(tài)請求以后,F(xiàn)TP信息包讀取器226和HTTP信息包讀取器228就傳送標識所述無狀態(tài)請求的信息到協(xié)議解釋器210。協(xié)議解釋器210可依次執(zhí)行所述無狀態(tài)請求或與框架200的其它組件進行通信以執(zhí)行所述無狀態(tài)請求,例如,可要求鎖222來鎖定資源。因為該項請求是無狀態(tài)的,一旦該項請求被成功執(zhí)行,就不需要分配狀態(tài)信息到該項請求。
      文件系統(tǒng)操作和數(shù)據(jù)庫事務(wù)之間的關(guān)系當客戶想要寫文件時,該客戶可請求執(zhí)行一個打開文件系統(tǒng)操作,繼而是多個寫文件系統(tǒng)操作,以及隨后的一個關(guān)閉文件系統(tǒng)操作。出于本節(jié)的目的,從所述打開文件系統(tǒng)操作到其相應(yīng)的關(guān)閉文件系統(tǒng)操作,單一文件系統(tǒng)操作涉及多個NFS操作。為了執(zhí)行單一文件系統(tǒng)操作,數(shù)據(jù)庫服務(wù)器122可被要求來執(zhí)行一個或多個數(shù)據(jù)庫事務(wù)。在文件系統(tǒng)操作執(zhí)行以前提交所述一個或多個數(shù)據(jù)庫事務(wù)的每一個。因此,在已知該文件系統(tǒng)操作的執(zhí)行是否將要成功以前,通過提交特定的數(shù)據(jù)庫事務(wù)來對數(shù)據(jù)庫124做出改變。
      因此,如在下幾節(jié)進一步詳細說明的那樣,想要查看資源的請求者可期望查看或是(a)當前反映任何所提交的數(shù)據(jù)庫事務(wù)的資源的版本,或是(b)只反映所完成的文件系統(tǒng)操作的、而不反映與還未被完成的文件系統(tǒng)操作對應(yīng)的任何所提交的數(shù)據(jù)庫事務(wù)的資源的版本。
      打開所提交的修改請求者可獨立地發(fā)送打開和關(guān)閉命令到相同資源上。因此,即使一關(guān)閉命令可相對于某一個請求者關(guān)閉文件,該文件相對于所有的請求者仍舊可是沒有關(guān)閉的。術(shù)語“最后關(guān)閉”是指生成相對于所有的請求者都關(guān)閉的文件的一關(guān)閉文件系統(tǒng)操作。因此,任何當前被一個或多個請求者所打開的資源還沒有在該資源上執(zhí)行最后關(guān)閉。
      可以在文件被打開的時刻和最后關(guān)閉的時刻之間執(zhí)行每個都改變文件狀態(tài)的多個數(shù)據(jù)庫事務(wù)??梢栽谠撐募蠄?zhí)行最后關(guān)閉之前提交在該文件上所作的修改。以下修改在本文稱為“打開提交的修改”(“open-committed changes”)(1)已經(jīng)在數(shù)據(jù)庫中被提交、但(2)涉及還不具有最后關(guān)閉的文件的修改。
      不一致客戶當還沒有在資源上執(zhí)行最后關(guān)閉并且請求者發(fā)送獲取該資源的請求時,該請求者應(yīng)該接收的資源的狀態(tài)依賴于與該請求者關(guān)聯(lián)的客戶類型?!安灰恢驴蛻簟笔侵钙谕榭丛撡Y源的“當前狀態(tài)”的客戶。在這種環(huán)境下,該資源的當前狀態(tài)包括對該資源所做的任何打開提交的修改,但不包括任何對該資源所作的未被提交的修改。
      例如,如果兩個數(shù)據(jù)庫提交事務(wù)自從資源已首次打開而還沒有在該資源上執(zhí)行最后關(guān)閉的期間改變了該資源的狀態(tài),向該資源發(fā)送請求的不一致客戶就期望查看反映了由該兩個數(shù)據(jù)庫事務(wù)所作的改變的資源的狀態(tài)。使用NFS、FTP、或HTTP協(xié)議存取DBMS 120的客戶是不一致客戶的實例。與不一致客戶關(guān)聯(lián)的請求者將為不一致請求者,即,該請求者將期望查看該資源的當前狀態(tài)。
      一致客戶一致客戶是指不被允許來查看任何打開提交的改變的客戶。相反,一致客戶只能查看在以下時間在資源上所作的被提交的修改(a)如果該資源已經(jīng)被打開但還沒有關(guān)閉則在該資源打開之前,或(b)已經(jīng)在該資源上執(zhí)行最后關(guān)閉以后。例如,假定已經(jīng)打開資源,但還沒有在該資源上執(zhí)行最后關(guān)閉。請求存取該資源的一致客戶期望查看僅在執(zhí)行打開操作之前的該資源的狀態(tài)。
      因此,如果兩個被提交的數(shù)據(jù)庫事務(wù)自從該資源被打開而還沒有執(zhí)行最后關(guān)閉這一期間已經(jīng)改變了資源的狀態(tài),那么向該資源發(fā)送請求的一致客戶就期望查看不反映由該兩個事務(wù)所作的改變的資源的狀態(tài)。為便于說明,必須由一致客戶查看的資源的狀態(tài)應(yīng)當被稱為該資源的“關(guān)閉提交的”(“closed-committed”)版本。
      使用SQL協(xié)議存取DBMS 120的客戶為一致客戶的實例。與一致客戶關(guān)聯(lián)的任何請求者都將是一致請求者,即,該請求者將期望查看在關(guān)閉提交狀態(tài)下的該資源的狀態(tài)。
      為了進一步說明,以下的文件系統(tǒng)操作和時間點以下列次序出現(xiàn)(1)時刻t1(2)請求者1打開文件f1(3)請求者1提交一項對文件f1的改變(4)時刻t2(5)請求者2打開文件f1(6)請求者2提交一項對文件f1的改變(7)時刻t3(8)請求者1關(guān)閉文件f1(9)時刻t4(10)請求者2關(guān)閉文件f1(11)時刻t5
      在時刻t3,文件f1的一致版本是在時刻t1處的文件,以及該文件的不一致版本是在時刻t3處的文件。在時刻t4,文件f1的一致版本是在時刻t1處的文件,以及該文件的不一致版本是在時刻t4處的文件。在時刻t5,文件f1的一致版本是在時刻t5處的文件,以及該文件的不一致版本是在時刻t5處的文件。因為一致客戶期望查看該資源的先前狀態(tài),必須保持本狀態(tài)一直到在該資源上執(zhí)行最后關(guān)閉。
      重構(gòu)關(guān)閉提交的版本為了使框架200支持一致請求者和非一致請求者,框架200使用不同類型的鎖,即,數(shù)據(jù)庫鎖和基于文件的鎖。數(shù)據(jù)庫鎖是響應(yīng)于執(zhí)行數(shù)據(jù)庫操作而被獲得的鎖,當成功完成(提交)數(shù)據(jù)庫操作時,就釋放數(shù)據(jù)庫鎖?;谖募逆i是響應(yīng)于執(zhí)行一打開文件系統(tǒng)操作而被獲得的鎖,以及,當執(zhí)行一關(guān)閉文件系統(tǒng)操作時,就釋放基于文件的鎖。
      圖4是示出了根據(jù)本發(fā)明的實施例使用數(shù)據(jù)庫鎖和基于文件的鎖的功能步驟的流程圖。在步驟410中,請求者請求涉及特定資源的操作??捎煽蛻舳?10通過通信鏈路130發(fā)送請求到數(shù)據(jù)庫服務(wù)器122來執(zhí)行步驟410。在步驟410執(zhí)行以后,處理過程就行進到步驟412。
      在步驟412中,作出關(guān)于該請求者的請求者類型的決定??捎蓴?shù)據(jù)庫服務(wù)器122執(zhí)行步驟412?;谡埱笳哳愋停瑪?shù)據(jù)庫服務(wù)器122確定特定資源的何種版本發(fā)送到該請求者。如果該請求者是不一致請求者,那么數(shù)據(jù)庫服務(wù)器122發(fā)送特定資源的當前版本。然而,如果該請求者是一致請求者,那么數(shù)據(jù)庫服務(wù)器122發(fā)送特定資源的舊版本,即,該資源的關(guān)閉提交版本。
      可基于該項請求遵循的協(xié)議類型來進行請求者類型的確定。如果該項請求遵循SQL協(xié)議,那么該請求者是一致請求者。然而,如果該項請求遵循NFS、FTP、或HTTP協(xié)議,那么該請求者就是不一致請求者。在步驟412執(zhí)行以后,處理過程就行進到步驟414。
      在步驟414中,為了執(zhí)行所請求的操作而獲得在特定資源上的第一鎖。該第一鎖是第一類型的鎖,比如基于文件的鎖。在步驟414執(zhí)行以后,處理過程就行進到步驟416。
      在步驟416中,為了執(zhí)行被請求的操作所要求的每個數(shù)據(jù)庫操作而獲得第二鎖。該第二鎖是第二類型的鎖,比如數(shù)據(jù)庫鎖。
      在實施例中,在執(zhí)行改變特定資源的狀態(tài)的任何數(shù)據(jù)庫操作之前,該資源的臨時副本存儲在數(shù)據(jù)庫124中。當基于文件的鎖被授權(quán)到特定資源以后,對特定資源的改變就被反映在該資源的臨時副本中,而不是實際的資源自身。因為該資源的原始版本保持不變,在為一致請求者提供服務(wù)中就可由數(shù)據(jù)庫服務(wù)器122使用原始版本。因為該臨時副本反映了由所提交的數(shù)據(jù)庫操作在該資源上所作的所有修改,所以,在為不一致請求者提供服務(wù)中數(shù)據(jù)庫服務(wù)器122就可使用該資源的臨時副本。在步驟416執(zhí)行以后,處理過程就行進到步驟418。
      在步驟418中,響應(yīng)于對應(yīng)的數(shù)據(jù)庫操作的成功完成而釋放數(shù)據(jù)庫鎖。當數(shù)據(jù)庫系統(tǒng)執(zhí)行該操作時,數(shù)據(jù)庫系統(tǒng)就提交用于執(zhí)行該操作的事務(wù),并且釋放被保持于已經(jīng)過操作過程中修改的所有資源上的數(shù)據(jù)庫鎖。在被請求的操作所要求的所有數(shù)據(jù)庫操作執(zhí)行完畢以后,處理過程就行進到步驟420。
      在步驟420中,響應(yīng)于該文件系統(tǒng)操作的成功完成而釋放基于文件的鎖。具體來說,當在該資源上執(zhí)行最后關(guān)閉時,釋放該資源上的基于文件的鎖,并可建立該資源的臨時副本作為該資源的當前版本。例如,可通過復制臨時副本覆蓋原始版本隨后刪除臨時副本的方式,建立臨時副本作為當前版本。
      在執(zhí)行該文件系統(tǒng)操作以后,該資源的不一致版本和該資源的關(guān)閉提交的版本是相同的。結(jié)果,直到該資源被再次打開以前,可通過使用該資源的原始版本來為一致請求者和非一致請求者這兩者提供服務(wù)。
      通過執(zhí)行圖4的步驟,基于文件的鎖和數(shù)據(jù)庫鎖可被用來使數(shù)據(jù)庫服務(wù)器122能為一致請求者和不一致請求者這兩者提供服務(wù)。當在資源上維護基于文件的鎖時,在執(zhí)行所述打開文件系統(tǒng)操作之前的資源狀態(tài)就被保存,從而允許數(shù)據(jù)庫服務(wù)器122為一致請求者提供服務(wù)。
      管理并發(fā)存取當多個請求者執(zhí)行涉及相同資源的操作時,基于文件的鎖的使用是同樣方便的。例如,多個請求者可每個都發(fā)送在同一個文件上執(zhí)行文件系統(tǒng)操作的請求。多于一個的請求者可打開文件,以及多于一個的請求者可對該資源的狀態(tài)作出修改。
      為了說明,假定第一個請求者已打開文件并且修改了該文件。當?shù)诙€請求者為同一個文件的版本發(fā)送請求到數(shù)據(jù)庫服務(wù)器122時,數(shù)據(jù)庫服務(wù)器122確定第二個請求者的請求者類型。如果第二個請求者是一致請求者,那么數(shù)據(jù)庫服務(wù)器122提供不反映自從該文件已被打開期間由第一個請求者在該文件上所作的任何改變的文件版本。如果第二個請求者是非一致請求者,那么數(shù)據(jù)庫服務(wù)器122提供反映自該文件打開始起由第一個請求者在該文件上所作的改變的那個文件的版本。
      關(guān)于當該資源是基于文件的鎖的主題時數(shù)據(jù)庫服務(wù)器可怎樣維護資源的狀態(tài)的進一步的信息在以下的題為“執(zhí)行事務(wù)語義”的節(jié)中描述。
      執(zhí)行事務(wù)語義關(guān)于一旦該資源成為打開文件系統(tǒng)操作的主題則為什么可以方便地維護該資源的先前版本的信息有許多原因。首先,如上所述,一旦該資源成為打開文件系統(tǒng)操作的主題但還沒有成為最后關(guān)閉的主題,維護該資源的先前版本就允許數(shù)據(jù)庫服務(wù)器122為來自一致請求者的資源請求提供服務(wù)。其次,維護該資源的先前版本就允許該數(shù)據(jù)庫服務(wù)器將該資源還原到先前的版本。在各種情況下,可能需要將資源還原到先前版本,比如在以下情況下(a)請求者創(chuàng)建資源的錯誤版本,(b)請求者創(chuàng)建與圖表(schema)不兼容的基于該圖表的資源的版本,或(c)由多個請求者在資源上所執(zhí)行的改變彼此不相兼容。
      重要的是,需要從該資源中去掉以還原該資源到先前狀態(tài)的改變包括所提交的修改。結(jié)果,數(shù)據(jù)庫系統(tǒng)用來去除由未被提交的事務(wù)所產(chǎn)生的改變的傳統(tǒng)取消(undo)機制對執(zhí)行所需的還原是不足夠的。
      即使已經(jīng)改變了該資源的狀態(tài)的被提交的事務(wù)已經(jīng)執(zhí)行,本發(fā)明的實施例也可方便地將資源還原到先前狀態(tài)。根據(jù)本發(fā)明的實施例,被提交的數(shù)據(jù)庫事務(wù)在資源上作了一個或多個改變。在被提交的數(shù)據(jù)庫事務(wù)已經(jīng)改變了該資源的狀態(tài)以后,接收請求以還原該資源到由所提交的數(shù)據(jù)庫事務(wù)所做的改變之前的狀態(tài)。例如,客戶端110可發(fā)送請求給數(shù)據(jù)庫服務(wù)器122以還原特定的文件到在特定的時間點以前的狀態(tài)(比如該文件的關(guān)閉提交的版本)。
      響應(yīng)于接收該請求,該資源被還原到在特定的時間點(比如該文件已被打開的時間點)以前的狀態(tài)。在還原該資源的過程中,該資源的當前狀態(tài)停止來反映由所提交的數(shù)據(jù)庫事務(wù)已在該文件上做出的改變。用于還原資源到先前狀態(tài)的技術(shù)將在下一節(jié)中進一步詳細討論。
      資源還原技術(shù)可以應(yīng)用各種技術(shù)將資源還原到在特定時間點以前的狀態(tài)。例如,所使用的特定技術(shù)可依賴于該資源是否是基于圖表的資源或非基于圖表的資源。基于圖表的資源是遵守被限定的圖表的資源。例如,遵守給定的圖表的購買訂單文檔是基于圖表的資源的實例。非基于圖表的資源是不基于圖表的資源的資源。
      以解構(gòu)形式存儲資源可以通過將整個資源存儲在一起以結(jié)構(gòu)化形式存儲基于圖表的資源,例如,在數(shù)據(jù)庫表的大對象(LOB)列中存儲XML文檔。另外,通過分別存儲那些包括基于圖表的資源的元素并以解構(gòu)的形式方便地存儲基于圖表的資源。例如,描述XML文檔的單個XML標志的數(shù)據(jù)及其關(guān)聯(lián)的數(shù)據(jù)可存儲于數(shù)據(jù)庫表的列中。因為可以分別存儲基于圖表的資源的元素,在讀取基于圖表的資源之前就可需要重構(gòu)基于圖表的資源的元素。
      圖5示出了表示用于以解構(gòu)的形式存儲基于圖表的資源的機制的資源表。圖5的表包含引用列504。描述基于圖表的資源的數(shù)據(jù)可存儲于資源表中或由該資源表所引用。例如,該資源表的引用列504包含標識另一個表(即XML類型表510)的指針506,在該表其中存儲與基于圖表的資源關(guān)聯(lián)的數(shù)據(jù)。XML類型的表510自身可引用一個或多個存儲該基于圖表的資源的其它數(shù)據(jù)元素的其它表。例如,XML類型表510使用對嵌套表520的引用512來表示。
      XML類型表510以及任何嵌套表502存儲關(guān)于基于圖表的資源的元素的數(shù)據(jù)。當請求者想要讀取基于圖表的資源的第一個100字節(jié)時,必須重構(gòu)該資源來為該項請求提供服務(wù),這是因為XML類型表510不存儲描述基于圖表的資源的每個數(shù)據(jù)元素都出現(xiàn)在哪個字節(jié)的信息。結(jié)果,當從基于圖表的資源讀取數(shù)據(jù)時,必須重構(gòu)基于圖表的資源并將其存儲在XML大對象列502中。如果請求者想要讀取基于圖表的資源的第一個100字節(jié)時,那么可以通過讀取存儲在XML大對象列502的重構(gòu)資源的第一個100字節(jié)來由數(shù)據(jù)庫服務(wù)器122輕松地執(zhí)行這種請求。
      以下將進一步詳盡闡述,可以在存儲在XML大對象列502中的資源的重構(gòu)副本上執(zhí)行后續(xù)操作,同時保持存儲在XML類型表510、以及任何嵌套表520中的資源的解構(gòu)元素(deconstructedelement)的完整性。
      還原基于圖表的資源根據(jù)一個實施例,基于“先前的版本信息”還原基于圖表的資源。圖5是根據(jù)本發(fā)明的實施例存儲基于圖表的資源的先前版本信息的系統(tǒng)的框圖。先前版本信息保存在XML類型表510和任何嵌套表520中,同時可以在存儲于XML大對象列502中的資源的重構(gòu)副本上執(zhí)行對基于圖表的資源所作的修改,一直到在基于圖表的資源上執(zhí)行最后關(guān)閉。
      在本發(fā)明的實施例中,當基于文件的鎖被授權(quán)在資源上時,緊接著可改變該資源的狀態(tài)的數(shù)據(jù)庫操作執(zhí)行之前,創(chuàng)建基于圖表的資源的構(gòu)造副本。例如,可創(chuàng)建基于圖表的資源的構(gòu)造副本并存儲在XML大對象列502中。
      此后,該資源的構(gòu)造副本(存儲在XML大對象列502中的資源的副本)被當作該資源的當前版本,并且在該資源的構(gòu)造副本(存儲在XML大對象列502中的資源的副本)上作出該數(shù)據(jù)庫操作所需要的修改。實際上,在XML大對象列502中的該資源的副本變?yōu)樵撡Y源的臟版本的緩存區(qū)。注意基于圖表的資源的解構(gòu)版本仍舊在XML類型表510中進行維護。
      為了把基于圖表的資源還原到該資源的解構(gòu)副本,就要刪除存儲于XML大對象列502中的資源的副本。隨后,存儲在XML類型表510以及任何嵌套表520中的資源的解構(gòu)版本取代存儲于XML類型表510中的構(gòu)造副本而作為該資源的當前版本。
      當在該資源上執(zhí)行一關(guān)閉文件系統(tǒng)操作時,可通過改變存儲在XML類型表510、以及任何嵌套表520中的資源的解構(gòu)版本來使得對存儲在XML類型表510中的資源的解構(gòu)副本上所作的改變成為永久,以反映存儲在XML大對象列502中的資源的構(gòu)造副本。
      使用快照時間來還原非基于圖表的資源圖6A和6B是根據(jù)本發(fā)明的實施例存儲非基于圖表的資源的先前版本的框圖。圖6A和6B將被用來討論用于存儲非基于圖表的資源的先前版本信息的三種不同的方法。
      根據(jù)圖6A中所示的第一種方法,資源表600存儲在大對象列602中存儲非基于圖表的資源。在這種方法中,當在該資源上執(zhí)行一打開文件系統(tǒng)操作時,快照時間被存儲在資源表600的列604中??煺諘r間指示緊接著在該資源上執(zhí)行所述打開文件系統(tǒng)操作之前的邏輯時間。
      在一個或多個數(shù)據(jù)庫事務(wù)提交了對該資源的改變以后,數(shù)據(jù)庫事務(wù)也許不再是“未完成的”,但是通過自快照時間開始使用的與該資源關(guān)聯(lián)的取消信息就可將該資源還原到該快照時間的狀態(tài)。取消信息是指由DBMS 120所維護的、可以被用作“回卷”或取消已經(jīng)被執(zhí)行但尚未提交的數(shù)據(jù)庫事務(wù)的信息。
      快照時間和取消信息被用于應(yīng)用一組對該資源進行的改變,以改變該資源的狀態(tài)來反映在快照時間的時刻該資源的狀態(tài)。一旦該資源被還原以反映該資源在快照時間的時刻的狀態(tài),該快照時間就從該資源表600的列604中被去除掉。
      在實施例中,“閃回查詢”(flashback query)可被用于應(yīng)用一組對該資源進行的改變,以改變該資源的狀態(tài)來反映在快照時間的時刻該資源的狀態(tài)。執(zhí)行閃回查詢的技術(shù)描述在2003年4月30日提交的題為“閃回數(shù)據(jù)庫”的美國專利申請序列第10/427,511號中,其完整內(nèi)容結(jié)合于本文進行闡述以作參考。
      使用高速緩存列來還原非基于圖表的資源根據(jù)圖6B所示的第二個方法,資源表650在LOB列652中存儲非基于圖表的資源。在這種方法中,當在該資源上執(zhí)行一打開文件系統(tǒng)操作時,該資源的副本就被存儲在資源表650的列654中。列654被用作“高速緩存列”。具體來說,存儲在列654中的資源的副本被當作該資源的當前版本。當數(shù)據(jù)庫事務(wù)改變了該資源時,該項改變就在存儲于列654中的資源的副本上作出、而不是在存儲于列652中的原始資源上作出。
      如果在該資源上執(zhí)行一關(guān)閉文件系統(tǒng)操作,那么存儲在654中的該資源的副本就可被存儲在列652中,因此該原始資源將反映由所提交的數(shù)據(jù)庫操作在該資源上所作的任何改變。直到執(zhí)行所述關(guān)閉文件系統(tǒng)操作,存儲在列652中的資源的當前值反映了緊接在所述打開文件系統(tǒng)操作執(zhí)行之前該資源的狀態(tài)。因此,如果需要還原該資源到緊接在所述打開文件系統(tǒng)操作執(zhí)行之前資源的狀態(tài),那么對需要出現(xiàn)的資源表650進行的僅有改變就是刪除存儲于列654中的資源的副本。在該資源上執(zhí)行所述最后關(guān)閉之前,不一致請求者可查看列654中的資源的副本,而一致請求者則可查看存儲在列652中的資源。
      混合方法由于存儲空間的限制,通常使用更新的取消信息來覆蓋早于某一時間的取消信息。結(jié)果,使用快照時間來執(zhí)行還原(即第一種方法)并不總是可行的。然而,當取消信息可用時,基于快照時間的還原可優(yōu)選于高速緩存列的還原(即第二種還原)。
      結(jié)果,在第三種(混合)方法中,除非數(shù)據(jù)庫服務(wù)器122確定該資源的取消信息在可能需要還原該資源時不可用,否則就執(zhí)行以上所討論的基于快照的方法。如果數(shù)據(jù)庫服務(wù)器122確定該資源的取消信息在可能需要還原該資源時不可用,那么隨后執(zhí)行以上所討論的高速緩存列方法。
      如果被數(shù)據(jù)庫服務(wù)器122所維護的取消信息的時間量小于可配置的時間量,數(shù)據(jù)庫服務(wù)器122就可確定該資源的取消信息在可能需要還原該資源時不可用。
      一致性檢查根據(jù)一個實施例,在關(guān)閉該文件并且沒有更多未決的打開文件系統(tǒng)操作時就檢查更新的文件的一致性。例如,可檢查基于圖表的資源以確?;趫D表的資源遵循該圖表的規(guī)律。如果基于圖表的資源不遵循其相應(yīng)的圖表,那么就可將該資源還原回其被打開時該資源的狀態(tài)。
      如上所述,如果資源是被授權(quán)的基于文件的鎖的主題,并且,或是請求者發(fā)送將該資源還原回較早狀態(tài)的請求或是如果該資源未能通過一致性檢查,那么,就可將該資源還原到如上所述的較早的狀態(tài)。以下將給出基于文件的鎖的進一步的細節(jié)和優(yōu)勢。
      基于文件的鎖基于文件的鎖使得數(shù)據(jù)庫服務(wù)器122在數(shù)據(jù)庫124中所維護的文件上執(zhí)行文件系統(tǒng)操作。資源鎖222可管理存儲于數(shù)據(jù)庫124中的資源上的文件系統(tǒng)鎖?;谖募逆i的行為在三個重要方面不同于用于諸如HTTP的無狀態(tài)協(xié)議的其它鎖。
      首先,基于文件的鎖可被授權(quán)到資源的一部分上,而不是恰好被授權(quán)到資源的整體上。特別地,基于文件的鎖可被授權(quán)到資源上的字節(jié)范圍上。因此,單個文件可以是多個基于文件的鎖的主題,其中,每個基于文件的鎖都覆蓋該文件的不同字節(jié)范圍。
      其次,基于文件的鎖為基于租用的,其意思是一旦特定的基于文件的鎖被授權(quán)到請求者,該特定鎖被授權(quán)的時間在該特定鎖到期以后的第一個時間周期。然而,由該請求者所接收的任何通信信息更新針對第二時間周期的特定鎖。因此,只要請求者與數(shù)據(jù)庫服務(wù)器122進行通信并在該文件系統(tǒng)鎖到期之前,該請求者就可持續(xù)更新基于文件的鎖。
      一旦特定的文件系統(tǒng)鎖到期,查找機制212就被更新以反映該特定鎖不再被授權(quán)??梢灾芷谛缘貦z查在查找機制212中所維護的數(shù)據(jù)以確保請求者所請求的每個鎖都仍然是有效的。
      當特定請求者請求與先前被授權(quán)的鎖相沖突的另一鎖時,就可檢查先前所授權(quán)的鎖以確保先前授權(quán)的鎖仍然有效。如果所述先前授權(quán)的鎖不再有效,那么就更新存儲于機制212中的信息以反映該鎖是無效的(例如,關(guān)于可能被刪除的鎖的信息)。還有,當特定客戶端已到期時,已經(jīng)被授權(quán)到特定客戶端的所有鎖就都被釋放。在實施例中,客戶端在自該客戶與框架200最后通信時起可配置的時間量耗盡以后可能到期。因此,如果先前授權(quán)的鎖與被請求授權(quán)的鎖沖突,那么可檢查與所述先前授權(quán)的鎖關(guān)聯(lián)的客戶端以確認該客戶端仍然有效。如果該客戶端不是有效的,那么就釋放所述先前授權(quán)的鎖,并且可執(zhí)行被請求授權(quán)的鎖。在本發(fā)明的實施例中,通過檢查客戶B-樹來確定特定客戶端是否已經(jīng)到期。
      基于文件的鎖與無狀態(tài)協(xié)議鎖的第三個差別是沒有只提供讀取存取的基于文件的鎖。相反,基于文件的鎖不僅授權(quán)讀存取,還授權(quán)寫存取。
      在本發(fā)明的實施例中,基于文件的鎖包括覆蓋整個資源的第一集,以及覆蓋部分資源(比如該資源的字節(jié)范圍)的第二集。圖7是示出了根據(jù)本發(fā)明的實施例的各種類型的基于文件的鎖以及其兼容性。圖7示出的各種類型的基于文件的鎖的每一個都將在下面作簡短描述。
      字節(jié)讀寫基于文件的鎖是在該資源的一部分上的鎖。所述字節(jié)讀寫基于文件的鎖可用來在資源的字節(jié)范圍上授權(quán)讀和寫存取。
      字節(jié)寫基于文件的鎖是在該資源的一部分上的鎖。所述字節(jié)寫基于文件的鎖可用來在資源的字節(jié)范圍上授權(quán)寫存取。
      拒絕讀基于文件的鎖是在整個資源上的鎖。所述拒絕讀基于文件的鎖可用來拒絕除被授權(quán)所述拒絕讀鎖的請求者之外的任何請求者讀存取資源。
      拒絕寫基于文件的鎖是在整個資源上的鎖。所述拒絕寫基于文件的鎖可用來拒絕除被授權(quán)所述拒絕寫鎖的請求者之外的任何請求者寫存取資源。
      基于文件的鎖不兼容于鎖共享的鎖或鎖獨占的鎖(比如WebDAV鎖)。圖7描述了各種基于文件的鎖的兼容性。當特定的基于文件的鎖與先前被授權(quán)的另一鎖不兼容時,那么基于文件的鎖將不被授權(quán)。因此,如果字節(jié)讀寫鎖的范圍和字節(jié)寫鎖的范圍不沖突,字節(jié)讀寫鎖就可以被授權(quán)到其上已經(jīng)被授權(quán)了字節(jié)寫鎖的資源上。然而,拒絕讀鎖不能被授權(quán)到其上已經(jīng)被授權(quán)了字節(jié)寫鎖的資源上。
      在真正應(yīng)用群集中的基于文件的鎖可以在真正應(yīng)用群集(RAC)中執(zhí)行數(shù)據(jù)庫122,比如通過使用Oracle公司的RAC 10g選項來執(zhí)行。在RAC環(huán)境中,當基于文件的鎖被授權(quán)到資源上時,數(shù)據(jù)必須存儲于描述了哪些數(shù)據(jù)庫服務(wù)器已授權(quán)基于文件的鎖到該資源上的數(shù)據(jù)庫124。
      例如,存儲在數(shù)據(jù)庫中的資源可與以下相關(guān)聯(lián)(a)表示基于文件的鎖已經(jīng)被授權(quán)到該資源上的標志以及(b)標識已授權(quán)基于文件的鎖到該資源上的數(shù)據(jù)庫服務(wù)器的信息。查找機制212維護與存儲器中被授權(quán)的基于文件的鎖有關(guān)的數(shù)據(jù)。如果與所授權(quán)的基于文件的鎖有關(guān)的信息對RAC環(huán)境中的其它節(jié)點是可見的,那么存儲在存儲器中的信息在維持數(shù)據(jù)一致性的方式下必須是永久存儲的或者是可傳送到RAC的其它節(jié)點的。如果存儲在查找機制212中的信息對除其所駐留的數(shù)據(jù)庫服務(wù)器之外的RAC的其它數(shù)據(jù)庫服務(wù)器是不可見的,那么任何由第一個數(shù)據(jù)庫服務(wù)器所授權(quán)的基于文件的鎖都可能與第二個數(shù)據(jù)庫服務(wù)器的基于文件的鎖沖突。
      上述由數(shù)據(jù)庫服務(wù)器122所使用的基于文件的鎖允許數(shù)據(jù)庫服務(wù)器122處理諸如被請求的NFS操作的、在由數(shù)據(jù)庫124所維護的文件上的狀態(tài)請求。結(jié)果,在數(shù)據(jù)庫服務(wù)器122可運用上述的文件系統(tǒng)操作鎖時,客戶端110就可按破壞數(shù)據(jù)一致性的方式使用NFS協(xié)議存取存儲在數(shù)據(jù)庫124中的文件。
      實施機制根據(jù)實施例,客戶端110、數(shù)據(jù)庫服務(wù)器122、以及數(shù)據(jù)庫124的每一個都可在計算機系統(tǒng)上進行實施。在一個實施例中,圖2的處理過程200包括一組由一個或多個處理器執(zhí)行的指令。在一個實施例中,圖1中的應(yīng)用程序和可共享接口111包括一組由一個或多個的處理器執(zhí)行的指令。圖3示出一個在其中執(zhí)行指令的可能實施例。計算機系統(tǒng)800包括總線802,以便于信息交換;以及與總線802連接的一個或多個處理器804,以用于處理信息。計算機系統(tǒng)800還包括連接到總線802的諸如隨機存取存儲器(RAM)或其他動態(tài)存儲裝置的主存儲器806,其用于對信息和將被處理器804執(zhí)行的指令進行存儲。主存儲器806還可用于在處理器804執(zhí)行指令期間存儲臨時變量或其他中間信息。計算機系統(tǒng)800還可包括連接到總線802的只讀存儲器(ROM)808或其他靜態(tài)存儲裝置,它們用于為處理器804存儲靜態(tài)信息和指令。提供諸如磁盤或光盤的存儲裝置810,并連接到總線802,用于存儲信息和指令。
      計算機系統(tǒng)800可經(jīng)由總線802連接到用于將信息顯示給計算機用戶的顯示器812。包括字母數(shù)字和其他鍵的輸入裝置814連接到總線802,用于將信息和命令選擇傳輸?shù)教幚砥?04。另一種用戶輸入裝置是諸如鼠標、跟蹤球或光標方向鍵的光標控制器816,其用于將方向信息和命令選擇傳輸?shù)教幚砥?04,并用于控制在顯示器812上的光標移動。該輸入裝置通常具有在第一軸(例如x)和第二軸(例如y)這兩個軸上的兩個自由度,這就允許所述裝置在一個平面內(nèi)指定位置。
      在計算機系統(tǒng)800中,總線802可以是允許信息、信號、數(shù)據(jù)等在各種組件之間交換的任何機制和/或介質(zhì)。例如,總線802可以是一組攜帶電信號的導線??偩€802也可以是在一個或更多的組件之間傳送無線信號的無線介質(zhì)(例如空氣)??偩€802還可以是連接一個或多個組件的網(wǎng)絡(luò)連接。使信息、信號、數(shù)據(jù)等能夠在各種組件之間交換的任何機制和/或介質(zhì)都可以用作總線802。總線802還可以是這些機構(gòu)/介質(zhì)的組合。例如,處理器804可以和存儲裝置810進行無線通信。在這種情況下,從處理器804和存儲裝置810的立場來看,總線802將會是諸如空氣的無線介質(zhì)。再者,處理器804可以和ROM 808進行電容性地(capacitively)通信。進一步來說,處理器804可以經(jīng)由網(wǎng)絡(luò)連接和主存儲器806進行通信。在這種情況下,總線802將會是網(wǎng)絡(luò)連接。再進一步說,處理器804可以經(jīng)由一組導線和顯示器812進行通信。在這種情況下,總線802將會是這一組導線。因此,取決于所述各種組件如何互相通信,總線802就可以采取不同的形式。如圖3中所顯示的總線802在功能上代表能夠使信息、信號、數(shù)據(jù)等在各種組件之間交換的全部機構(gòu)和/或所有介質(zhì)。本發(fā)明涉及用于執(zhí)行本文所述技術(shù)的計算機系統(tǒng)800的使用。根據(jù)本發(fā)明的一個實施例,通過計算機系統(tǒng)800來執(zhí)行這些技術(shù),以響應(yīng)于執(zhí)行含在主存儲器806中的一個或多個指令的一個或多個序列處理器804。這種指令可以從諸如存儲裝置810的另一個機器可讀的介質(zhì)讀入主存儲器806。執(zhí)行含在主存儲器806中的指令序列以使得處理器804執(zhí)行本文描述的處理步驟。在其它實施例中,可以用硬連線電路代替軟件指令或?qū)⒂策B線電路與軟件指令相結(jié)合以實施本發(fā)明。因此,發(fā)明的實施例并不限于硬件電路和軟件的任何具體組合。本文使用的術(shù)語“機器可讀介質(zhì)”指的是參與提供使機器以具體方式運轉(zhuǎn)的數(shù)據(jù)的任何介質(zhì)。在使用計算機系統(tǒng)800而實施的一個實施例中,例如,各種機器可讀的介質(zhì)參與將指令提供給處理器804以用于執(zhí)行。這種介質(zhì)可以采用多種形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)和傳輸介質(zhì)。舉例來說,非易失性介質(zhì)包括諸如存儲裝置810的光盤或磁盤。易失性介質(zhì)包括諸如主存儲器806的動態(tài)存儲器。傳輸介質(zhì)包括同軸線纜、銅線和光纖,它們又都包括構(gòu)成總線802的導線。傳輸介質(zhì)也可以采用聲波或光波的形式,諸如在無線電波和紅外數(shù)據(jù)通信中生成的那些波。
      機器可讀介質(zhì)的通常形式包括例如,軟盤、可更換磁盤、硬盤、磁帶或其他磁性介質(zhì)、CD-ROM、DVD或任何其他光存儲介質(zhì)、穿孔卡、紙帶、任何其他具有孔狀式樣的物理介質(zhì)、RAM、PROM、EPROM、FLASH-EPROM、任何其他存儲芯片或盒式磁帶、下文中描述的載波,或計算機能從中讀取的任何其他介質(zhì)。
      各種形式的機器可讀介質(zhì)可參與將一個或多個指令的一個或多個序列傳送到理器804來執(zhí)行。例如,指令可最初承載在遠程計算機的磁盤上。該遠程計算機能夠?qū)⑺鲋噶钛b載進其動態(tài)存儲器并使用調(diào)制解調(diào)器通過電話線發(fā)送這些指令。計算機系統(tǒng)800的本地調(diào)制解調(diào)器能夠接收電話線上的數(shù)據(jù)并使用紅外發(fā)射器將數(shù)據(jù)轉(zhuǎn)換為紅外信號。紅外探測器能夠接收紅外信號中攜帶的數(shù)據(jù)并且適當?shù)碾娐纺軌驅(qū)?shù)據(jù)放到總線802上。總線802將數(shù)據(jù)傳送到主存儲器806,處理器804從主存貯器806中取得數(shù)據(jù)并執(zhí)行指令。由主存儲器806所接收的指令可以在處理器804執(zhí)行之前或之后,可選地存儲在存儲裝置810上。
      計算機系統(tǒng)800還包括連接到總線802的通信接口818。連接到與本地網(wǎng)822相連的網(wǎng)絡(luò)鏈路820的通信接口818提供雙路數(shù)據(jù)通信。例如,通信接口818可以是綜合服務(wù)數(shù)字網(wǎng)絡(luò)(ISDN)卡或調(diào)制解調(diào)器,用于提供到相應(yīng)類型的電話線的數(shù)據(jù)通信連接。作為另一個實例,通信接口818可以是局域網(wǎng)(LAN)卡,用于提供到兼容的LAN的數(shù)據(jù)通信連接。也可以實現(xiàn)無線鏈路。在任何這樣的實現(xiàn)中,通信接口818都發(fā)送和接收帶有表示各種類型信息的數(shù)字數(shù)據(jù)流的電信號、電磁信號或光信號。
      傳統(tǒng)上,網(wǎng)絡(luò)鏈路820通過一個或多個網(wǎng)絡(luò)向其他數(shù)據(jù)裝置提供數(shù)據(jù)通信。例如,網(wǎng)絡(luò)鏈路820可以通過本地網(wǎng)822提供到主機824或到由互聯(lián)網(wǎng)服務(wù)商(ISP)826所操作的數(shù)據(jù)設(shè)備的連接。ISP826又通過現(xiàn)在通常稱作“互聯(lián)網(wǎng)”828的全球分組數(shù)據(jù)通信網(wǎng)絡(luò)提供數(shù)據(jù)通信服務(wù)。本地網(wǎng)絡(luò)822和互聯(lián)網(wǎng)828都使用攜帶數(shù)字數(shù)據(jù)流的電信號、電磁信號或光信號。將數(shù)字數(shù)據(jù)傳送到計算機系統(tǒng)800和從計算機系統(tǒng)800傳送數(shù)字數(shù)據(jù)的信號,即,通過各種網(wǎng)絡(luò)的信號、在網(wǎng)路鏈路820上的信號和通過通信接口818的信號,是傳輸信息的載波的示例性形式。
      計算機系統(tǒng)800能夠通過網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路820和通信接口818發(fā)送消息和接收數(shù)據(jù)(包括程序代碼)。在互聯(lián)網(wǎng)實例中,服務(wù)器830可通過互聯(lián)網(wǎng)828、ISP 826、本地網(wǎng)822和通信接口818傳輸對應(yīng)用程序進行請求的代碼。
      當代碼被接收到時,所接收的代碼就可以由處理器804執(zhí)行并存儲在存儲裝置810或其他非易失性存儲裝置中以用于今后執(zhí)行。這樣,計算機系統(tǒng)800可獲得以載波形式的應(yīng)用程序代碼。
      在這點上,應(yīng)該注意到,盡管已經(jīng)參考具體實施例描述了本發(fā)明,但是不應(yīng)解釋為本發(fā)明受到這樣的限制。在不脫離本發(fā)明精神的情況下,得益于本公開的本領(lǐng)域普通技術(shù)人員可以對本發(fā)明進行各種修改。因此,本發(fā)明不應(yīng)被用于示出本發(fā)明的具體實施例所限制,而僅由公布的權(quán)利要求及其等同物所限制。
      權(quán)利要求
      1.一種機器執(zhí)行的方法,包括以下步驟在數(shù)據(jù)庫系統(tǒng)端接收執(zhí)行文件系統(tǒng)操作的請求,其中,所述請求包括狀態(tài)標識數(shù)據(jù);基于所述狀態(tài)標識數(shù)據(jù),在所述數(shù)據(jù)庫系統(tǒng)中檢索與所述請求關(guān)聯(lián)的狀態(tài)信息;以及至少部分基于所述狀態(tài)信息來處理所述請求。
      2.根據(jù)權(quán)利要求1所述的方法,其中所述的檢索與所述請求關(guān)聯(lián)的狀態(tài)信息的步驟包括使用所述狀態(tài)標識數(shù)據(jù)作為查找機制中的關(guān)鍵值來檢索所述狀態(tài)信息。
      3.根據(jù)權(quán)利要求1所述的方法,其中,所述查找機制是從由B-樹和散列表所組成的組中選出的一個成員。
      4.根據(jù)權(quán)利要求1所述的方法,其中,所述請求是請求者發(fā)布的,以及所述方法還包括以下步驟響應(yīng)于處理所述請求,更新所述狀態(tài)信息來反映在資源上所述文件系統(tǒng)操作已經(jīng)被執(zhí)行以后所述資源的操作狀態(tài),其中,所更新的狀態(tài)信息用第二狀態(tài)標識數(shù)據(jù)進行標識;以及傳送所述第二狀態(tài)標識數(shù)據(jù)到所述請求者。
      5.根據(jù)權(quán)利要求1所述的方法,其中,所述第二狀態(tài)信息反映了響應(yīng)于處理所述請求而由所述請求者所打開的文件。
      6.根據(jù)權(quán)利要求1所述的方法,其中,所述第二狀態(tài)信息反映了響應(yīng)于處理所述請求而被授權(quán)給所述請求者的文件上的新鎖,以及其中,所述第二狀態(tài)信息反映了先前被授權(quán)給所述請求者的任何鎖。
      7.根據(jù)權(quán)利要求1所述的方法,其中,所述新鎖覆蓋了所述文件的指定字節(jié)范圍,其中所指定的字節(jié)范圍不跨越所有的所述文件。
      8.根據(jù)權(quán)利要求1所述的方法,其中,所述請求是第二請求,以及所述方法還包括以下步驟在接收所述第二請求之前,在所述數(shù)據(jù)庫系統(tǒng)端接收第一請求以便為請求者建立客戶標識符;以及傳送所述客戶標識符到所述請求者,其中,所述第二請求包括所述客戶標識符。
      9.根據(jù)權(quán)利要求1所述的方法,其中,所述請求對特定請求者進行標識,以及所述方法還包括以下步驟在所述的檢索與所述請求關(guān)聯(lián)的狀態(tài)信息的步驟之前,確定已發(fā)布所述請求的請求者是否實際就是在所述請求中被標識的特定請求者。
      10.根據(jù)權(quán)利要求1所述的方法,其中,所述請求由請求者發(fā)送,以及所述方法還包括以下步驟在執(zhí)行由所述請求所請求的特定操作之前,確定所述請求者是否具有足夠的權(quán)限級別來執(zhí)行所述特定操作。
      11.根據(jù)權(quán)利要求1所述的方法,其中,所述請求由請求者發(fā)送,以及其中,所述處理所述請求的步驟還包括以下步驟更新在所述數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)庫服務(wù)器端所維護的請求者數(shù)據(jù)以反映所述請求者,其中,所述請求者數(shù)據(jù)對被登記來發(fā)布文件系統(tǒng)操作的請求者進行標識。
      12.根據(jù)權(quán)利要求1所述的方法,其中所述的請求由請求者發(fā)布,其中所述的文件系統(tǒng)操作是打開文件的操作,以及其中所述的處理所述請求的步驟還包括以下步驟更新在所述數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)庫服務(wù)器端所維護的文件數(shù)據(jù)以反映所述請求者已經(jīng)打開了所述文件。
      13.根據(jù)權(quán)利要求1所述的方法,其中所述的請求由請求者發(fā)送,其中所述的文件系統(tǒng)操作是把文件的一部分進行鎖定的操作,以及其中所述的處理所述請求的步驟還包括以下步驟更新在所述數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)庫服務(wù)器端所維護的鎖定數(shù)據(jù)以反映所述請求者已經(jīng)鎖定的文件的那一部分。
      14.一種機器執(zhí)行的方法,包括以下步驟在數(shù)據(jù)庫系統(tǒng)端從請求者處接收請求以在由所述數(shù)據(jù)庫系統(tǒng)所維護的文件的一部分上執(zhí)行操作,其中,所述操作要求鎖被授權(quán)在所述部分上;通過查詢由所述數(shù)據(jù)庫系統(tǒng)所維護的多棵B-樹來確定所述請求者是否被授權(quán)所述鎖,以檢查先前是否已經(jīng)有任何沖突鎖被授權(quán);以及一旦確定所述請求者被授權(quán)所述鎖,就更新所述多棵B-樹以反映所述鎖被授權(quán)給所述請求者。
      15.根據(jù)權(quán)利要求14所述的方法,還包括以下步驟發(fā)送標識所述請求者已經(jīng)被授權(quán)的所有鎖的請求者狀態(tài)信息。
      16.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求1所述的方法。
      17.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求2所述的方法。
      18.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求3所述的方法。
      19.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求4所述的方法。
      20.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求5所述的方法。
      21.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求6所述的方法。
      22.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求7所述的方法。
      23.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求8所述的方法。
      24.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求9所述的方法。
      25.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求10所述的方法。
      26.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求11所述的方法。
      27.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求12所述的方法。
      28.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求13所述的方法。
      29.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求14所述的方法。
      30.一種攜帶一個或多個指令序列的計算機可讀介質(zhì),當由一個或多個處理器執(zhí)行所述指令序列時,就使得所述一個或多個處理器執(zhí)行權(quán)利要求15所述的方法。
      全文摘要
      本發(fā)明提供了一種用于在數(shù)據(jù)庫服務(wù)器端處理文件系統(tǒng)操作的方法和設(shè)備。在服務(wù)器系統(tǒng)端接收對存儲于數(shù)據(jù)庫中的資源進行文件系統(tǒng)操作的請求。可以應(yīng)用NFS協(xié)議來執(zhí)行該項請求。該項請求可包含標識與該請求關(guān)聯(lián)的狀態(tài)信息的狀態(tài)標識數(shù)據(jù)。基于狀態(tài)標識數(shù)據(jù)來在該數(shù)據(jù)庫系統(tǒng)內(nèi)檢索與該請求關(guān)聯(lián)的狀態(tài)信息。狀態(tài)信息是描述了對特定文件的請求者的操作狀態(tài)的信息。隨后,至少部分基于該狀態(tài)標識來處理該項請求。可用數(shù)據(jù)庫管理系統(tǒng)來處理文件系統(tǒng)操作以便存取諸如文件、關(guān)系數(shù)據(jù)、和對象關(guān)系數(shù)據(jù)等任何數(shù)據(jù)。
      文檔編號G06F17/30GK101080714SQ200580043265
      公開日2007年11月28日 申請日期2005年12月6日 優(yōu)先權(quán)日2004年12月16日
      發(fā)明者納米特·賈殷, 尼普恩·阿加瓦爾, 埃里克·塞德拉, 薩姆·伊迪庫拉, 沙姆·潘納拉 申請人:甲骨文國際公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1