亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

利用恢復日志檢測數(shù)據(jù)庫事件的制作方法

文檔序號:6454187閱讀:142來源:國知局

專利名稱::利用恢復日志檢測數(shù)據(jù)庫事件的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及數(shù)據(jù)庫管理系統(tǒng)。具體地,本發(fā)明的實施例涉及利用數(shù)據(jù)庫恢復日志(recoverylog)來檢測數(shù)據(jù)庫中的事件。技術(shù)背景數(shù)據(jù)庫管理系統(tǒng)(DBMS)的一個重要功能是重建發(fā)生在數(shù)據(jù)庫中的過去事件序列,以用于取證分析或者滿足管理要求。構(gòu)造這種事件可能涉及(DBMS)對時間性査詢(temporalquery)作出響應。時間性查詢是這樣一種查詢,其中只能根據(jù)一個(或多個)先前的數(shù)據(jù)庫狀態(tài)來計算結(jié)果。考慮DBMS跟蹤購買訂單和用戶角色的情形。用戶的角色確定了用戶在數(shù)據(jù)庫系統(tǒng)中執(zhí)行功能或動作(例如購買訂單)的權(quán)力。在某個時刻,銷售人員被錯誤地授予了批準購買訂單的權(quán)力。例如,存儲在數(shù)據(jù)庫中的表中的銷售人員角色被錯誤地改變成準予購買訂單的權(quán)力。該銷售人員于是開始批準購買訂單,其中DBMS記錄購買訂單。在之后的某個時刻,審核員發(fā)現(xiàn)該銷售人員不應當被授予該權(quán)力。審核員可以使該銷售人員的角色被改變成不再允許購買訂單批準,如果這種角色改變尚未被作出的話。審核員還需要知道該銷售人員利用錯誤的權(quán)力批準的所有購買訂單。在其當前狀態(tài)下,數(shù)據(jù)庫中可能沒有該信息,因為購買訂單的記錄已經(jīng)被刪除或者記錄中的授權(quán)信息已經(jīng)被覆寫,以反映具有合法權(quán)力的某人進行的購買訂單批準。為了確定什么購買訂單是由該銷售人員批準的,審核員可能希望使用如下的時間性査詢"請向我示出在JohnDoe是銷售人員的時間期間他所批準的所有購買訂單"。時間性査詢的實際格式可能不同于該示例。示例性的時間性查詢的開始時間是銷售人員的角色變?yōu)?Salesman"時。時間性查詢的結(jié)束時間是銷售人員的角色不包括"Salesman"時。因此,DBMS應當返回在開始和結(jié)束時間之間該銷售人員所批準的所有購買訂單。存在其他的需要DBMS對時間性查詢作出響應的情形。例如,操作員可能錯誤地將某個物品標記為"待售"。在這種情況下,希望確定DBMS所記錄的所有以錯誤價格進行的對該物品的銷售。確定對于這種時間性查詢的答復提出了許多挑戰(zhàn)。諸如一致讀取、閃回查詢等等之類的技術(shù)不是該問題的可行解決方案。一致讀取或者閃回查詢執(zhí)行過去的特定時間的查詢。但是,與時間性查詢有關(guān)的開始和/或結(jié)束時間可能不是已知的。例如,利用銷售人員的示例,特定銷售人員的雇用日期和該問題被發(fā)現(xiàn)的時間可能是已知的。但是,錯誤地授予權(quán)力的時間可能不是己知的。另外,糾正該權(quán)力的時間可能不是已知的。另外,對時間性査詢的響應應當提供開始時間和結(jié)束時間之間的所有所關(guān)注的結(jié)果。例如,銷售人員錯誤準予的所有購買訂單都是所關(guān)注的。因此,諸如一致讀取、閃回查詢等等之類的技術(shù)不是該問題的可行解決方案。另外,對數(shù)據(jù)庫進行到過去某個時間的時間點恢復(point-in-timerecovery)不是可行的解決方案。如前所述,有關(guān)時間可能不是已知的。另外,時間點恢復不提供在某個時間范圍中的信息。時間性查詢問題的一種傳統(tǒng)解決方案是應用編程者在應用內(nèi)維護帶時間戳的改變的詳細蹤跡。例如,編程者在內(nèi)部轉(zhuǎn)換每個更新或刪除語句,以包括預處理或后處理步驟,該步驟記錄數(shù)據(jù)的之前圖像和作出改變的時間戳。這導致了額外的列和行被創(chuàng)建在數(shù)據(jù)庫中,這些列和行可用于答復時間性查詢。利用上述示例性時間性查詢,可能存在角色表("roles"),該表可具有屬性"rolename"(角色名),該屬性可具有值"Salesman",表明具有該角色的人具有購買訂單權(quán)力。另外,訂單表("orders")可具有屬性"approver—name"(批準者姓名),其值表明批準訂單的人。為了答復時間性查詢,應用編程者可以在兩個表中都創(chuàng)建兩個新的列"when"(時間)禾n"when—deleted"(刪除時間)。編程者在"when"列中包括當前時間,作為更新或插入語句的一部分。另外,當行被刪除時,編程者在"when—deleted"列中包括當前時間。(或者,編程者可以將行的刪除改為新行的插入,該新行具有被設(shè)定為"DELETED"(已刪除)的狀態(tài)列。)對數(shù)據(jù)庫的這些改變使得可以通過發(fā)出以下SQL語句來答復上述示例性時間性查詢select*fromorderso,rolesrwhereo.approver—name="JohnDoe"andr.name="JohnDoe"andr.role—name="Salesman"ando.whenbetweenr.whenandr.when—deleted但是,這種傳統(tǒng)的技術(shù)具有多個缺陷。為了擴展數(shù)據(jù)庫架構(gòu)(schema)并正確地維護對數(shù)據(jù)庫行的改變的蹤跡,對應用編程者施加了額外的負擔。性能受到損害,因為所有改變都被應用所審核。另外,數(shù)據(jù)庫表的大小增加。大小增加的一個原因在于無法從表中刪除時間戳信息,這意味著無法刪除行。另一種傳統(tǒng)的方法不是對應用作出上述改變,而是創(chuàng)建在數(shù)據(jù)庫后端執(zhí)行代碼的數(shù)據(jù)庫觸發(fā)(databasetrigger)來實現(xiàn)類似的結(jié)果。RichardT.Snodgrass在"DevelopingTimeOrientedDatabaseApplicationinSQL"中描述了這種方法和其他有關(guān)問題。但是,與對應用編程者施加負擔的技術(shù)一樣,創(chuàng)建數(shù)據(jù)庫觸發(fā)也有著類似的問題。許多數(shù)據(jù)庫應用對表施行獨特的約束。例如,表被約束,以使得特定用戶只能具有單個權(quán)限。但是,這使數(shù)據(jù)庫不能在同一個表中具有針對特定用戶的多個行。因此,在該示例中,同一個表無法被用于向JohnDoe賦予兩個不同的角色。對于每個用戶只允許一個角色的表的限制的一個解決方案是創(chuàng)建單獨的歷史表。通過將"歷史性"的行移植到一個不同的分區(qū),可以減輕這種損失。但是,架構(gòu)設(shè)計者仍面臨著為數(shù)據(jù)分區(qū)的負擔。對于每個用戶只允許一個角色的表的限制的另一解決方案是改變約束以添加時間戳,這是一個不同的過程。但是,應用該約束涉及應用許多規(guī)貝則,這些規(guī)則是通過對SQL語句進行重大修改來施行的。對SQL的修改會向應用或DBMS(如果這種功能被內(nèi)置到DBMS中的話)添加大量開銷和復雜性。即使很少發(fā)出時間性査詢,也會導致與上述技術(shù)相關(guān)聯(lián)的損失。例如,時間性查詢可能只會作為審核期間的調(diào)查的一部分發(fā)生。另外,查詢可能是針對數(shù)據(jù)庫對象的小子集發(fā)出的,而損失卻發(fā)生在對所有對象的改變上。因此,需要DBMS對時間性查詢作出響應。需要不對應用編程者施加沉重負擔或者不要求對數(shù)據(jù)庫后端作出重大改變的技術(shù)。還需要不會對數(shù)據(jù)庫的正常操作導致嚴重的性能損失的技術(shù)。還需要不要求大大增加數(shù)據(jù)庫大小的技術(shù)。本部分中描述的方法是可以實行的方法,但不一定是先前已經(jīng)被設(shè)想或?qū)嵭羞^的方法。因此,除非另有表明,否則不應當假定本部分中描述的任何方法僅因為其被包括在本部分中就可以作為現(xiàn)有技術(shù)。圖1是示出根據(jù)本發(fā)明實施例用于檢測在數(shù)據(jù)庫中是否發(fā)生了事件的過程的流程圖。圖2是示出根據(jù)本發(fā)明實施例為時間性査詢提供結(jié)果的過程的步驟的流程圖。圖3是示出根據(jù)本發(fā)明實施例利用物化視圖(materializedview)對時間性查詢提供結(jié)果的過程步驟的流程圖。圖4是示出本發(fā)明實施例可在其上實現(xiàn)的計算機系統(tǒng)的框圖。在附圖中以示例方式而非限制方式示出了本發(fā)明,附圖中相似的標號指代類似的元件,其中具體實施方式在下面的描述中,出于說明目的,闡述了許多具體細節(jié)以幫助全面理解本發(fā)明。但是,很明顯,沒有這些具體細節(jié)也可實現(xiàn)本發(fā)明。在其他情況下,公知的結(jié)構(gòu)和設(shè)備是以框圖形式示出的,以避免不必要地模糊本發(fā)明。概述本發(fā)明的一個實施例是一種用于確定在數(shù)據(jù)庫中何時發(fā)生了事件的方法。將數(shù)據(jù)庫的至少一部分恢復到事件之前的時間點。將恢復日志轉(zhuǎn)化成表示能夠?qū)е禄謴腿罩局忻枋龅母淖兊臄?shù)據(jù)庫操作的語句(例如SQL語句)。創(chuàng)建一種機制,用于基于對這些語句的執(zhí)行來檢測事件。例如,創(chuàng)建數(shù)據(jù)庫觸發(fā)以檢測事件。針對經(jīng)恢復的數(shù)據(jù)庫執(zhí)行語句,以使該機制來檢測事件。本發(fā)明的另一個實施例是一種用于對時間性查詢作出響應的方法。用戶提供時間性査詢,該時間性查詢具有開始事件、結(jié)束事件和與開始和結(jié)束事件之間的時間有關(guān)的查詢。可以通過與前一段中論述的實施例相類似的方式來檢測開始事件。生成觸發(fā)事件以檢測結(jié)束事件,并且生成機制以確定查詢塊的結(jié)果。例如,生成物化視圖,'并通過執(zhí)行表示基于恢復日志的數(shù)據(jù)庫操作(例如SQL)的語句來填充該物化視圖?;趯ξ锘晥D中的信息的分析來答復時間性查詢。示例性時間性查詢在一個實施例中,為對DBMS的時間性查詢提供響應。出于說明目的,使用以下示例性時間性查詢。用戶可能希望知道對以下時間性查詢的答復"請向我示出在JohnDoe是銷售人員的時間期間他所批準的所有購買訂單"。時間性查詢的實際格式可以基于容易轉(zhuǎn)換成數(shù)據(jù)庫操作的格式。例如,時間性查詢可以像以下示例那樣基于SQL。一般地,時間性查詢的格式是"BEGINQUERYEND"。BEGIN和END塊指定開始和結(jié)束點。一般地,BEGIN禾nEND塊可以是事件指定。換言之,不指定時間。下面論述特殊情況,包括指定開始或結(jié)束時間的示例。在該示例中,開始事件是在數(shù)據(jù)庫表中更新或插入一行,該行向用戶"JohnDoe"賦予角色"Salesman"。因此,以下BEGIN塊適合于描述該事件。"開始事件"被定義為當BEGIN塊中的條件取值為"TRUE"(真)時。BEGINisAFTERINSERTORUPDATEOFrolesWHEREroles.name="JohnDoe"androles.role—name="Salesman"繼續(xù)該示例,END塊反映了這樣一個數(shù)據(jù)庫事件,該數(shù)據(jù)庫事件描述JohnDoe何時不再具有銷售人員的角色。以下的示例性END塊指定了更新或刪除何時從用戶"JohnDoe"中刪除角色"Salesman"。"結(jié)束事件"被定義為END塊中的條件取值為"TURE"時。ENDisAFTERDELETEORUPDATEOFrolesWHEREroles.name="JohnDoe"androles,role—name="Salesman"繼續(xù)該示例,以下的示例性QUERY塊適合于答復JohnDoe批準了什么銷售這個問題。sdect*fromorderswhereapprover—name='JohnDoe'可以通過分析基于QUERY塊的一個或多個查詢的結(jié)果來答復時間性查詢,如果該一個或多個查詢是在開始事件和結(jié)束事件之間發(fā)出的話。這里,該一個或多個査詢被稱為基本查詢。雖然BEGINQUERYEND塊具有與SQL類似的格式,但這并不是必要條件。確定數(shù)據(jù)庫事件何時發(fā)生的過程流程圖1是示出用于檢測數(shù)據(jù)庫中何時發(fā)生事件的過程100的流程圖。在一個實施例中,響應于接收到時間性查詢而發(fā)起過程100。將利用下述示例來論述過程100:用戶希望知道在JohnDoe被錯誤地給予購買訂單批準權(quán)力的角色的時間期間,JohnDoe批準了什么銷售。以上BEGIN和END塊將用于幫助說明過程100。因此,過程100可用于確定何時發(fā)生了事件,例如JohnDoe被給予具有購買訂單批準權(quán)力的角色。如前所述,BEGIN塊描述了此條件。但是,過程IOO所檢測的事件不限于時間性査詢的開始事件。更一般性地,過程100可用于檢測任何指定事件何時發(fā)生于數(shù)據(jù)庫中。圖2的過程200和圖3的過程300提供了確定對時間性查詢的答復的細節(jié),例如JohnDoe批準了什么訂單。在圖1的步驟102中,將數(shù)據(jù)庫的至少一部分恢復到所調(diào)查的事件之前的時間。在一些情況下,可以假定適當?shù)臅r間。如果事件是JolmDoe被賦予購買訂單權(quán)力的角色的時間,則適當?shù)臅r間可以是JohnDoe的雇用曰期。如果沒有到達更新近的時間,則可以恢復數(shù)據(jù)庫的最老版本。不需要恢復整個數(shù)據(jù)庫。例如,在銷售人員示例中,有關(guān)信息將是銷售表或角色表。因此,這些表被恢復。對銷售或角色表的訪問可取決于其他對象(從屬對象(dependentobject)),例如索引。因此,從屬對象也可能需要被恢復。這里使用的術(shù)語"從屬對象"指的是任何用于幫助訪問或操縱另一數(shù)據(jù)對象或者更高效地進行該操作的對象。關(guān)于限制數(shù)據(jù)庫的被恢復的部分的更多細節(jié)在下文中論述。在步驟104中,創(chuàng)建一個或多個數(shù)據(jù)庫觸發(fā)以檢測BEGIN塊中的條件(開始事件)。在DBMS中,觸發(fā)是指定在特定事件發(fā)生時將被自動執(zhí)行的一系列動作的對象(例如過程)。由觸發(fā)指定的該系列動作一般被用諸如SQL或PL/SQL(可從RedwoodShores,California的Oracle公司獲得的SQL的過程語言擴展)之類的高級數(shù)據(jù)庫語言寫為指令。例如,在關(guān)系數(shù)據(jù)庫中,觸發(fā)可被設(shè)計為在表視圖或者數(shù)據(jù)庫表的行被更新、插入或刪除時啟動。因此,觸發(fā)一般與單個數(shù)據(jù)庫表相關(guān)聯(lián)。利用銷售人員示例,有關(guān)的表是BEGIN塊中指定的角色表。因此,可以為角色表創(chuàng)建數(shù)據(jù)庫觸發(fā)。如果BEGIN塊參考了多個表,則可以為每個表創(chuàng)建數(shù)據(jù)庫觸發(fā)??梢詾槠渌韯?chuàng)建數(shù)據(jù)庫觸發(fā)。例如,用戶可以在BEGIN塊中指定掛鐘時間,而不是指定事件。因此,在銷售人員示例中,沒有針對角色表設(shè)定的觸發(fā)。但是,可以針對具有掛鐘時間和DBMS所保持的邏輯時間之間的轉(zhuǎn)換的表設(shè)定觸發(fā)。例如,特定的表可以在真實或掛鐘時間的每100秒左右記錄SCN(系統(tǒng)改變號)或其他邏輯時間。該表不一定具有每個SQL語句被提交時的確切掛鐘時間,但可以提供非常接近的近似。觸發(fā)被設(shè)定來確定何時達到(或近似達到)掛鐘時間??梢詢?yōu)化觸發(fā),以規(guī)定僅當BEGIN塊中指定的列被修改時觸發(fā)才被執(zhí)行。在銷售人員示例中,BEGIN塊中的列是"name"(姓名)和"role—name"(角色名)。一般地,在步驟104中生成的觸發(fā)可以是將會檢測BEGIN塊中的條件何時取值為TRUE的任何機制。實現(xiàn)觸發(fā),以在檢測到BEGIN塊中的條件時發(fā)生所需的動作。例如,所需的動作可以是確定對時間性查詢的響應。數(shù)據(jù)庫觸發(fā)的實現(xiàn)取決于下文論述的許多因素。在一個實施例中,數(shù)據(jù)庫觸發(fā)是通過檢査END塊來實現(xiàn)的。如果已知BEGIN塊等于END塊,那么可以基于QUERY塊本身來實現(xiàn)觸發(fā)的主體,以便答復時間性查詢。但是,如果存在下述時間范圍(END-BEGIN),則觸發(fā)的主體可設(shè)定表明檢測到開始事件的標志在該時間范圍期間,需要計算發(fā)出一個或多個基于QUERY塊的査詢的結(jié)果。使用標志的一個示例在圖3的過程300中論述,其中標志被用于觸發(fā)對物化視圖的填充。在可選的步驟106中,創(chuàng)建觸發(fā)以檢測END塊中的條件("結(jié)束事件")。如果過程100的結(jié)束目標是確定開始事件發(fā)生的掛鐘時間,則不需要執(zhí)行步驟106。但是,由于過程100可用作答復時間性査詢的起始點,因此對結(jié)束觸發(fā)的創(chuàng)建允許了對時間性查詢的有關(guān)范圍的確定。結(jié)束觸發(fā)是根據(jù)所需的應用實現(xiàn)的,并且在下文中論述。在步驟108中,從數(shù)據(jù)庫的恢復日志重建表示數(shù)據(jù)庫操作的語句。在一個實施例中,從恢復日志重建SQL語句。例如,由RedwoodShores,Calif.的Oracle公司提供的OracleLogMiner可用于從恢復日志生成SQL。但是,并不一定要求使用LogMiner。重建的SQL語句不一定是用于作出日志中記錄的數(shù)據(jù)庫改變的那個SQL語句。例如,存在許多不同的可能導致對數(shù)據(jù)庫的特定改變的SQL語句,而恢復日志信息可能不能確定導致該改變的確切SQL語句。但是,事件仍可被檢測。作為特定示例,許多不同的SQL語句可向JohnDoe賦予銷售人員的角色。但是,過程100可檢測對JohnDoe的銷售人員角色的改變,而不考慮導致該改變的SQL語句。不需要針對與數(shù)據(jù)庫相關(guān)聯(lián)的所有恢復日志重建表示數(shù)據(jù)庫操作的語句。例如,如果過程100被用于為示例性的時間性査詢檢測開始事件,則只有屬于BEGIN塊中的對象集合的恢復日志需要被處理。如果過程100被用于為示例性的時間性查詢檢測結(jié)束事件,則只有屬于END塊中的對象集合的恢復日志需要被處理。如前所述,過程100不限于確定開始事件,而是更一般性地適用于事件檢測。因此,更一般性地,針對其重建數(shù)據(jù)庫操作的恢復日志是屬于與被檢測的事件相關(guān)聯(lián)的對象的日志。例如,可以針對與以下各項相關(guān)聯(lián)的對象來重建數(shù)據(jù)庫操作1)開始事件、2)結(jié)束事件、3)QUERY塊、4)元數(shù)據(jù),例如用于檢測開始事件、結(jié)束事件和QUERY塊的執(zhí)行的目錄對象和索引。在步驟110中,將數(shù)據(jù)庫操作應用到重建的數(shù)據(jù)庫,以向數(shù)據(jù)庫應用改變。如前所述,只需要應用有關(guān)的改變。例如,只有與銷售表、角色表或從屬對象有關(guān)的改變被應用到數(shù)據(jù)庫。如果在112中BEGIN觸發(fā)啟動,則在步驟114中,觸發(fā)的主體中定義的觸發(fā)動作被應用。如前所述,觸發(fā)可執(zhí)行多種動作。在一個實施例中,觸發(fā)動作確定和報告事件何時發(fā)生。例如,通過將SCN(系統(tǒng)改變號碼)與掛鐘時間關(guān)聯(lián)起來,來確定和報告JohnDoe被授予批準購買的權(quán)力的時間。在另一個實施例中,響應于開始觸發(fā)啟動,采取一系列動作來確定在開始事件之后直到另一時間為止對數(shù)據(jù)庫作出的改變。因此,可以答復時間性査詢。例如,DBMS確定在JohnDoe被授予購買訂單權(quán)力之后直到該權(quán)力被刪除為止Doe準予了什么購買訂單。用于對時間性查詢作出響應的過程流程在檢測到開始事件之后,發(fā)出基于QUERY塊的一個或多個查詢并且分析結(jié)果。基本査詢是針對數(shù)據(jù)庫的一個或多個版本來執(zhí)行的?;緰嗽兊恼Z義以及針對其執(zhí)行基本査詢的數(shù)據(jù)庫的版本取決于(a)QUERY塊中的(一個或多個)語句,以及(b)在開始事件和結(jié)束事件之間數(shù)據(jù)庫的行是否被更新或刪除。用于對時間性査詢作出響應的技術(shù)至少部分取決于基本查詢是否是單調(diào)的(monotonic)。對于查詢Qm,單調(diào)查詢是這樣一個查詢,其中,對于t2〉tl,Qm(tl)的結(jié)果集合是Qm(t2)的結(jié)果集合的子集或者等于Qm(t2)的結(jié)果集合。如果基本查詢是單調(diào)的,并且不存在與時間性査詢有關(guān)的行更新或刪除,則可以針對結(jié)束事件時數(shù)據(jù)庫的版本來執(zhí)行單個基本查詢。也就是說,恢復日志中的改變被應用到經(jīng)恢復的數(shù)據(jù)庫,直到結(jié)束事件被觸發(fā)為止,并且執(zhí)行QUERY塊的結(jié)果可以通過在單個時間點-結(jié)束事件-執(zhí)行QUERY塊來確定。圖2描述了對于此第一種情況的本發(fā)明的實施考慮確定JohnDoe批準了什么訂單的示例。利用以下SQL語句可在結(jié)束事件處發(fā)出以下基本查詢。select求fromorderswhereapprover—name="JohnDoe"以上語句將會返回JohnDoe所批準的所有訂單。對于該特殊情況,這提供了準確的結(jié)果。但是,如果基本查詢不是單調(diào)的,或者存在行更新或刪除,那么在結(jié)束事件處數(shù)據(jù)庫的狀態(tài)不包含用于答復時間性查詢的所有信息。例如,如果在JohnDoe批準購買訂單時一行被插入,但隨后該行由于對訂單的修改而被更新,那么更新后的行就不包含初始的訂單信息。圖3描述了本發(fā)明的使用物化視圖來為這種更一般性的情況提供結(jié)果的實施例。A)單調(diào)査詢和無數(shù)據(jù)庫刪除/更新圖2描述了根據(jù)本發(fā)明實施例的為時間性查詢提供結(jié)果的過程200。關(guān)于銷售人員的示例性時間性查詢被用于幫助說明過程200,但過程200不限于該示例。過程200可以響應于過程100中的BIGIN觸發(fā)啟動而被發(fā)起;但是,并不一定要求過程100用于發(fā)起過程200。另外,過程200的一些步驟可在觸發(fā)啟動之前執(zhí)行。過程200可包括觸發(fā)本身的一些或全部動作,但這并不是必須的。在步驟202中,確定與QUERY塊相關(guān)聯(lián)的基本査詢是否是單調(diào)的。如果它不是單調(diào)的,則過程200退出,而不提供結(jié)果。如果需要,步驟202可以在觸發(fā)啟動之前執(zhí)行。描述了用于將非單調(diào)查詢轉(zhuǎn)換成單調(diào)查詢的技術(shù)。例如,Terry等人的論文"ContinuousQueriesoverAppend-OnlyDatabases"描述了用于將非單調(diào)查詢轉(zhuǎn)換成單調(diào)查詢的技術(shù)。如果形成來對用戶的時間性查詢作出響應的初始基本査詢是非單調(diào)的,則可以將該基本査詢轉(zhuǎn)換成單調(diào)形式。但是,過程200可以不將基本查詢轉(zhuǎn)換成單調(diào)形式,而是退出。如果過程200退出,則圖3中的過程300可被執(zhí)行以提供結(jié)果。如果基本查詢是單調(diào)的,那么在步驟204中,從針對數(shù)據(jù)庫的恢復日志重建數(shù)據(jù)庫操作。需要處理的恢復日志只有針對與QUERY塊有關(guān)的對象、結(jié)束事件以及執(zhí)行QUERY塊或結(jié)束事件觸發(fā)所需的諸如目錄對象和索引之類的其他從屬對象的恢復日志。例如,示例性的QUERY塊指定訂單表;因此,只有針對訂單表、訂單表上的任何索引、目錄對象和角色表的恢復日志被處理。步驟206是確定是否存在對與基本査詢有關(guān)的行的刪除或更新。如果是,則過程200退出,而不為時間性查詢提供結(jié)果。例如,如果存在對訂單表的行的刪除或更新,其中批準者姓名是JohnDoe,則過程退出。如果過程200沒有結(jié)果地退出,則圖3中的過程300可被執(zhí)行以提供結(jié)果。在步驟208中,過程200繼續(xù),直到結(jié)束觸發(fā)啟動,以重建更多數(shù)據(jù)庫操作并且確定是否發(fā)生有關(guān)刪除或更新。因此,結(jié)束觸發(fā)僅在基本查詢?yōu)閱握{(diào)并且不存在有關(guān)更新或刪除的情況下才啟動。如果結(jié)束觸發(fā)啟動,則在步驟210中針對數(shù)據(jù)庫執(zhí)行基本查詢。例如,可以執(zhí)行以下基本查詢以確定在JohnDoe被授予權(quán)力和該權(quán)力被取消的時間之間Doe批準了什么訂單sdcct*fromorderswhereapprover—name="JohnDoe"B)使用物化視圖的一般性情況圖3是示出根據(jù)本發(fā)明實施例的利用物化視圖向時間性查詢提供結(jié)果的過程300的步驟的流程圖。銷售人員的示例性時間性查詢被用于幫助說明過程300,但過程300并不限于該示例。如前所述,如果圖2的過程200退出而沒有向時間性查詢提供結(jié)果,則過程300可被執(zhí)行。但是,過程300可以在沒有首先執(zhí)行過程200的情況下被執(zhí)行。在步驟302中,創(chuàng)建視圖和集結(jié)區(qū)域(stagingarea)。物化視圖是這樣一種視圖,對于該視圖,視圖數(shù)據(jù)的拷貝與原先從中收集和得出數(shù)據(jù)的基本表是分開存儲的。物化視圖中包含的數(shù)據(jù)在這里被稱為("物化數(shù)據(jù)")。對物化視圖的使用消除了反復發(fā)出基本查詢的必要。物化視圖幫助識別由于開始事件和結(jié)束事件之間作出的改變而引起的基本查詢的結(jié)果子集。物化視圖可以在恢復日志被重新應用到數(shù)據(jù)庫時被自動填充。但是,也可使用其他解決方案。另外,不一定要求物化視圖被自動填充。在一個實施例中,恢復日志是通過SQL層來應用的,從而物化視圖被自動填充。物化視圖是基于QUERY塊創(chuàng)建的。根據(jù)一個實施例,物化視圖具有布爾列。布爾列將存儲下述時間窗口在該時間窗口期間,視圖中的結(jié)果行滿足了時間性査詢。以下是用于銷售人員示例中的時間性查詢的示例性物化視圖。createvieworders—viewasselectFLAG,o.*fromorderswhereapprover—name="JohnDoe"在示例性物化視圖中,"FLAG"是全局狀態(tài)變量,其在orders—view被創(chuàng)建時被設(shè)定到0。在達到BEGIN事件之后,F(xiàn)LAG被設(shè)定到1??梢酝ㄟ^對BEGIN觸發(fā)的主體的執(zhí)行來設(shè)定FLAG。繼續(xù)說明步驟302,創(chuàng)建集結(jié)區(qū)域,用于存儲在達到結(jié)束事件時將返回給用戶的結(jié)果。在銷售人員示例中,集結(jié)區(qū)域最初將是空的,因為假定銷售人員在批準權(quán)力被授予的開始點尚未批準任何訂單。很明顯,取決于時間性查詢的指定,可能存在開始點處集結(jié)區(qū)域不為空的情況。物化視圖和集結(jié)區(qū)域被描述為分開的對象,以便于說明,以及再使用物化視圖的實現(xiàn)。但是,可以為兩者使用同一個對象。例如,可以為物化視圖增加狀態(tài)列,在其中它可充當集結(jié)區(qū)域。填充物化視圖的代碼應當被適當?shù)匦薷囊蕴幚頎顟B(tài)列。在步驟304中,從數(shù)據(jù)庫的恢復日志重建表示數(shù)據(jù)庫操作的語句。在一個實施例中,從恢復日志重建SQL語句。換言之,恢復是SQL層上的邏輯應用,而不是塊級別上的物理應用。在步驟306中,將表示數(shù)據(jù)庫操作的語句應用到數(shù)據(jù)庫。在步驟308中,每當發(fā)生提交操作時,物化視圖就被自動填充。如前所述,過程300適合于處理存在刪除和更新操作并且/或者基本查詢非單調(diào)的情形。步驟310被用于處理這些狀況。在步驟310中,結(jié)果集結(jié)區(qū)域和物化視圖中的行之間的集合差異被添加到集結(jié)區(qū)域。存在于物化視圖中但不存在于集結(jié)區(qū)域中的任何行被拷貝到集結(jié)區(qū)域。利用銷售人員示例,集結(jié)區(qū)域在銷售人員被授予批準訂單的權(quán)力的那個時刻是空的。因此,出現(xiàn)在物化視圖中但未出現(xiàn)在集結(jié)區(qū)域中的行表明該銷售人員在被授予這種權(quán)力之后批準了訂單。任何存在于集結(jié)區(qū)域中但不存在于物化視圖中的行都被保存在集結(jié)區(qū)域中,并且狀態(tài)標志被設(shè)定到DELETED。利用銷售人員示例,出現(xiàn)在集結(jié)區(qū)域但未出現(xiàn)在物化視圖中的行可表明銷售人員所批準的訂單后來被處理并且該行后來因為訂單處理完成而被刪除。因為這與時間性查詢有關(guān),所以這種信息應當被返回給用戶。實際上,對集結(jié)區(qū)域的修改在用戶所關(guān)注的時期期間產(chǎn)生了一時態(tài)表(temporaltable)。過程300繼續(xù)評估更多恢復日志,直到在步驟312中達到結(jié)束觸發(fā)為止。然后控制進行到步驟314,其中,位于集結(jié)區(qū)域中的結(jié)果被返回給用戶。然后過程300結(jié)束。不使用物化視圖的替換實施例并不一定要求在過程300的步驟302中創(chuàng)建的視圖是物化視圖。取代使用物化視圖,QUERY塊中指定的基本查詢可被直接執(zhí)行。為了使基本查詢只返回在開始事件之后修改的行,基本查詢在開始事件被觸發(fā)之后立即被執(zhí)行并且結(jié)果被保存在單獨的表中。然后,重做日志(redolog)被處理,并且在每次COMMIT(提交)之后,基本查詢被直接執(zhí)行,并且在前一步驟中保存的行的集合被從基本查詢的結(jié)果集合中去除。該行集合構(gòu)成了本來會被物化視圖機制逐漸填充的行。在此方法中,通過在每次COMMIT操作之后重新執(zhí)行QUERY塊來模擬物化視圖的功能。在執(zhí)行基本查詢之后,對照集結(jié)區(qū)域比較基本査詢結(jié)果,以計算集合差異,該集合差異以與過程300的步驟310相類似的方式被添加到集結(jié)區(qū)域。限制數(shù)據(jù)庫的什么部分被恢復如前所述,不要求數(shù)據(jù)庫的所有部分都在向其應用恢復日志之前被恢復。一般地,BEGIN、QUERY和END塊被分析,以確定需要被恢復的表的集合和從屬對象。在銷售人員示例中,只有訂單和角色表需要被恢復。但是,任何可用于評估BEGIN、QUERY和END塊的諸如索引之類的從屬對象也應當被恢復。另外,編譯和執(zhí)行BEGIN、QUERY和END塊所需的所有目錄或字典對象也被恢復。在大多數(shù)數(shù)據(jù)庫系統(tǒng)中,目錄或字典對象屬于特殊的架構(gòu),例如OracleSYSTEM或SYS架構(gòu),并且可以很容易被識別。為了只恢復數(shù)據(jù)庫的子集,應當滿足一個或多個條件。第一個條件是數(shù)據(jù)庫應當允許對表的子集的恢復。第二個條件是從恢復日志生成的表示數(shù)據(jù)庫操作的語句(例如SQL)引用單個表內(nèi)的列值。換言之,一般的SQL語句不應當引用多個表。但是,有可能原來導致改變的SQL語句確實引用多個表。為了說明生成引用單個表的SQL語句的恢復的類型,考慮在正常運行時期間發(fā)出的以下簡單SQL語句insertintoorder(myseq.nextval,...)在以上SQL語句中,"myseq"是SEQUENCE變量。在恢復期間,找出重做日志并且生成以下SQL語句insertintoorders(500,…)注意,在恢復期間生成的SQL語句不取決于"myseq"。因此,即使在正向過程期間發(fā)出的SQL語句取決于"myseq",在恢復期間發(fā)出的SQL也不取決于"myseq"。又例如,考慮這樣一種情況,S卩,為了更新訂單表,在正向過程期間發(fā)出的SQL語句引用從表(sidetable)。在這種情況下,在恢復期間生成的SQL不涉及從表。例如,在正向過程期間發(fā)出以下引用從表"emp"的SQL語句。insertintoroles(selectusernamefromcmpwhereempid=100),"approver"在正向過程期間,SQL語句使得表"emp"被訪問,以便更新角色表。具體地,可以從emp表訪問值"JohnDoe"。但是,在恢復過程期間生成的SQL不會引用"emp"表。例如,在恢復期間可生成以下SQL,其將具有與正向過程期間使用的SQL相同的效果。insertintoroles("JohnDoe","Approver")時間性査詢的特殊情況用戶發(fā)出的時間性查詢不會總是指定開始事件和結(jié)束事件。例如,用戶可以向BEGIN塊或END塊賦予掛鐘時間,而不是將它們定義為事件的發(fā)生(即,條件變?yōu)門RUE)。數(shù)據(jù)庫觸發(fā)的性質(zhì)可以取決于用戶指定開始和結(jié)束事件的方式,如先前在圖1的步驟104中所述。另一種情況是用戶可能根本不提供關(guān)于開始或結(jié)束事件的任何信息。如果用戶不指定開始事件,則數(shù)據(jù)庫可被恢復到時間的起點或某個實際開始時間。如果結(jié)束事件未被指定,則結(jié)束事件可以默認為當前時間或另一實際結(jié)束時間。另一種情況是用戶可能只希望確定何時作出了某個改變。在這種情況下,開始事件等于結(jié)束事件,并且對時間性查詢進行答復的結(jié)果是一個值(例如,SCN或日志序列號),該值可利用其他數(shù)據(jù)庫信息與掛鐘時間關(guān)聯(lián)起來。另一種情況是用戶可能希望在某個改變被作出時執(zhí)行時間點査詢。例如,如果列被錯誤地更新,則時間性查詢可請求該錯誤更新之前的最新近的值?;蛘?,時間性查詢可以請求在指定改變被作出時的某個其他數(shù)據(jù)庫狀態(tài)。在這種情況下,就在BEGIN塊所描述的改變被應用到數(shù)據(jù)庫之前,基于QUERY塊的查詢將被執(zhí)行。在這種情況下,在遇到開始事件時執(zhí)行的觸發(fā)的主體可能是QUERY塊本身。硬件概述圖4是示出本發(fā)明的實施例可在其上實現(xiàn)的計算機系統(tǒng)400的框圖。計算機系統(tǒng)400包括用于傳輸信息的總線402或其他通信機構(gòu)以及與總線402相耦合用于處理信息的處理器404。計算機系統(tǒng)400還包括諸如隨機訪問存儲器(RAM)或其他動態(tài)存儲設(shè)備之類的主存儲器406,其耦合到總線402,用于存儲信息和處理器404要執(zhí)行的指令。主存儲器406還可用于存儲在處理器404執(zhí)行指令期間的臨時變量或其他中間信息。計算機系統(tǒng)400還包括只讀存儲器(ROM)408或其他靜態(tài)存儲設(shè)備,其耦合到總線402,用于存儲靜態(tài)信息和處理器404的指令。提供了諸如磁盤或光盤之類的存儲設(shè)備410,其耦合到總線402,用于存儲信息和指令。計算機系統(tǒng)400可以經(jīng)由總線402耦合到顯示器412,例如陰極射線管(CRT),用于向計算機用戶顯示信息。包括字母數(shù)字和其他鍵的輸入設(shè)備414被耦合到總線402,用于向處理器404傳輸信息和命令選擇。另一類用戶輸入設(shè)備是光標控制裝置416,例如鼠標、跟蹤球或光標方向鍵,用于向處理器404傳輸方向信息和命令選擇,并用于控制顯示器412上的光標移動。該輸入設(shè)備一般具有兩個軸(第一軸(例如x)和第二軸(例如y))上的兩個自由度,其允許設(shè)備指定平面中的位置。本發(fā)明涉及使用計算機系統(tǒng)400來實現(xiàn)這里描述的技術(shù)。根據(jù)本發(fā)明的一個實施例,這些技術(shù)由計算機系統(tǒng)400響應于處理器404執(zhí)行包含在主存儲器406中的一條或多條指令的一個或多個序列而執(zhí)行。這種指令可以被從另一計算機可讀介質(zhì)(如存儲設(shè)備410)讀取到主存儲器406中。對包含在主存儲器406中的指令序列的執(zhí)行使得處理器404執(zhí)行這里描述的過程步驟。在替換實施例中,可以使用硬線電路來替代軟件指令或與軟件指令相組合以實現(xiàn)本發(fā)明。因此,本發(fā)明的實施例并不限于硬件電路和軟件的任何特定組合。這里所用的術(shù)語"機器可讀介質(zhì)"指參與提供使得機器以特定方式工作的數(shù)據(jù)的任何介質(zhì)。在利用計算機系統(tǒng)400實現(xiàn)的實施例中,例如,在向處理器404提供指令以供執(zhí)行時,涉及了各種機器可讀介質(zhì)。這種介質(zhì)可以采取許多形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)和傳輸介質(zhì)。非易失性介質(zhì)例如包括光盤或磁盤,如存儲設(shè)備410。易失性介質(zhì)包括動態(tài)存儲器,如主存儲器406。傳輸介質(zhì)包括同軸電纜、銅線和光纖,包括含總線402的線路。傳輸介質(zhì)也可以采取聲波或光波的形式,例如在無線電波和紅外數(shù)據(jù)通信期間生成的聲波或光波。所有這種介質(zhì)都必須是有形的,以使得介質(zhì)所承載的指令能夠被將指令讀取到機器中的物理機構(gòu)所檢測到。機器可讀介質(zhì)的常見形式例如包括軟盤、柔性盤、硬盤、磁帶或任何其他磁介質(zhì),CD-ROM、任何其他光介質(zhì),穿孔卡、紙帶、任何其他具有孔圖案的物理介質(zhì),RAM、PROM和EPROM、FLASH-EPROM、任何其他存儲器芯片或卡盤,下文中描述的載波,或者計算機可以讀取的任何其他介質(zhì)。各種形式的機器可讀介質(zhì)可用于將一條或多條指令的一個或多個序列傳送到處理器404以供執(zhí)行。例如,指令可以首先承載在遠程計算機的磁盤上。遠程計算機可以將指令加載到其動態(tài)存儲器中,并利用調(diào)制解調(diào)器經(jīng)由電話線發(fā)送指令。計算機系統(tǒng)400本地的調(diào)制解調(diào)器可以接收電話線上的數(shù)據(jù),并使用紅外發(fā)送器來將數(shù)據(jù)轉(zhuǎn)換為紅外信號。紅外檢測器可以接收在紅外信號中攜帶的數(shù)據(jù),并且適當?shù)碾娐房梢詫?shù)據(jù)置于總線402上。總線402將數(shù)據(jù)傳送到主存儲器406,處理器404從主存儲器406取得指令并執(zhí)行指令。主存儲器406接收的指令可以可選地在處理器404執(zhí)行之前或之后存儲在存儲設(shè)備410上。計算機系統(tǒng)400還包括耦合到總線402的通信接口418。通信接口418提供到與本地網(wǎng)絡(luò)422相連接的網(wǎng)絡(luò)鏈路420的雙向數(shù)據(jù)通信耦合。例如,通信接口418可以是綜合業(yè)務(wù)數(shù)字網(wǎng)絡(luò)(ISDN)卡或調(diào)制解調(diào)器,以提供與相應類型電話線的數(shù)字通信連接。又例如,通信接口418可以是局域網(wǎng)(LAN)卡,以提供與兼容LAN的數(shù)據(jù)通信連接。也可以實現(xiàn)無線鏈路。在任何這種實現(xiàn)方式中,通信接口418發(fā)送并接收電的、電磁的或光信號,這些信號攜帶了代表各種類型信息的數(shù)字數(shù)據(jù)流。網(wǎng)絡(luò)鏈路420—般通過一個或多個網(wǎng)絡(luò)提供到其他數(shù)據(jù)設(shè)備的數(shù)據(jù)通信。例如,網(wǎng)絡(luò)鏈路420可以通過本地網(wǎng)絡(luò)422提供與主機計算機424或由因特網(wǎng)服務(wù)供應商(ISP)426操作的數(shù)據(jù)設(shè)備的連接。ISP426進而通過全球分組數(shù)據(jù)通信網(wǎng)絡(luò)(現(xiàn)在通常稱為"因特網(wǎng)")提供數(shù)據(jù)通信服務(wù)。本地網(wǎng)絡(luò)422和因特網(wǎng)428都使用攜帶數(shù)字數(shù)據(jù)流的電的、電磁的或光信號。經(jīng)過各種網(wǎng)絡(luò)的信號和在網(wǎng)絡(luò)鏈路420上并經(jīng)過通信接口418的信號(這些信號攜帶去往和來自計算機系統(tǒng)400的數(shù)字數(shù)據(jù))是傳輸信息的載波的示例性形式。計算機系統(tǒng)400可以通過(一個或多個)網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路420和通信接口418發(fā)送消息并接收數(shù)據(jù),其中包括程序代碼。在因特網(wǎng)示例中,服務(wù)器430可以通過因特網(wǎng)428、ISP426、本地網(wǎng)絡(luò)422和通信接口418發(fā)送針對應用程序的請求代碼。接收到的代碼可以在接收時被處理器404執(zhí)行,和/或被存儲在存儲設(shè)備410或其他非易失性存儲介質(zhì)中以供以后執(zhí)行。以這種方式,計算機系統(tǒng)400可以獲得載波形式的應用代碼。在以上說明書中,已參考對于不同實現(xiàn)方式可能不同的許多具體細節(jié)描述了本發(fā)明的實施例。因此,關(guān)于本發(fā)明是什么以及申請人希望本發(fā)明是什么的唯一和排他指示是根據(jù)本申請授權(quán)的那套采取其授權(quán)時的特定形式的權(quán)利要求,包括任何后續(xù)的更正。這里針對這種權(quán)利要求中包含的術(shù)語明確闡述的任何限定都應當決定這種術(shù)語在權(quán)利要求中使用時的含義。因此,在權(quán)利要求中沒有明確記載的限定、要素、性質(zhì)、特征、優(yōu)點或?qū)傩远疾粦斠匀魏畏绞较拗七@種權(quán)利要求的范圍。因此,說明書和附圖被認為是說明性的而不是限制性的。權(quán)利要求1.一種由計算機實現(xiàn)的用于檢測數(shù)據(jù)庫中的事件的發(fā)生的方法,包括將所述數(shù)據(jù)庫的至少一部分的拷貝恢復到事件發(fā)生之前的點;將描述對所述數(shù)據(jù)庫的改變的重做日志記錄轉(zhuǎn)化成反映能夠?qū)е聦λ鰯?shù)據(jù)庫的所述改變的數(shù)據(jù)庫操作的語句;生成用于基于對所述語句的執(zhí)行來檢測所述事件的機制;以及使得所述機制通過執(zhí)行所述語句來檢測所述事件。2.如權(quán)利要求1所述的方法,其中,所述機制包括數(shù)據(jù)庫觸發(fā)。3.如權(quán)利要求1所述的方法,其中,所述語句遵從SQL。4.如權(quán)利要求1所述的方法,還包括通過確定在時間性査詢指定的時間段中對數(shù)據(jù)庫對象作出了什么改變,來對所述時間性查詢作出響應。5.如權(quán)利要求1所述的方法,其中,所述事件是時間性查詢的開始事件。6.如權(quán)利要求5所述的方法,還包括生成第二機制,用于基于對所述語句的執(zhí)行來檢測所述時間性查詢的結(jié)束事件。7.如權(quán)利要求6所述的方法,還包括訪問基于所述時間性查詢的基本查詢;在檢測到所述開始事件后,執(zhí)行以下步驟使得所述第二機制通過執(zhí)行所述語句來檢測所述結(jié)束事件;以及響應于所述第二機制檢測到所述結(jié)束事件,發(fā)出所述基本查詢以計算對所述時間性查詢的響應,其中,所述基本查詢的結(jié)果提供對所述時間性查詢的所述響應。8.如權(quán)利要求6所述的方法,還包括在檢測到所述開始事件后,執(zhí)行以下步驟基于所述時間性查詢而激活視圖;執(zhí)行一組語句,其中,該組語句反映能夠?qū)е略谒鲩_始事件之后發(fā)生的對所述數(shù)據(jù)庫的所述改變的數(shù)據(jù)庫操作;分析在該組語句被執(zhí)行時對所述視圖中的數(shù)據(jù)的改變,以確定對所述時間性查詢的響應;以及響應于所述第二機制檢測到所述結(jié)束事件,提供對所述時間性查詢的所述響應。9.一種由計算機實現(xiàn)的用于檢測數(shù)據(jù)庫中的事件的發(fā)生的方法,包括將所述數(shù)據(jù)庫的至少一部分的拷貝恢復到時間性查詢的開始事件發(fā)生之前的點;將描述對所述數(shù)據(jù)庫的改變的重做日志記錄轉(zhuǎn)化成反映能夠?qū)е聦λ鰯?shù)據(jù)庫的所述改變的數(shù)據(jù)庫操作的語句;生成用于基于對所述語句的執(zhí)行來檢測所述開始事件的第一數(shù)據(jù)庫觸發(fā);以及使得所述第一數(shù)據(jù)庫觸發(fā)通過執(zhí)行所述語句來檢測所述開始事件。10.如權(quán)利要求9所述的方法,還包括生成用于對所述時間性査詢作出響應的機制,其中,所述機制確定在從所述開始事件開始的時間范圍中對數(shù)據(jù)庫對象作出的改變。11.如權(quán)利要求IO所述的方法,其中,所述用于對所述時間性查詢作出響應的機制包括視圖。12.如權(quán)利要求11所述的方法,其中,所述視圖是物化視圖。13.如權(quán)利要求11所述的方法,還包括將所述視圖中的當前數(shù)據(jù)與所述視圖中的先前數(shù)據(jù)相比較,以確定對所述數(shù)據(jù)庫對象作出的改變。14.如權(quán)利要求IO所述的方法,其中,所述第一數(shù)據(jù)庫觸發(fā)激活所述用于對所述時間性查詢作出響應的機制。15.如權(quán)利要求9所述的方法,還包括生成第二數(shù)據(jù)庫觸發(fā),用于基于對所述語句的執(zhí)行來檢測所述時間性查詢的結(jié)束事件。16.如權(quán)利要求15所述的方法,還包括訪問基于所述時間性查詢的基本查詢;在所述第一數(shù)據(jù)庫觸發(fā)檢測到所述開始事件后,執(zhí)行以下步驟使得所述第二數(shù)據(jù)庫觸發(fā)通過執(zhí)行所述語句來檢測所述結(jié)束事件;以及響應于所述第二數(shù)據(jù)庫觸發(fā)檢測到所述結(jié)束事件,發(fā)出所述基本査詢以確定對所述時間性查詢的響應,其中,所述基本査詢的結(jié)果提供對所述時間性查詢的響應。17.如權(quán)利要求16所述的方法,還包括確定在所述開始事件和所述結(jié)束事件之間不存在對所述數(shù)據(jù)庫對象的更新或刪除,來作為發(fā)出所述基本查詢以確定對所述時間性查詢的響應的條件。18.如權(quán)利要求16所述的方法,還包括確定所述基本査詢是單調(diào)的,來作為發(fā)出所述基本查詢以確定對所述時間性查詢的響應的條件。19.如權(quán)利要求9所述的方法,還包括在檢測到所述開始事件后,執(zhí)行以下步驟基于所述時間性查詢而激活視圖;執(zhí)行一組語句,其中,該組語句反映能夠?qū)е略谒鲩_始事件之后發(fā)生的對所述數(shù)據(jù)庫的所述改變的數(shù)據(jù)庫操作;分析在該組語句被執(zhí)行時對所述視圖中的數(shù)據(jù)的改變,以確定對所述時間性查詢的響應;以及響應于所述第二數(shù)據(jù)庫觸發(fā)檢測到所述結(jié)束事件,提供對所述時間性查詢的所述響應。全文摘要提供了一種用于確定在數(shù)據(jù)庫中何時發(fā)生事件的方法和裝置。將數(shù)據(jù)庫的至少一部分恢復到事件之前的點。將恢復日志轉(zhuǎn)化成反映能夠?qū)е禄謴腿罩局忻枋龅母淖兊臄?shù)據(jù)庫操作(例如SQL)。創(chuàng)建用于基于對語句的執(zhí)行來檢測事件的機制。例如,創(chuàng)建數(shù)據(jù)庫觸發(fā)來檢測事件。針對恢復的數(shù)據(jù)庫執(zhí)行數(shù)據(jù)庫操作,以使該機制來檢測該事件。文檔編號G06F17/30GK101401097SQ200780008489公開日2009年4月1日申請日期2007年3月2日優(yōu)先權(quán)日2006年3月10日發(fā)明者薩史堪斯·查卓瑟卡蘭申請人:甲骨文國際公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1