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

數(shù)據(jù)庫重放的細(xì)粒度同步的制作方法

文檔序號:6426483閱讀:141來源:國知局
專利名稱:數(shù)據(jù)庫重放的細(xì)粒度同步的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及在一個數(shù)據(jù)庫系統(tǒng)中獲取工作負(fù)載并在另一個數(shù)據(jù)庫系統(tǒng)中重放該工作負(fù)載。
背景技術(shù)
數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)(“DBMS”)管理數(shù)據(jù)庫。數(shù)據(jù)庫管理系統(tǒng)可包含一個或多個數(shù)據(jù)庫服務(wù)器。數(shù)據(jù)庫包括保存在永久性存儲器機制,例如硬盤集合上的數(shù)據(jù)庫數(shù)據(jù)和元數(shù)據(jù)。 元數(shù)據(jù)定義數(shù)據(jù)庫對象,例如關(guān)系表、表列、視圖和觸發(fā)器。數(shù)據(jù)庫應(yīng)用和客戶端通過向數(shù)據(jù)庫服務(wù)器提交命令與數(shù)據(jù)庫服務(wù)器進(jìn)行交互,通過執(zhí)行針對數(shù)據(jù)庫的命令,使得數(shù)據(jù)庫服務(wù)器完成對存儲于數(shù)據(jù)庫中的數(shù)據(jù)的操作。數(shù)據(jù)庫命令采用符合數(shù)據(jù)庫語言的數(shù)據(jù)庫語句的形式。表示數(shù)據(jù)庫請求的語言是結(jié)構(gòu)化查詢語言(SQL)。存在許多不同版本的SQL,一些版本是標(biāo)準(zhǔn)的,一些版本是專有的,還存在各種擴展。將SQL數(shù)據(jù)定義語言(“DDL”)指令發(fā)布給數(shù)據(jù)庫服務(wù)器,以創(chuàng)建或配置數(shù)據(jù)庫對象, 例如表、視圖或復(fù)雜數(shù)據(jù)類型。SQL/XML是一種在對象-關(guān)系型數(shù)據(jù)庫中操縱XML數(shù)據(jù)時使用的常見SQL擴展。雖然例子是基于Oracle的SQL描述的,但在此提供的技術(shù)不局限于 SQL的任何特殊版本或數(shù)據(jù)庫命令的任何特殊方式。數(shù)據(jù)庫系統(tǒng)的測試和驗證大型的重要商業(yè)應(yīng)用是復(fù)雜的并經(jīng)受高度變動的負(fù)載和使用模式。本申請期望根據(jù)響應(yīng)時間、吞吐量、正常運行時間和可用性來提供某些服務(wù)保證。有時,可能需要改變包括這種應(yīng)用的系統(tǒng)。例如,這種改變會涉及升級系統(tǒng)的數(shù)據(jù)庫服務(wù)器或修改配置。然而,在對生產(chǎn)系統(tǒng)做出任何改變以前,應(yīng)該在測試系統(tǒng)中完成大量的測試和驗證。為了確信生產(chǎn)系統(tǒng)中的改變不會產(chǎn)生問題(例如,錯誤或性能發(fā)布),一旦改變被引入生產(chǎn)系統(tǒng),系統(tǒng)測試器應(yīng)該試圖使測試系統(tǒng)經(jīng)受與生產(chǎn)系統(tǒng)在現(xiàn)實世界環(huán)境中實際經(jīng)受的工作負(fù)載非常類似的工作負(fù)載。許多其它方法仍未能夠在測試系統(tǒng)中復(fù)制實際生產(chǎn)工作負(fù)載。按照一種方法,寫測試腳本的集合來測試通常被執(zhí)行的代碼路徑。雖然這種方法對于完成回歸測試和功能測試可能有用,但這種方法不能模仿生產(chǎn)工作負(fù)載。這種方法通常只能在非常小的程度上施壓給測試系統(tǒng)。根據(jù)另一種方法,人類用戶被要求使用測試系統(tǒng),恰如測試系統(tǒng)是生產(chǎn)系統(tǒng)。然而,這種方法是非常隨機和不確定的。這種方法常常不能再現(xiàn)實際生產(chǎn)環(huán)境中經(jīng)受的負(fù)載模式。數(shù)據(jù)庫工作負(fù)載獲取和重放在Oracle公司開發(fā)的數(shù)據(jù)庫工作負(fù)載獲取和重放架構(gòu)下,如已經(jīng)在此通過引用結(jié)合的工作負(fù)載獲取和重放應(yīng)用所描述的,測試數(shù)據(jù)庫系統(tǒng)按照生產(chǎn)數(shù)據(jù)庫系統(tǒng)原始處理工作負(fù)載的相同提交順序經(jīng)受工作負(fù)載。然而,與生產(chǎn)數(shù)據(jù)庫系統(tǒng)相比,測試數(shù)據(jù)庫系統(tǒng)會花費更多或更少的時間來處理一些事務(wù)。因為事務(wù)順序是嚴(yán)格地保持的,在處理其它事務(wù)以前測試系統(tǒng)會不必要地等待一些事務(wù)完成。嚴(yán)格地保持事務(wù)順序?qū)y試系統(tǒng)是次佳的。另一方面,允許測試系統(tǒng)不按順序地處理事務(wù)會引起測試系統(tǒng)維護(hù)的測試數(shù)據(jù)與在生產(chǎn)系統(tǒng)中維持的生產(chǎn)數(shù)據(jù)不同。換句話說,測試系統(tǒng)不按順序執(zhí)行的事務(wù)不再讀取或修改生產(chǎn)系統(tǒng)中相同或相似的事務(wù)讀取或修改的數(shù)據(jù),導(dǎo)致產(chǎn)生錯誤表示生產(chǎn)工作負(fù)載的測試工作負(fù)載。此外,不按順序執(zhí)行的事務(wù)會引起測試系統(tǒng)中斷,例如讀取或修改尚未存在的數(shù)據(jù)時。所需要的是一種允許測試系統(tǒng)以下面的方式處理工作負(fù)載的技術(shù)(a)不被生產(chǎn)系統(tǒng)的執(zhí)行順序嚴(yán)格地束縛;以及(b)收斂到與生產(chǎn)系統(tǒng)相同或相似的數(shù)據(jù)狀態(tài),且以與生產(chǎn)系統(tǒng)不同的順序處理事務(wù)時不中斷。在本節(jié)中描述的方法是可被采取的方法,但不是已經(jīng)先前設(shè)想或已采取的方法。 因此,除非另有陳述,不假定在本節(jié)中描述的任何方法僅僅借助于在本節(jié)中他們所包含的內(nèi)容而獲得現(xiàn)有技術(shù)的認(rèn)可。


本發(fā)明的各種實施例是通過舉例而非限制的方式在附圖中示出的,其中相似的參考標(biāo)記指的是相似的元件并且其中圖1示出按照此處所述實施例的其中獲取并重放被提交給生產(chǎn)數(shù)據(jù)庫服務(wù)器的工作負(fù)載到測試數(shù)據(jù)庫服務(wù)器的系統(tǒng)的例子的框圖;圖2A和2B為示出了按照此處所述實施例獲取的樣本工作負(fù)載中的信息的表;圖3A和;3B是按照此處所述實施例為樣本工作負(fù)載構(gòu)造的依賴關(guān)系圖;以及圖4舉例說明了一種在其上實現(xiàn)此處所述實施例的計算機系統(tǒng)的框圖。
具體實施例方式在隨后的描述中,出于解釋的目的,為了提供對本發(fā)明的徹底的了解,提出了很多具體細(xì)節(jié)。然而很明顯的是,可以在沒有這些具體細(xì)節(jié)的情況下實施本發(fā)明,在其它情況下,以框圖形式示出公知的結(jié)構(gòu)和裝置以避免不必要地模糊本發(fā)明??偟尼芗仁霭凑找粋€實施例,生產(chǎn)數(shù)據(jù)庫系統(tǒng)執(zhí)行一個或多個從一個或多個客戶端接收的命令。描述一個或多個命令的工作負(fù)載被獲取,所獲取的工作負(fù)載包括標(biāo)識由生產(chǎn)數(shù)據(jù)庫系統(tǒng)執(zhí)行的一個或多個命令直接或間接地引用的數(shù)據(jù)庫對象的對象標(biāo)識符。所獲取的工作負(fù)載還包括當(dāng)生產(chǎn)系統(tǒng)執(zhí)行命令時數(shù)據(jù)庫對象是否被讀取或?qū)懭氲闹甘?。所獲取的對象標(biāo)識符、所獲取的對象是否被讀取和/或?qū)懭氲闹甘?,以及所獲取的數(shù)據(jù)庫命令的工作負(fù)載可被處理,來確定生產(chǎn)系統(tǒng)執(zhí)行命令時被訪問的對象在生產(chǎn)系統(tǒng)先前執(zhí)行一個或多個其他命令時先前已經(jīng)被修改過。在重放期間,在測試數(shù)據(jù)庫系統(tǒng)上的重放處理阻止訪問先前已修改對象的命令的執(zhí)行,直到一個或多個其它命令已經(jīng)被執(zhí)行來完成對該對象的一個或多個先前的修改。測試數(shù)據(jù)庫系統(tǒng)可按照與在生產(chǎn)系統(tǒng)中原始執(zhí)行命令的順序不同的順序執(zhí)行命令,即便一個或多個命令依賴于一個或多個其它命令。在一個實施例中,雖然命令以不同順序被執(zhí)行,測試系統(tǒng)中維持的測試數(shù)據(jù)并不與生產(chǎn)系統(tǒng)中維持的生產(chǎn)數(shù)據(jù)不同。當(dāng)一個命令的執(zhí)行引起生產(chǎn)系統(tǒng)訪問在其它命令執(zhí)行期間,先前被修改的對象的時候,這個命令可以被稱為"依賴”于另一個命令。通過處理所獲取的標(biāo)識在命令執(zhí)行期間被訪問和/或修改的對象的工作負(fù)載,可確定一個命令對另一個命令的依賴性。此外,如果通過數(shù)據(jù)庫服務(wù)器執(zhí)行命令可能弓I起數(shù)據(jù)庫服務(wù)器訪問對象,則命令可以被稱為“訪問,,對象。例如,執(zhí)行引用視圖的命令引起數(shù)據(jù)庫服務(wù)器訪問該視圖所基于的表。依照此方式,命令可以被稱為“訪問,,表或“使用,,表,因為通過執(zhí)行該命令,數(shù)據(jù)庫服務(wù)器正在訪問或使用表。作為另一例子,如果執(zhí)行命令引起數(shù)據(jù)庫服務(wù)器獲取該表上的鎖定,即使執(zhí)行該命令時數(shù)據(jù)庫服務(wù)器事實上并沒有訪問該表,命令也可以被稱為“訪問”表。對象標(biāo)識符可標(biāo)識數(shù)據(jù)庫中任何類型的數(shù)據(jù)庫對象。在一個實施例中,對象標(biāo)識符是用于標(biāo)識表的表標(biāo)識符。可以獲取表標(biāo)識符來標(biāo)識被命令訪問和/或修改的表。在一個特殊實施例中,可從存儲被該命令訪問和/或修改的表有關(guān)的信息的光標(biāo)中標(biāo)識被命令訪問和/或修改的那些表。例如,光標(biāo)可提供標(biāo)識需要鎖定以便執(zhí)行該命令的表的信息。如果命令讀取或修改表,則生產(chǎn)數(shù)據(jù)庫系統(tǒng)可在執(zhí)行該命令的處理中獲取該表上的鎖定。該鎖定可以是許多不同鎖定類型之一(例如,共享鎖或互斥型鎖),并且所獲取的鎖定類型可提供與該命令是否訪問和/或修改過該表有關(guān)的信息。例如,在對象上具有互斥型鎖的命令可假定為已經(jīng)修改了該對象。在對象上具有共享鎖的命令可假定為已經(jīng)訪問了該對象而未修改它??墒褂霉ぷ髫?fù)載來確定第二命令依賴于第一命令。例如,如果在生產(chǎn)期間第二命令訪問第一命令先前修改的對象,則第二命令依賴于第一命令。響應(yīng)于確定第二命令依賴于第一命令,工作負(fù)載處理系統(tǒng)可存儲在重放工作負(fù)載時第二命令不應(yīng)被執(zhí)行直到第一命令被執(zhí)行之后的指示。例如,在測試系統(tǒng)上的重放處理可使用該指示來在重放期間阻止第二命令被執(zhí)行直到第一命令被執(zhí)行之后。在一個實施例中,在重放期間第一命令已經(jīng)被執(zhí)行之后該指示觸發(fā)重放處理來執(zhí)行第二命令。在一個實施例中,在重放命令期間重放處理會遇到依賴于第一命令的第二命令。 重放處理確定在重放期間第一命令還沒有被執(zhí)行。響應(yīng)于確定第一命令還沒有被執(zhí)行,重放處理等待執(zhí)行第二命令。在一個實施例中,通過訪問與從中接收第一命令的重放驅(qū)動器相關(guān)聯(lián)的計數(shù)器,重放處理確定第一命令還沒有被執(zhí)行。計數(shù)器記錄由對應(yīng)驅(qū)動器或通過該驅(qū)動器模擬的對應(yīng)線程最近執(zhí)行指令的計數(shù)。例如,當(dāng)?shù)谝幻钆c比該線程最近執(zhí)行指令的數(shù)量更大的計數(shù)相關(guān)聯(lián)時,測試數(shù)據(jù)庫系統(tǒng)可確定第一命令還沒有被執(zhí)行。在一個實施例中,在接收第二命令之后,測試數(shù)據(jù)庫系統(tǒng)接收并執(zhí)行第一命令。重放處理確定第一命令已經(jīng)被執(zhí)行,作為響應(yīng),引起在測試數(shù)據(jù)庫系統(tǒng)上執(zhí)行第二命令。在一個實施例中,通過訪問與從中第一命令被發(fā)送的線程相關(guān)聯(lián)的計數(shù),重放處理確定第一命令已經(jīng)被執(zhí)行。例如,當(dāng)?shù)谝幻钏P(guān)聯(lián)的計數(shù)小于或等于該線程最近執(zhí)行命令的計數(shù)時, 重放處理可確定第一命令已經(jīng)被執(zhí)行。在一個實施例中,每個線程的計數(shù)僅存儲為該線程最近執(zhí)行命令的計數(shù)。在一個實施例中,存儲諸如依賴關(guān)系圖的信息來表示生產(chǎn)系統(tǒng)中被執(zhí)行的第二命令依賴于生產(chǎn)系統(tǒng)中先前執(zhí)行的第一命令。可以基于生產(chǎn)系統(tǒng)獲取的工作負(fù)載構(gòu)成依賴關(guān)系圖。在一個實施例中,在重放期間,在測試數(shù)據(jù)庫系統(tǒng)已經(jīng)執(zhí)行第一命令之前,測試數(shù)據(jù)庫系統(tǒng)不執(zhí)行第二命令??稍L問依賴關(guān)系圖來確定第二命令依賴于第一命令。在一個實施例中,通過確定在重放期間第一命令是否已經(jīng)被執(zhí)行,重放處理確定依賴性是否得以滿足。 例如,可為每個線程存儲共享計數(shù)器,以指示為該線程最后執(zhí)行的命令。重放處理會檢查與第一命令相關(guān)聯(lián)的線程的共享計數(shù)器,以確定在重放期間該線程是否已經(jīng)執(zhí)行第一命令。 如果在重放期間還沒有執(zhí)行第一命令,則依賴性沒有被滿足。響應(yīng)于確定依賴性沒有被滿足,重放處理等待執(zhí)行第二命令,直到在重放期間第一命令已經(jīng)被執(zhí)行。等待第一命令的同時可執(zhí)行不直接或間接地依賴于第一命令的其它命令。在一個實施例中,用于使命令的重放同步的信息不包括在生產(chǎn)系統(tǒng)中執(zhí)行第一或第二命令的定時。換句話說,在沒有涉及生產(chǎn)系統(tǒng)執(zhí)行命令的邏輯時間的情況下,僅僅基于依賴關(guān)系圖可以使命令同步。在測試系統(tǒng)中重放工作負(fù)載之前,不需要確定重放命令的全局順序,該全局順序包括提交變化的重放命令的全局順序?;诿铐樞蚝瓦@些命令訪問或修改的對象標(biāo)識符可以構(gòu)成依賴關(guān)系圖。一旦構(gòu)成依賴關(guān)系圖,可以按照任何滿足依賴關(guān)系圖的順序重放命令。在一個實施例中,在重放期間基于數(shù)據(jù)依賴性信息動態(tài)地實現(xiàn)重放系統(tǒng)執(zhí)行命令的順序。依照此方式,在重放期間,無需被重放命令的全局順序,就可以確保數(shù)據(jù)依賴性,無論那些命令是否將提交變化。在一個特殊實施例中,依賴關(guān)系圖存儲包括第一命令和第二命令的命令對。在重放期間,第二命令不會被執(zhí)行,直到第一命令已經(jīng)被執(zhí)行。當(dāng)命令之間沒有直接的或間接的數(shù)據(jù)依賴性時,它們可以依照關(guān)于彼此的任何順序被重放。在一個實施例中,為了加強的目的,不需要記錄命令之間的間接依賴性。例如,如果第三命令來自于與較早的第二命令相同的線程,則第三命令將在重放期間跟隨在第二命令之后,無論在第三命令和第二命令之間是否存儲依賴性。依照此方式,可以通過僅僅規(guī)定在第一命令之后將要執(zhí)行第二命令,規(guī)定第三命令和第二命令都將在第一命令之后執(zhí)行的依賴性得以確保。獲取工作負(fù)載在工作負(fù)載獲取和重放應(yīng)用中描述工作負(fù)載獲取和重放架構(gòu),其在此已經(jīng)通過引用被結(jié)合。這些應(yīng)用描述獲取生產(chǎn)系統(tǒng)的工作負(fù)載、處理該工作負(fù)載以為重放準(zhǔn)備該工作負(fù)載、在測試系統(tǒng)上重放工作負(fù)載和監(jiān)視測試系統(tǒng)性能的技術(shù)。所獲取的工作負(fù)載可包括與數(shù)據(jù)庫的初始狀態(tài)有關(guān)的信息和描述調(diào)用集合或針對數(shù)據(jù)庫的數(shù)據(jù)庫命令的信息。所獲取的工作負(fù)載也可以包括事務(wù)性數(shù)據(jù),例如系統(tǒng)改變次數(shù)(System Change Numbers, SCN), 其描述其中針對數(shù)據(jù)庫調(diào)用被接收、執(zhí)行或提交的相對時間。數(shù)據(jù)庫的初始狀態(tài)、所發(fā)布命令的集合以及所發(fā)布命令相關(guān)聯(lián)的SCN定義執(zhí)行給定數(shù)據(jù)庫命令所針對的數(shù)據(jù)庫狀態(tài)。在工作負(fù)載獲取和重放應(yīng)用中描述的技術(shù)使測試系統(tǒng)按照與生產(chǎn)系統(tǒng)相同的提交順序處理相同工作負(fù)載。此處所述的技術(shù)允許測試系統(tǒng)以不被生產(chǎn)系統(tǒng)的執(zhí)行順序嚴(yán)格束縛的方式處理工作負(fù)載。此處所述的用于獲取、處理、重放和監(jiān)視的技術(shù)不受限于工作負(fù)載獲取和重放應(yīng)用中提供的那些技術(shù)。圖1為示出一個其中獲取并重放被提交給生產(chǎn)數(shù)據(jù)庫服務(wù)器的工作負(fù)載到測試數(shù)據(jù)庫服務(wù)器的系統(tǒng)的例子的框圖。示出的例子包括客戶端104A-N、應(yīng)用服務(wù)器106A-N、 生產(chǎn)數(shù)據(jù)庫服務(wù)器108、生產(chǎn)數(shù)據(jù)庫112、所獲取的工作負(fù)載114、重放驅(qū)動器116A-N、測試數(shù)據(jù)庫服務(wù)器118和測試數(shù)據(jù)庫120,其中測試數(shù)據(jù)庫服務(wù)器118包括用于重放從重放驅(qū)動器116A-N接收的重放命令的重放處理。生產(chǎn)數(shù)據(jù)庫服務(wù)器108包括獲取處理110A-N??蛻舳?04A-N可以是分離的計算機或在同一計算機上執(zhí)行的分離處理。例如,在一個實施例中,客戶端104A-N為互聯(lián)網(wǎng)瀏覽器(例如,Mozilla Firefox),其在可通信地耦合至該互聯(lián)網(wǎng)的分離計算機上運行。在一個實施例中,客戶端104A-N經(jīng)由該互聯(lián)網(wǎng)發(fā)送請求到應(yīng)用服務(wù)器106A-N和從應(yīng)用服務(wù)器106A-N接收響應(yīng)。應(yīng)用服務(wù)器106A-N可以是分離的計算機或在同一計算機上執(zhí)行的分離處理。例如,在一個實施例中,應(yīng)用服務(wù)器106A-N是網(wǎng)絡(luò)服務(wù)器調(diào)用的處理,其在可通信地耦合至該互聯(lián)網(wǎng)的分離服務(wù)器上運行。在一個實施例中,應(yīng)用服務(wù)器106A-N經(jīng)由該互聯(lián)網(wǎng)接收來自客戶端104A-N的請求和發(fā)送響應(yīng)到客戶端104A-N。應(yīng)用服務(wù)器106A-N的每一個可實現(xiàn)用于響應(yīng)來自客戶端104A-N的不同類型請求的不同功能。在服務(wù)于來自客戶端104A-N的請求時,應(yīng)用服務(wù)器106A-N可能需要從數(shù)據(jù)庫檢索數(shù)據(jù)和/或存儲數(shù)據(jù)到數(shù)據(jù)庫。為實現(xiàn)這個過程,在一個實施例中,應(yīng)用服務(wù)器106A-N 與生產(chǎn)數(shù)據(jù)庫服務(wù)器108建立數(shù)據(jù)庫會話。在這些會話內(nèi)應(yīng)用服務(wù)器106A-N發(fā)送數(shù)據(jù)庫命令到生產(chǎn)數(shù)據(jù)庫服務(wù)器108。例如,這種數(shù)據(jù)庫命令可包括結(jié)構(gòu)化查詢語言(Mructured Query Language, SQL) 吾句。生產(chǎn)數(shù)據(jù)庫服務(wù)器108執(zhí)行與生產(chǎn)數(shù)據(jù)庫112有關(guān)的這些數(shù)據(jù)庫命令。作為執(zhí)行這些數(shù)據(jù)庫命令的結(jié)果,生產(chǎn)數(shù)據(jù)庫服務(wù)器108可在生產(chǎn)數(shù)據(jù)庫112中存儲數(shù)據(jù)和/或從生產(chǎn)數(shù)據(jù)庫112中檢索數(shù)據(jù)。生產(chǎn)數(shù)據(jù)庫服務(wù)器108以事務(wù)性方式執(zhí)行兩個或更多數(shù)據(jù)庫命令,從而在生產(chǎn)數(shù)據(jù)庫112中不會永久性造成任何一個在單個事務(wù)中的數(shù)據(jù)庫命令的影響,除非可以永久性產(chǎn)生數(shù)據(jù)庫命令的所有影響。生產(chǎn)數(shù)據(jù)庫服務(wù)器108可返回從生產(chǎn)數(shù)據(jù)庫112檢索的作為執(zhí)行某些特定數(shù)據(jù)庫命令(例如SQL選擇語句)的結(jié)果的數(shù)據(jù)到應(yīng)用服務(wù)器106A-N。應(yīng)用服務(wù)器106A-N可在形成對客戶端104A-N的響應(yīng)時使用這種檢索數(shù)據(jù)。在一個實施例中,生產(chǎn)數(shù)據(jù)庫服務(wù)器108包括獲取處理110A-N。獲取處理110A-N 可實現(xiàn)為同時執(zhí)行的分離處理或同一處理中同時執(zhí)行的線程,例如。在一個實施例中,獲取處理110A-N共同地、透明地、不干擾地獲取生產(chǎn)數(shù)據(jù)庫服務(wù)器108從外部實體(例如,應(yīng)用服務(wù)器106A-N和/或客戶端104A-N)接收的所有工作負(fù)載。正如此處使用的那樣,術(shù)語“工作負(fù)載(workload)”指的是稱為“工作負(fù)載單元 (workload units) ”的離散的、具有獨立意義的單元。在一個實施例中,每個“工作負(fù)載單元”對應(yīng)于單獨的“用戶請求(user request)”(例如,源于(a)客戶端104A-N之一、(b) 應(yīng)用服務(wù)器106A-N之一或(c)在生產(chǎn)數(shù)據(jù)庫服務(wù)器108外部的其它處理的請求)。在一個例子中,工作負(fù)載包括描述以下內(nèi)容的信息被請求由生產(chǎn)數(shù)據(jù)庫服務(wù)器執(zhí)行的一個或多個命令、與一個或多個命令相關(guān)聯(lián)的一個或多個數(shù)據(jù)庫對象的對象標(biāo)識符,以及對一個或多個命令是否訪問和/或修改所述對象標(biāo)識符的指示。在一個實施例中,描述一個或多個命令的信息包括命令的實際文本,例如SQL命令的SQL文本。作為替代,描述一個或多個命令的信息可包括標(biāo)識一個或多個命令或一個或多個命令的一個或多個部分的命令標(biāo)識符。作為選擇,描述命令的信息可以保存為二進(jìn)制或壓縮格式。描述命令的信息可以依照任何方式以任何格式保存,測試數(shù)據(jù)庫系統(tǒng)可使用這些命令來重放在生產(chǎn)數(shù)據(jù)庫系統(tǒng)上原始執(zhí)行的命令。在一個實施例中,存儲在所獲取工作負(fù)載中的命令需要進(jìn)一步處理,以便準(zhǔn)備要在測試數(shù)據(jù)庫系統(tǒng)上重放的命令。獲取處理110A-N存儲并記錄這種工作負(fù)載為所獲取工作負(fù)載114。因此,所獲取工作負(fù)載114可包含在指定時間間隔期間獲取的工作負(fù)載,此處被稱為“記錄間隔 (recording interval)”。在一個實施例中,所獲取工作負(fù)載114表示生產(chǎn)數(shù)據(jù)庫服務(wù)器 108的實際的真實世界使用,其使用不特別地用于任何測試目的。在一個實施例中,獲取處理110A-N最初將所獲取工作負(fù)載寫入輸入存儲緩沖器。 分批地壓縮和寫出存儲在這些輸入存儲緩沖器中的數(shù)據(jù)到永久性存儲器。因為涉及永久性存儲器的1/0事務(wù)不需要在獲取每個單獨的工作負(fù)載單元之后被執(zhí)行,所以降低了工作負(fù)載獲取對生產(chǎn)數(shù)據(jù)庫服務(wù)器108性能的影響。獲取用于確定數(shù)據(jù)依賴性的信息此處所述的技術(shù)使得重放的確定基于一個命令是否依賴于另一個命令,而不是以同樣提交順序嚴(yán)格地重放工作負(fù)載。在一個實施例中,獲取處理獲取標(biāo)識被在生產(chǎn)系統(tǒng)上執(zhí)行的命令訪問或修改的對象的信息。所獲取的信息可以是所獲取工作負(fù)載的一部分,或者所獲取的信息可以是與所獲取的工作負(fù)載分開獲取的。所獲取的信息可以是能被處理以用于確定特定命令訪問一個或多個由一個或多個其它命令最后修改的對象的任何信息。在一個實施例中,所述特定命令與下列內(nèi)容相關(guān)聯(lián)(a)與提交一個或多個對象改變的提交命令相同的對象標(biāo)識符,以及(b)比提交命令相對較晚的執(zhí)行時間。該特定命令和一個或多個其它命令可以保存在依賴關(guān)系圖中。在一個實施例中,重放過程讀取該命令和依賴關(guān)系圖,并基于該依賴關(guān)系圖,等到執(zhí)行一個或多個其它命令之后,在測試數(shù)據(jù)庫系統(tǒng)中執(zhí)行該特定命令。在一個實施例中,重放驅(qū)動器發(fā)送對應(yīng)于生產(chǎn)系統(tǒng)的客戶端的命令線程。測試數(shù)據(jù)庫系統(tǒng)上的重放處理重放命令直到重放處理到達(dá)由于特定命令與來自另一個線程的在前命令之間的數(shù)據(jù)依賴性而還不能執(zhí)行的特定命令。然后重放過程等待來自其它線程的在前命令被執(zhí)行,然后一旦檢測到這個事件就執(zhí)行該特定命令。所獲取的信息可包括標(biāo)識兩個命令之間的潛在的或可能的數(shù)據(jù)依賴性的任何信息。在一個實施例中,所獲取信息包括時序元素和數(shù)據(jù)元素。例如,所獲取的信息可包括 SCN、標(biāo)識與兩個或更多命令相關(guān)的對象的對象標(biāo)識符,和表示兩個或更多命令中的每一個是否訪問和/或修改該對象的指示。在一個實施例中,利用在提交針對數(shù)據(jù)庫的命令時增加SCN,生產(chǎn)系統(tǒng)獲取命令和與該命令相關(guān)聯(lián)的SCN。與具有較高SCN的命令相比,具有較低SCN的命令與數(shù)據(jù)庫的較早狀態(tài)相關(guān)聯(lián)。在一個例子中,較早的數(shù)據(jù)庫命令提交變化給生產(chǎn)系統(tǒng)中的數(shù)據(jù)庫,并且較晚數(shù)據(jù)庫命令讀取生產(chǎn)系統(tǒng)中的數(shù)據(jù)庫。用于該命令的SCN可用來確定具有較低SCN的較早命令在具有較高SCN的較晚命令之前被執(zhí)行。換句話說,SCN可用來確定用于兩個命令的相對時序元素。在一個例子中,在較早命令以前數(shù)據(jù)庫不反映該變化,但是該數(shù)據(jù)庫于該較早命令之后且于較晚命令之前反映該變化。如果在生產(chǎn)系統(tǒng)中,其它命令不先修改特定命令訪問的對象,則在測試系統(tǒng)中,可在其它命令之前重放該特定命令。在上述例子中,只要在先修改較晚命令訪問的對象的任何命令之前沒有重放較晚命令,測試系統(tǒng)就可在較早命令之前重放較晚命令。例如,雖然在生產(chǎn)系統(tǒng)中在讀取或修改表2的命令之前可能已經(jīng)執(zhí)行修改表1的命令,但由于執(zhí)行修改表1的命令不影響讀取或修改表2的命令的結(jié)果,所以在測試系統(tǒng)中在修改表1的命令之前可重放讀取或修改表2的命令。另一方面,在生產(chǎn)系統(tǒng)中在先前修改表2的命令之前可不重放讀取或修改表2的命令。不按順序重放命令會引起測試系統(tǒng)維護(hù)的數(shù)據(jù)庫狀態(tài)與生產(chǎn)系統(tǒng)維護(hù)的數(shù)據(jù)庫狀態(tài)不同。在一個實施例中,基于標(biāo)識潛在的或可能的數(shù)據(jù)依賴性信息,做出數(shù)據(jù)依賴性判定并構(gòu)建數(shù)據(jù)依賴關(guān)系圖。在一個特定實施例中,來自與命令相關(guān)聯(lián)的事務(wù)性光標(biāo)的光標(biāo)信息用來確定可能由該命令訪問或修改的對象標(biāo)識符,以及用其來確定是可能修改了還是僅僅可能訪問了那些對象標(biāo)識符的指示。例如,在處理命令時,光標(biāo)可表示在表1上獲取互斥型鎖和在表2上獲取非互斥型鎖或共享鎖。基于該光標(biāo)信息,該命令可被稱為已經(jīng)訪問和修改表1并且在沒有修改表2的情況下訪問表2。在某些情況下,在沒有實際修改表的情況下命令可獲取該表上的互斥型鎖。在一個實施例中,即使命令沒有實際修改該表,由所獲取的互斥型鎖確定該命令已經(jīng)修改該表。依照此方式,所有潛在的數(shù)據(jù)依賴性可以通過定義邏輯數(shù)據(jù)依賴性來保持,以在沒有確定實際數(shù)據(jù)依賴性的情況下包括實際數(shù)據(jù)依賴性。 相應(yīng)地,正如此處使用的那樣,術(shù)語“數(shù)據(jù)依賴性”可以指邏輯數(shù)據(jù)依賴性或?qū)嶋H數(shù)據(jù)依賴性。在一個實施例中,所獲取的對象標(biāo)識符表示在命令中直接或間接地被實際引用的對象。在一個例子中,命令可直接引用表,并且可以獲取標(biāo)識該表的對象標(biāo)識符。在另一個例子中,引用視圖的命令可間接地訪問該視圖引用的表。獲取標(biāo)識該表的對象標(biāo)識符以便確保針對該視圖引用的表的正確狀態(tài)執(zhí)行引用該視圖的命令。在一個實施例中,由與鎖定相關(guān)聯(lián)的對象標(biāo)識符反映針對對象的直接和間接引用。圖2A和2B舉例說明可從生產(chǎn)數(shù)據(jù)庫系統(tǒng)獲取并被處理以產(chǎn)生依賴關(guān)系圖的示例性工作負(fù)載信息。如圖所示,工作負(fù)載信息保存在表中,例如,存儲在如圖4所示的計算機系統(tǒng)上的表。然而,本領(lǐng)域技術(shù)人員能夠理解可以采用各種其它方式表示這種信息。圖2A示出了針對生產(chǎn)數(shù)據(jù)庫執(zhí)行的調(diào)用。每個提交改變生產(chǎn)數(shù)據(jù)庫的狀態(tài)并使得SCN增加。例如,由于直到執(zhí)行來自線程2的第一讀取Tl調(diào)用之后,才提交更新Tl調(diào)用, 所以來自線程1的更新Tl調(diào)用并不影響來自線程2的第一讀取Tl調(diào)用。然而,來自線程 2的第二和第三讀取Tl調(diào)用受到更新Tl調(diào)用的影響,因為它們在提交更新Tl調(diào)用之后被執(zhí)行?;趫D2A中顯示的信息,可以確定來自線程2的第二和第三讀取Tl調(diào)用必須等待來自線程1的提交調(diào)用。圖2B示出了另一個表來列舉示例性調(diào)用、這些調(diào)用讀取的表和這些調(diào)用寫入的表。如圖所示,讀取TlO)和讀取Tl (4)都在修改表Tl的提交(1)之后讀取表Tl并得到SCN。處理和重放工作負(fù)載該工作負(fù)載獲取和重放應(yīng)用描述了 按照從生產(chǎn)系統(tǒng)獲取的SCN,以生產(chǎn)系統(tǒng)處理工作負(fù)載的相同提交順序在測試系統(tǒng)上重放工作負(fù)載。例如,從三個客戶端接收調(diào)用的生產(chǎn)系統(tǒng)將使用三個重放驅(qū)動器在三個線程上仿真來自這三個客戶端的調(diào)用。所有這些重放驅(qū)動器重放的調(diào)用將以與在生產(chǎn)系統(tǒng)上執(zhí)行調(diào)用的相同的全局提交順序在測試系統(tǒng)上被執(zhí)行。按照此處所述的技術(shù),在重放期間不必嚴(yán)格地保持生產(chǎn)中調(diào)用的全局提交順序。 在測試系統(tǒng)上執(zhí)行命令以前不需要確定出這些命令的重放順序。重放驅(qū)動器上的線程模擬最初提交的生產(chǎn)系統(tǒng)上執(zhí)行的的命令的客戶端。在重放期間重放驅(qū)動器提交來自不同線程的命令到測試系統(tǒng)。測試系統(tǒng)接收這些命令并且以保持由依賴關(guān)系圖指定依賴性的方式執(zhí)行這些命令。依照此方式,在重放期間基于所規(guī)定的數(shù)據(jù)依賴性動態(tài)地實現(xiàn)全局執(zhí)行順序。在一個實施例中,如果對特定命令無法確定數(shù)據(jù)依賴性,則存儲數(shù)據(jù)依賴性會引起該特定命令等待在該特定命令之前事先執(zhí)行的所有命令。在同一或另一個實施例中,存儲數(shù)據(jù)依賴性會引起在該特定命令之后先前執(zhí)行的所有命令等待該特定命令。參照圖1,在獲取處理110A-N已經(jīng)在所獲取的工作負(fù)載114中存儲了工作負(fù)載之后,所獲取的工作負(fù)載114可經(jīng)歷自動化處理??梢园凑辗菍崟r的方式完成這種自動化處理。例如,在獲取處理110A-N已經(jīng)完成在所獲取工作負(fù)載114中存儲數(shù)據(jù)之后,生產(chǎn)數(shù)據(jù)庫服務(wù)器108外部的處理可處理所獲取的工作負(fù)載114。在生產(chǎn)數(shù)據(jù)庫服務(wù)器108進(jìn)一步服務(wù)于來自應(yīng)用服務(wù)器106A-N的請求的同時可以完成這種處理。因此,在對生產(chǎn)數(shù)據(jù)庫服務(wù)器108的操作的沒有任何干擾或影響的情況下,可以完成對所獲取工作負(fù)載114的處理。 在一個實施例中,處理該工作負(fù)載使得為重放驅(qū)動器116A-N的每一個生成依賴關(guān)系圖和命令列表。在一個實施例中,在所獲取工作負(fù)載114已經(jīng)經(jīng)歷如上所述的處理之后,以與從客戶端104A-N中相應(yīng)的客戶端或應(yīng)用服務(wù)器106A-N中相應(yīng)的應(yīng)用服務(wù)器發(fā)送命令給生產(chǎn)數(shù)據(jù)庫服務(wù)器108的相同方式,重放驅(qū)動器116A-N的每一個從已處理的工作負(fù)載發(fā)送命令到測試數(shù)據(jù)庫服務(wù)器118。重放驅(qū)動器116A-N可實現(xiàn)為分離的并行執(zhí)行的處理或同一處理中并行執(zhí)行的線程,例如。在一個實施例中,重放驅(qū)動器116A-N發(fā)送它們各自的命令到測試數(shù)據(jù)庫服務(wù)器118,其訪問依賴關(guān)系圖以在不需要命令的全局執(zhí)行順序的情況下保持依賴性。在一個實施例中,重放驅(qū)動器116A-N的每一個可重放多個分離的獲取處理 110A-N獲取的工作負(fù)載。因此,在一個實施例中,重放驅(qū)動器116A-N的數(shù)量可以比獲取處理110A-N的數(shù)量少。重放驅(qū)動器116A-N的每一個可以是多線程的。測試數(shù)據(jù)庫服務(wù)器118在一個或多個方面可以不同于生產(chǎn)數(shù)據(jù)庫服務(wù)器108。例如,測試數(shù)據(jù)庫服務(wù)器118可能是生產(chǎn)數(shù)據(jù)庫服務(wù)器108的已升級版本。對于另一個例子, 測試數(shù)據(jù)庫服務(wù)器118可能是生產(chǎn)數(shù)據(jù)庫服務(wù)器108的相同品牌和版本,但是測試數(shù)據(jù)庫服務(wù)器118可能被配置得(例如,在一個或更多設(shè)置中)不同于生產(chǎn)數(shù)據(jù)庫服務(wù)器108。對于另一個例子,測試數(shù)據(jù)庫服務(wù)器118可能是完全不同于生產(chǎn)數(shù)據(jù)庫服務(wù)器108的數(shù)據(jù)庫服務(wù)器品牌。測試數(shù)據(jù)庫服務(wù)器118可在機器上運行,該機器具有與運行生產(chǎn)數(shù)據(jù)庫服務(wù)器108的機器硬件不同的硬件。測試數(shù)據(jù)庫服務(wù)器118可與操作系統(tǒng)結(jié)合運行,該系統(tǒng)不同于生產(chǎn)數(shù)據(jù)庫服務(wù)器108的運行結(jié)合的操作系統(tǒng)。使測試數(shù)據(jù)庫服務(wù)器118承受和生產(chǎn)數(shù)據(jù)庫服務(wù)器108實際承受相同工作負(fù)載,其目的可在于確定在測試數(shù)據(jù)庫服務(wù)器118和生產(chǎn)數(shù)據(jù)庫服務(wù)器108之間的區(qū)別,和/或確定那些數(shù)據(jù)庫服務(wù)器運行環(huán)境的區(qū)別是否是容許的或合乎需要的區(qū)別。測試數(shù)據(jù)庫服務(wù)器118處理測試數(shù)據(jù)庫服務(wù)器118從重放驅(qū)動器116A-N接收的命令。如果工作負(fù)載包括數(shù)據(jù)庫命令,則測試數(shù)據(jù)庫服務(wù)器118執(zhí)行與測試數(shù)據(jù)庫120有關(guān)的這些數(shù)據(jù)庫命令。作為執(zhí)行這些數(shù)據(jù)庫命令的結(jié)果,測試數(shù)據(jù)庫服務(wù)器118可在測試數(shù)據(jù)庫120中存儲數(shù)據(jù),和/或從測試數(shù)據(jù)庫120中檢索數(shù)據(jù)。如果依賴關(guān)系圖指定特定命令將等待一個或多個其它命令,則在對測試數(shù)據(jù)庫服務(wù)器118執(zhí)行該特定命令之前,測試數(shù)據(jù)庫服務(wù)器118將等待一個或多個其它命令被執(zhí)行。當(dāng)測試數(shù)據(jù)庫服務(wù)器118等待一個或多個其它命令被執(zhí)行時,測試數(shù)據(jù)庫服務(wù)器118執(zhí)行來自其它重放驅(qū)動器116A-N的命令。響應(yīng)于執(zhí)行一個或多個其它命令,測試數(shù)據(jù)庫服務(wù)器118檢測到該特定命令正在等待被執(zhí)行并使得該特定命令被執(zhí)行。測試數(shù)據(jù)庫服務(wù)器118可返回從測試數(shù)據(jù)庫120檢索的作為執(zhí)行某些數(shù)據(jù)庫命令(例如SQL選擇語句)的結(jié)果的數(shù)據(jù)到重放驅(qū)動器116A-N。在圖1所示的實施例中,存在該生產(chǎn)數(shù)據(jù)庫服務(wù)器的一個實例和該測試數(shù)據(jù)庫服務(wù)器的一個實例。然而,在可供選擇的實施例中,可以有多個生產(chǎn)數(shù)據(jù)庫服務(wù)器的實例,所有實例執(zhí)行與生產(chǎn)數(shù)據(jù)庫112有關(guān)的數(shù)據(jù)庫操作。另外,在可供選擇的實施例中,可以有多個測試數(shù)據(jù)庫服務(wù)器的實例,所有實例執(zhí)行與測試數(shù)據(jù)庫120有關(guān)的數(shù)據(jù)庫操作。在一個實施例中,生產(chǎn)數(shù)據(jù)庫服務(wù)器實例的數(shù)目不同于測試數(shù)據(jù)庫服務(wù)器實例的數(shù)目。測試數(shù)據(jù)庫120可以在一個或多個方面不同于生產(chǎn)數(shù)據(jù)庫112。例如,在測試數(shù)據(jù)庫120與生產(chǎn)數(shù)據(jù)庫112中,邏輯關(guān)系型數(shù)據(jù)庫結(jié)構(gòu)的物理分布和存儲在磁盤上的方式可能不同。因此,雖然存儲于測試數(shù)據(jù)庫120中數(shù)據(jù)中呈現(xiàn)的值會收斂到與存儲在生產(chǎn)數(shù)據(jù)庫112中的數(shù)據(jù)相同的值,但在兩個數(shù)據(jù)庫之間將那些值存儲在磁盤上采用的方式可以不同。另外,測試數(shù)據(jù)庫服務(wù)器120中劃分關(guān)系表的方式可不同于生產(chǎn)數(shù)據(jù)庫112中劃分對應(yīng)關(guān)系表的方式。另外,測試數(shù)據(jù)庫120中為關(guān)系表構(gòu)造(或不構(gòu)造)的索引可不同于生產(chǎn)數(shù)據(jù)庫112中為對應(yīng)關(guān)系表構(gòu)造(或不構(gòu)造)的索引。可評估測試數(shù)據(jù)庫服務(wù)器118 和/或測試數(shù)據(jù)庫120的性能,以確定測試系統(tǒng)和生產(chǎn)系統(tǒng)之間的區(qū)別是否是容許的或合乎需要的區(qū)別。記錄間隔可開始于生產(chǎn)數(shù)據(jù)庫112已經(jīng)處于某一狀態(tài)的時候。例如,在記錄間隔開始的時候,生產(chǎn)數(shù)據(jù)庫112可能已經(jīng)包含一個或多個可能已經(jīng)填充了數(shù)據(jù)的邏輯數(shù)據(jù)結(jié)構(gòu)(例如,數(shù)據(jù)庫表、存儲的過程、觸發(fā)器、視圖、索引等等)。如果到重放驅(qū)動器116A-N開始“重放”所獲取工作負(fù)載114到測試數(shù)據(jù)庫服務(wù)器118時為止,測試數(shù)據(jù)庫120還未以相同狀態(tài)包含這些結(jié)構(gòu),則在與測試數(shù)據(jù)庫120有關(guān)的被重放工作負(fù)載中執(zhí)行數(shù)據(jù)庫命令可能產(chǎn)生錯誤。因此,在一個實施例中,在重放驅(qū)動器116A-N開始重放所獲取工作負(fù)載114 到測試數(shù)據(jù)庫服務(wù)器118以前,測試數(shù)據(jù)庫120置于與生產(chǎn)數(shù)據(jù)庫108相同的邏輯狀態(tài)中。 例如,這可以通過“備份”生產(chǎn)數(shù)據(jù)庫112并且從產(chǎn)生的備份數(shù)據(jù)對測試數(shù)據(jù)庫120進(jìn)行恢復(fù)來實現(xiàn)。在一個實施例中,在生產(chǎn)數(shù)據(jù)庫112處原始工作負(fù)載即將被接收的時刻或稍早于該時刻,進(jìn)行這種備份。這基本上獲取了生產(chǎn)數(shù)據(jù)庫112的在前工作負(fù)載狀態(tài)。因此,當(dāng)備份數(shù)據(jù)相對于測試數(shù)據(jù)庫120被恢復(fù)時,測試數(shù)據(jù)庫120的狀態(tài)非常類似于在接收到原始工作負(fù)載之前生產(chǎn)數(shù)據(jù)庫112所存在的狀態(tài)。重放驅(qū)動器116A-N重放所獲取的工作負(fù)載114到測試數(shù)據(jù)庫服務(wù)器118的時間間隔可以與獲取處理110A-N截取和存儲工作負(fù)載的時間間隔完全不相重疊且不同時。例如,獲取處理110A-N會在第一個時間間隔期間截取和記錄所獲取的工作負(fù)載114。在第一個時間間隔結(jié)束之后的幾個小時、幾天乃至幾個星期,在與第一個時間間隔的任何部分都不同時的第二個時間間隔期間,重放驅(qū)動器116A-N可重放所獲取的工作負(fù)載114到測試數(shù)據(jù)庫服務(wù)器118。在一個實施例中,客戶端104A-N和應(yīng)用服務(wù)器106A-N不需要重放所獲取的工作負(fù)載114到測試數(shù)據(jù)庫服務(wù)器118。因為重放驅(qū)動器116A-N處理重放所獲取的工作負(fù)載114到測試數(shù)據(jù)庫服務(wù)器118,所以不必在重放系統(tǒng)中復(fù)制客戶端104A-N或應(yīng)用服務(wù)器 106A-N。這樣做有利于節(jié)省資源。圖3A和;3B舉例說明了列出調(diào)用和要等待的調(diào)用的示例性依賴關(guān)系圖。例如,來自圖2A和2B的信息可用來構(gòu)成如圖3A所示的依賴關(guān)系圖,其規(guī)定讀取Tl (2)、讀取Tl (3) 和讀取Tl(4)調(diào)用都等待提交(1)調(diào)用。如圖所示,依賴關(guān)系圖保存在表中,例如,存儲在圖4所示的計算機系統(tǒng)上的表。然而,本領(lǐng)域技術(shù)人員能夠理解可以采用各種其它方式表示這種信息。通過去除來自該依賴關(guān)系圖的冗余信息可以優(yōu)化該圖。例如,假設(shè)表達(dá)式“B- > Α”指的是調(diào)用B在被執(zhí)行前等待調(diào)用Α。如果B- > A并且B- > C,且如果(1) C與A來自同一線程以及的調(diào)用計數(shù)器小于Α,則可以從該圖中移走條目B-> C。換句話說,如果調(diào)用A在調(diào)用C之后被同一線程發(fā)送,則明確地規(guī)定調(diào)用B將等待調(diào)用A和C是冗余的。 在此情況下,等待調(diào)用A也暗示等待調(diào)用C。在一個實施例中,該圖僅僅存儲B- > A,而不存儲B- > C。作為另一例子,假定B->六和D->A,且如果(I)D和B來自同一線程以及的調(diào)用計數(shù)器大于B,則可以從該圖中移走條目D- > A0換句話說,如果調(diào)用D在調(diào)用B之后被同一線程發(fā)送,則明確地規(guī)定調(diào)用A將在調(diào)用B和D之前執(zhí)行是冗余的。在此情況下, 在調(diào)用B之前執(zhí)行調(diào)用A也暗示在調(diào)用D之前執(zhí)行調(diào)用A。在一個實施例中,該圖僅僅存儲 8->々,而不存儲0->八。
作為又一個例子,如果A和B來自于同一線程,可以從依賴關(guān)系圖中移走依賴性 B->A,因為在一個實施例中,來自同一線程的調(diào)用執(zhí)行順序是被保持的。通過比較圖3A和圖;3B所示,在示例中,從依賴關(guān)系圖中移走讀取T1 ( 調(diào)用是由于讀取Tl (3)調(diào)用與提交(1)調(diào)用出現(xiàn)在同一線程中并將在提交(1)調(diào)用之后被重放,即使沒有使用依賴關(guān)系圖也是這樣。此外,從依賴關(guān)系圖中移走讀取Tl (4)調(diào)用是由于讀取 Tl (4)調(diào)用與讀取Tl (2)調(diào)用出現(xiàn)在同一線程中并將在讀取Tl (2)調(diào)用之后被重放,即使沒有使用依賴關(guān)系圖也是這樣。利用該依賴關(guān)系圖,測試數(shù)據(jù)庫系統(tǒng)將在提交(1)調(diào)用之后重放讀取Tl (2)調(diào)用。在執(zhí)行讀取Tl (2)調(diào)用時,測試數(shù)據(jù)庫系統(tǒng)使用依賴關(guān)系圖來確定讀取Tl (2)依賴于提交(1)。然后,測試數(shù)據(jù)庫系統(tǒng)確定提交(1)是否已經(jīng)被重放。如果提交(1)還沒有被重放,則測試數(shù)據(jù)庫系統(tǒng)等待執(zhí)行讀取Tl O),直到提交(1)被重放。測試數(shù)據(jù)庫系統(tǒng)會在提交(1)調(diào)用之前執(zhí)行讀取T2、更新T2和來自進(jìn)程3的提交( 調(diào)用,即使在生產(chǎn)系統(tǒng)中這些調(diào)用是在提交(1)之后出現(xiàn)的。修改表T2的這些命令的在前執(zhí)行不影響涉及表Tl 的命令的執(zhí)行。在一個實施例中,每個相應(yīng)的重放驅(qū)動器存儲那些由生產(chǎn)系統(tǒng)中的對應(yīng)客戶端提交的命令。例如,與線程1相關(guān)聯(lián)的重放驅(qū)動器存儲那些生產(chǎn)系統(tǒng)中第一線程提交的命令, 與線程2相關(guān)聯(lián)的重放驅(qū)動器存儲那些生產(chǎn)系統(tǒng)中第二線程提交的命令。測試數(shù)據(jù)庫服務(wù)器存儲規(guī)定來自線程2的讀取Tl (2)將等待來自線程1的提交(1)的依賴關(guān)系圖的一部分。 當(dāng)測試數(shù)據(jù)庫系統(tǒng)重放該命令時,測試數(shù)據(jù)庫系統(tǒng)等待執(zhí)行讀取TlO)命令,直到提交(1) 已經(jīng)被執(zhí)行。監(jiān)控性能工作負(fù)載獲取和重放應(yīng)用進(jìn)一步描述了監(jiān)控測試系統(tǒng)的性能,并描述了做出是否用測試系統(tǒng)替換生產(chǎn)系統(tǒng)的判定。例如,在處理與生產(chǎn)系統(tǒng)相同的工作負(fù)載時,當(dāng)測試系統(tǒng)展現(xiàn)出良好性能的時候,做出用測試系統(tǒng)替換生產(chǎn)系統(tǒng)的判定。此處所述的技術(shù)不需要監(jiān)控測試系統(tǒng)或生產(chǎn)系統(tǒng)的性能。如果監(jiān)控兩個系統(tǒng)之一的性能,任何已知的或者最近開發(fā)的性能監(jiān)控技術(shù)可用于與此處所述的技術(shù)相結(jié)合。在一個實施例中,將測試數(shù)據(jù)庫的狀態(tài)與生產(chǎn)數(shù)據(jù)庫的狀態(tài)比較,來確保測試數(shù)據(jù)庫的狀態(tài)收斂到生產(chǎn)數(shù)據(jù)庫的狀態(tài)。在同一個或另一個實施例中,可以將測試環(huán)境中執(zhí)行命令的結(jié)果與生產(chǎn)環(huán)境中執(zhí)行命令的結(jié)果相比較。在另一個實施例中,可以將測試系統(tǒng)中執(zhí)行命令的相對時序與生產(chǎn)系統(tǒng)中執(zhí)行命令的相對時序相比較。性能數(shù)據(jù)可用來確定是否使用測試數(shù)據(jù)庫系統(tǒng)作為生產(chǎn)數(shù)據(jù)庫系統(tǒng)。例如,如果測試數(shù)據(jù)庫的狀態(tài)收斂到生產(chǎn)數(shù)據(jù)庫的狀態(tài),如果測試數(shù)據(jù)庫系統(tǒng)比生產(chǎn)數(shù)據(jù)庫系統(tǒng)運行更有效或處理命令更迅速,則與生產(chǎn)數(shù)據(jù)庫系統(tǒng)相比,測試數(shù)據(jù)庫系統(tǒng)可被確定為展現(xiàn)出良好性能。硬件概述根據(jù)一個實施例,通過一個或多個專用的計算設(shè)備實現(xiàn)此處所述的技術(shù)。該專用的計算設(shè)備可以是硬連線的以實現(xiàn)這些技術(shù),或可包括數(shù)字電子設(shè)備,比如一個或多個專用集成電路(ASIC)或被永久性編程以實現(xiàn)這些技術(shù)的現(xiàn)場可編程門陣列(FPGA),或可包括一個或多個被編程的通用硬件處理器以依據(jù)固件、內(nèi)存、其它存儲器或組合中的程序指令實現(xiàn)這些技術(shù)。這種專用的計算設(shè)備也可以組合常規(guī)硬連線邏輯、ASIC或具有常規(guī)程序的FPGA以實現(xiàn)該技術(shù)。該專用的計算設(shè)備可以是臺式計算機系統(tǒng)、便攜式計算機系統(tǒng)、手持設(shè)備、網(wǎng)絡(luò)設(shè)備或任何采用硬連線和/或程序邏輯以實現(xiàn)這些技術(shù)的其它設(shè)備。例如,圖4是示出了在其上可以實現(xiàn)此處所述技術(shù)的計算機系統(tǒng)400的框圖。計算機系統(tǒng)400包括總線402或其它用于交換信息的通信機制,和耦接到總線402用于處理信息的的硬件處理器404。例如,硬件處理器404可以是通用微處理器。計算機系統(tǒng)400還包括主存儲器406,比如隨機存取存儲器(RAM)或其它動態(tài)存儲器,其耦接至總線402用于存儲信息和處理器404要執(zhí)行的指令。主存儲器406也可以用于在處理器404要執(zhí)行的指令的執(zhí)行期間存儲臨時變量或其它中間信息。當(dāng)被保存在可訪問處理器404的存儲介質(zhì)中時,這種指令使計算機系統(tǒng)400反映為被定制以執(zhí)行指令中規(guī)定的操作的專用機。計算機系統(tǒng)400還包括耦合至總線402的只讀存儲器(ROM) 408或其它靜態(tài)存儲設(shè)備,以用于為處理器404存儲靜態(tài)信息和指令。存儲設(shè)備410,比如磁盤或光盤,被提供并耦合至總線402以用于存儲信息和指令。計算機系統(tǒng)400可以經(jīng)由總線402耦合到顯示器412,比如陰極射線管(CRT),以用于顯示信息給計算機用戶。包括字母數(shù)字以及其它鍵的輸入設(shè)備414耦合至總線402,以用于傳遞信息和命令選擇給處理器404。用戶輸入設(shè)備的另一類型是光標(biāo)控制裝置416,比如鼠標(biāo)、軌跡球或光標(biāo)方向鍵,以用于傳遞方向信息和命令選擇給處理器404,且用于控制在顯示器412上的光標(biāo)移動。輸入設(shè)備通常在兩個坐標(biāo)軸上具有兩個自由度,第一坐標(biāo)軸 (例如,χ)和第二坐標(biāo)軸(例如,y),其允許設(shè)備指定平面中的位置。計算機系統(tǒng)400可使用定制的硬連線邏輯、一個或多個ASIC或FPGA、固件和/或程序邏輯實現(xiàn)此處所述的技術(shù),該程序邏輯與計算機系統(tǒng)結(jié)合使得計算機系統(tǒng)400或?qū)ζ渚幊坛蔀閷S脵C。按照一個實施例,響應(yīng)于處理器404執(zhí)行包含在主存儲器406中的一個或多個指令的一個或多個序列,計算機系統(tǒng)400實現(xiàn)在此描述的技術(shù)。從另一個存儲介質(zhì), 比如存儲設(shè)備410,將這種指令讀入主存儲器406。執(zhí)行包含在主存儲器406中的指令序列令處理器404完成此處所述的處理步驟。在替代的實施例中,硬連線電路可用于代替軟件指令或與軟件指令結(jié)合。正如此處使用的那樣,術(shù)語“存儲介質(zhì)”指的是存儲使機器以特定的方式運行的數(shù)據(jù)和/或指令的任何介質(zhì)。這種存儲介質(zhì)可包含非易失性介質(zhì)和/或易失性介質(zhì)。非易失性介質(zhì)包括,比如光盤或磁盤,諸如存儲設(shè)備410。易失性介質(zhì)包括動態(tài)存儲器,比如主存儲器406。存儲介質(zhì)的常見形式包括,例如,軟盤、柔性磁盤、硬盤、固態(tài)驅(qū)動、磁帶,或任何其它磁性數(shù)據(jù)存儲介質(zhì)、CD-ROM、任何其它光學(xué)數(shù)據(jù)存儲介質(zhì)、具有孔狀圖案的任何物理介質(zhì)、RAM、PROM、以及EPROM、FLASH-EPROM、NVRAM、任何其它存儲器芯片或盤盒。存儲介質(zhì)不同于傳輸介質(zhì)但可用于結(jié)合傳輸介質(zhì)。傳輸介質(zhì)參與在存儲介質(zhì)之間傳送信息。例如,傳輸介質(zhì)包括同軸電纜、銅線和光纖,其包含組成總線402的電線。傳輸介質(zhì)還可以采取聲或光波的形式,諸如那些產(chǎn)生于無線電和紅外線數(shù)據(jù)通信期間的聲或光波。各種形式的介質(zhì)可涉及承載一個或多個指令的一個或多個序列到處理器404以用于執(zhí)行。例如,這些指令最初可在磁盤或遠(yuǎn)程計算機的固態(tài)驅(qū)動器上承載。該遠(yuǎn)程計算機可將這些指令加載到動態(tài)存儲器中,并經(jīng)由電話線使用調(diào)制解調(diào)器發(fā)送這些指令。位于計算機系統(tǒng)400的調(diào)制解調(diào)器能接收電話線上的數(shù)據(jù),并使用紅外線發(fā)射器將數(shù)據(jù)轉(zhuǎn)換為紅外信號。紅外檢測器可接收承載于紅外信號中的數(shù)據(jù),并且適當(dāng)?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可以是綜合服務(wù)數(shù)字網(wǎng)(ISDN)卡、電纜調(diào)制解調(diào)器、衛(wèi)星調(diào)制解調(diào)器、或調(diào)制解調(diào)器,以用于提供數(shù)據(jù)通信連接到相應(yīng)類型的電話線。作為另一例子,通信接口 418可以是局域網(wǎng)(LAN)卡以用于提供數(shù)據(jù)通信連接到兼容LAN。還可以實現(xiàn)無線鏈路。在任何這種實現(xiàn)方式中,通信接口 418發(fā)送和接收承載表示各種類型信息的數(shù)字?jǐn)?shù)據(jù)流的電、電磁或光學(xué)信號。網(wǎng)絡(luò)鏈路420通常通過一個或多個網(wǎng)絡(luò)提供數(shù)據(jù)通信到其它數(shù)據(jù)設(shè)備。例如, 網(wǎng)絡(luò)鏈路420可通過本地網(wǎng)絡(luò)422提供連接到主機計算機似4或到由互聯(lián)網(wǎng)服務(wù)供應(yīng)商 (ISP)^e操作的數(shù)據(jù)設(shè)備。ISP^e反過來通過全球分組數(shù)據(jù)通信網(wǎng)絡(luò)(現(xiàn)在通常稱為“互聯(lián)網(wǎng)”)4 提供數(shù)據(jù)通信業(yè)務(wù)。本地網(wǎng)絡(luò)422和互聯(lián)網(wǎng)4 都使用承載數(shù)字?jǐn)?shù)據(jù)流的電、 電磁或光學(xué)信號。經(jīng)由各種網(wǎng)絡(luò)的信號和在網(wǎng)絡(luò)鏈路420上并經(jīng)由通信接口 418的信號是傳輸介質(zhì)的示例形式,這些信號承載數(shù)字?jǐn)?shù)據(jù)往返于計算機系統(tǒng)400。計算機系統(tǒng)400可經(jīng)由網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路420和通信接口 418發(fā)送消息和接收包括程序代碼的數(shù)據(jù)。在互聯(lián)網(wǎng)示例中,服務(wù)器430可經(jīng)由互聯(lián)網(wǎng)似8、ISP426、本地網(wǎng)絡(luò)422和通信接口 418為應(yīng)用程序發(fā)送所請求的代碼。接收到的代碼可按原樣由處理器404執(zhí)行,和/或保存在存儲設(shè)備410中,或存儲在其它非易失性存儲器中用于稍后執(zhí)行。在上面的說明書中,本發(fā)明的實施例已經(jīng)參照各種實現(xiàn)方式所不同的很多具體細(xì)節(jié)進(jìn)行了描述。因此,本說明書和附圖意在舉例說明,而不是限制性的意義。按照本申請的一個方面,公開了一種獲取和處理由一個或多個數(shù)據(jù)庫服務(wù)器針對數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)庫命令的方法,所述方法包括存儲用于標(biāo)識以下內(nèi)容的信息被第一數(shù)據(jù)庫命令修改的一個或多個數(shù)據(jù)庫對象,所述第一數(shù)據(jù)庫命令由執(zhí)行針對所述數(shù)據(jù)庫的命令的所述一個或多個數(shù)據(jù)庫服務(wù)器執(zhí)行;以及被第二數(shù)據(jù)庫命令訪問的所述一個或多個數(shù)據(jù)庫對象,所述第二數(shù)據(jù)庫命令由執(zhí)行針對所述數(shù)據(jù)庫的命令的一個或多個數(shù)據(jù)庫服務(wù)器執(zhí)行;至少部分基于被存儲的信息,通過確定該第二數(shù)據(jù)庫命令訪問由第一數(shù)據(jù)庫命令先前修改的數(shù)據(jù)庫對象,確定該第二數(shù)據(jù)庫命令依賴于該第一數(shù)據(jù)庫命令;其中該方法由一個或多個專用的計算設(shè)備完成。按照本申請的另一個方面,公開了一個或多個存儲指令的存儲介質(zhì),當(dāng)這些指令被一個或多個計算設(shè)備執(zhí)行的時候,通過促使實現(xiàn)上述方法,促使實現(xiàn)獲取和處理數(shù)據(jù)庫命令,該數(shù)據(jù)庫命令由一個或多個數(shù)據(jù)庫服務(wù)器針對數(shù)據(jù)庫執(zhí)行。仍然按照本申請的另一個方面,公開了一種在數(shù)據(jù)庫系統(tǒng)上重放數(shù)據(jù)庫命令的方法,所述方法包括存儲表示第二先前執(zhí)行的數(shù)據(jù)庫命令依賴于第一先前執(zhí)行的數(shù)據(jù)庫命令的信息;接收在重放數(shù)據(jù)庫命令期間待執(zhí)行的第二先前執(zhí)行的數(shù)據(jù)庫命令;使用所存儲的信息來確定第二先前執(zhí)行的數(shù)據(jù)庫命令依賴于第一先前執(zhí)行的數(shù)據(jù)庫命令;確定在重放數(shù)據(jù)庫命令期間第一先前執(zhí)行的數(shù)據(jù)庫命令還未被執(zhí)行;響應(yīng)于確定在重放數(shù)據(jù)庫命令期間第一先前執(zhí)行的數(shù)據(jù)庫命令還未被執(zhí)行,等待引起第二先前執(zhí)行的數(shù)據(jù)庫命令被執(zhí)行, 直到第一先前執(zhí)行的數(shù)據(jù)庫命令的執(zhí)行之后;其中該方法由一個或多個專用的計算設(shè)備完成。 仍然按照本申請的另一個方面,公開了一個或多個存儲指令的存儲介質(zhì),當(dāng)這些指令被一個或多個計算設(shè)備執(zhí)行時,通過促使實現(xiàn)上述方法而促使實現(xiàn)在數(shù)據(jù)庫系統(tǒng)上重放數(shù)據(jù)庫命令。
權(quán)利要求
1.一種獲取和處理由一個或多個數(shù)據(jù)庫服務(wù)器針對數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)庫命令的方法, 所述方法包括存儲用于標(biāo)識以下內(nèi)容的信息被第一數(shù)據(jù)庫命令修改的一個或多個數(shù)據(jù)庫對象,所述第一數(shù)據(jù)庫命令由執(zhí)行針對所述數(shù)據(jù)庫的命令的所述一個或多個數(shù)據(jù)庫服務(wù)器執(zhí)行;以及被第二數(shù)據(jù)庫命令訪問的所述一個或多個數(shù)據(jù)庫對象,所述第二數(shù)據(jù)庫命令由執(zhí)行針對所述數(shù)據(jù)庫的命令的一個或多個數(shù)據(jù)庫服務(wù)器執(zhí)行;至少部分基于被存儲的信息,通過確定該第二數(shù)據(jù)庫命令訪問由第一數(shù)據(jù)庫命令先前修改的數(shù)據(jù)庫對象,確定該第二數(shù)據(jù)庫命令依賴于該第一數(shù)據(jù)庫命令。
2.如權(quán)利要求1所述的方法,還包括響應(yīng)于確定第二數(shù)據(jù)庫命令依賴于第一數(shù)據(jù)庫命令,存儲指示,所述指示表示在重放數(shù)據(jù)庫命令期間,阻止第一數(shù)據(jù)庫命令被執(zhí)行,直到第二數(shù)據(jù)庫命令被執(zhí)行之后。
3.如權(quán)利要求1所述的方法,還包括響應(yīng)于確定第二數(shù)據(jù)庫命令依賴于第一數(shù)據(jù)庫命令,存儲指示,所述指示表示在重放數(shù)據(jù)庫命令期間,在第二數(shù)據(jù)庫命令被執(zhí)行之后,觸發(fā)第一數(shù)據(jù)庫命令以被執(zhí)行。
4.如權(quán)利要求1所述的方法還包括,在數(shù)據(jù)庫命令重放期間 接收待執(zhí)行的第二數(shù)據(jù)庫命令;確定在重放期間第一數(shù)據(jù)庫命令還未被執(zhí)行;響應(yīng)于確定第一數(shù)據(jù)庫命令在重放期間還未被執(zhí)行,等待引起第二數(shù)據(jù)庫命令被執(zhí)行;在等待之后,確定在重放期間第一數(shù)據(jù)庫命令已經(jīng)被執(zhí)行;響應(yīng)于確定第一數(shù)據(jù)庫命令在重放期間已經(jīng)被執(zhí)行,引起第二數(shù)據(jù)庫命令被執(zhí)行。
5.如權(quán)利要求4所述的方法,其中確定第一數(shù)據(jù)庫命令還未被執(zhí)行包括 訪問記錄與第一數(shù)據(jù)庫命令相關(guān)聯(lián)的線程最新執(zhí)行的命令的計數(shù)的計數(shù)器。
6.如權(quán)利要求1所述的方法,其中由第一數(shù)據(jù)庫命令先前修改的數(shù)據(jù)庫對象是在一個或多個數(shù)據(jù)庫服務(wù)器執(zhí)行第一數(shù)據(jù)庫命令期間被互斥鎖定的表。
7.一種在數(shù)據(jù)庫系統(tǒng)上重放數(shù)據(jù)庫命令的方法,所述方法包括存儲表示第二先前執(zhí)行的數(shù)據(jù)庫命令依賴于第一先前執(zhí)行的數(shù)據(jù)庫命令的信息; 接收在重放數(shù)據(jù)庫命令期間待執(zhí)行的第二先前執(zhí)行的數(shù)據(jù)庫命令; 使用所存儲的信息來確定第二先前執(zhí)行的數(shù)據(jù)庫命令依賴于第一先前執(zhí)行的數(shù)據(jù)庫命令;確定在重放數(shù)據(jù)庫命令期間第一先前執(zhí)行的數(shù)據(jù)庫命令還未被執(zhí)行; 響應(yīng)于確定在重放數(shù)據(jù)庫命令期間第一先前執(zhí)行的數(shù)據(jù)庫命令還未被執(zhí)行,等待引起第二先前執(zhí)行的數(shù)據(jù)庫命令被執(zhí)行,直到第一先前執(zhí)行的數(shù)據(jù)庫命令的執(zhí)行之后。
8.如權(quán)利要求7所述的方法,其中表示第二先前執(zhí)行的數(shù)據(jù)庫命令依賴于第一先前執(zhí)行的數(shù)據(jù)庫命令的信息不包括在一個或多個數(shù)據(jù)庫服務(wù)器上先前執(zhí)行第一或第二數(shù)據(jù)庫命令的邏輯時間。
9.如權(quán)利要求7所述的方法,其中至少部分基于下述確定產(chǎn)生所述信息在先前執(zhí)行第一先前執(zhí)行的數(shù)據(jù)庫命令和第二先前執(zhí)行的數(shù)據(jù)庫命令期間,第二先前執(zhí)行的數(shù)據(jù)庫命令引用在執(zhí)行第一先前執(zhí)行的數(shù)據(jù)庫命令期間被互斥鎖定的對象。
10.如權(quán)利要求7所述的方法,其中確定在重放數(shù)據(jù)庫命令期間第一先前執(zhí)行的數(shù)據(jù)庫命令還未被執(zhí)行包括訪問記錄與第一數(shù)據(jù)庫命令相關(guān)聯(lián)的線程最新執(zhí)行的命令的計數(shù)的計數(shù)器。
11.一種被配置為獲取和處理由一個或多個數(shù)據(jù)庫服務(wù)器針對數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)庫命令的裝置,所述裝置包括一個或多個處理器;一個或多個存儲設(shè)備,用于存儲在被所述一個或多個處理器執(zhí)行時引起一個或多個處理器完成權(quán)利要求1-6中的任何一個所述的方法的指令。
12.一種被配置為在數(shù)據(jù)庫系統(tǒng)上重放數(shù)據(jù)庫命令的裝置,所述裝置包括 一個或多個處理器;一個或多個存儲設(shè)備,用于存儲被所述一個或多個處理器執(zhí)行時引起所述一個或多個處理器完成權(quán)利要求7-10中的任何一個所述方法的指令。
13.一種獲取和處理由一個或多個數(shù)據(jù)庫服務(wù)器針對數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)庫命令的系統(tǒng),所述系統(tǒng)包括用于存儲用于標(biāo)識以下內(nèi)容的信息的裝置被第一數(shù)據(jù)庫命令修改的一個或多個數(shù)據(jù)庫對象,所述第一數(shù)據(jù)庫命令由執(zhí)行針對所述數(shù)據(jù)庫的命令的一個或多個數(shù)據(jù)庫服務(wù)器執(zhí)行;以及被第二數(shù)據(jù)庫命令訪問的所述一個或多個數(shù)據(jù)庫對象,所述第二數(shù)據(jù)庫命令由執(zhí)行針對所述數(shù)據(jù)庫的命令的所述一個或多個數(shù)據(jù)庫服務(wù)器執(zhí)行;用于至少部分基于被存儲的信息,通過確定該第二數(shù)據(jù)庫命令訪問由第一數(shù)據(jù)庫命令先前修改的數(shù)據(jù)庫對象,確定該第二數(shù)據(jù)庫命令依賴于該第一數(shù)據(jù)庫命令的裝置。
14.如權(quán)利要求13所述的系統(tǒng),還包括用于響應(yīng)于確定第二數(shù)據(jù)庫命令依賴于第一數(shù)據(jù)庫命令存儲指示的裝置,所述指示表示阻止第一數(shù)據(jù)庫命令被執(zhí)行,直到在重放數(shù)據(jù)庫命令期間第二數(shù)據(jù)庫命令被執(zhí)之后。
15.如權(quán)利要求13所述的系統(tǒng),還包括用于響應(yīng)于確定第二數(shù)據(jù)庫命令依賴于第一數(shù)據(jù)庫命令存儲指示的裝置,所述指示表示在重放數(shù)據(jù)庫命令期間,在第二數(shù)據(jù)庫命令被執(zhí)行之后,觸發(fā)第一數(shù)據(jù)庫命令以被執(zhí)行。
16.如權(quán)利要求13所述的系統(tǒng),還包括用于在數(shù)據(jù)庫命令重放期間進(jìn)行以下操作的裝置接收待執(zhí)行的第二數(shù)據(jù)庫命令; 確定在重放期間第一數(shù)據(jù)庫命令還未被執(zhí)行;響應(yīng)于確定第一數(shù)據(jù)庫命令在重放期間還未被執(zhí)行,等待引起第二數(shù)據(jù)庫命令被執(zhí)行;在等待之后,確定在重放期間第一數(shù)據(jù)庫命令已經(jīng)被執(zhí)行;響應(yīng)于確定第一數(shù)據(jù)庫命令在重放期間已經(jīng)被執(zhí)行,引起第二數(shù)據(jù)庫命令被執(zhí)行。
17.如權(quán)利要求16所述的系統(tǒng),其中確定第一數(shù)據(jù)庫命令還未被執(zhí)行包括 訪問記錄與第一數(shù)據(jù)庫命令相關(guān)聯(lián)的線程最新執(zhí)行的命令的計數(shù)的計數(shù)器。
18.如權(quán)利要求13所述的系統(tǒng),其中由第一數(shù)據(jù)庫命令先前修改的數(shù)據(jù)庫對象是在一個或多個數(shù)據(jù)庫服務(wù)器執(zhí)行第一數(shù)據(jù)庫命令期間被互斥鎖定的表。
19.一種用于在數(shù)據(jù)庫系統(tǒng)上重放數(shù)據(jù)庫命令的系統(tǒng),所述系統(tǒng)包括用于存儲表示第二先前執(zhí)行的數(shù)據(jù)庫命令依賴于第一先前執(zhí)行的數(shù)據(jù)庫命令的信息的裝置;用于接收在重放數(shù)據(jù)庫命令期間待執(zhí)行的第二先前執(zhí)行的數(shù)據(jù)庫命令的裝置; 用于使用所存儲的信息來確定第二先前執(zhí)行的數(shù)據(jù)庫命令依賴于第一先前執(zhí)行的數(shù)據(jù)庫命令的裝置;用于確定在重放數(shù)據(jù)庫命令期間第一先前執(zhí)行的數(shù)據(jù)庫命令還未被執(zhí)行的裝置; 用于響應(yīng)于確定在重放數(shù)據(jù)庫命令期間第一先前執(zhí)行的數(shù)據(jù)庫命令還未被執(zhí)行,等待引起第二先前執(zhí)行的數(shù)據(jù)庫命令被執(zhí)行,直到第一先前執(zhí)行的數(shù)據(jù)庫命令的執(zhí)行之后的裝置。
20.如權(quán)利要求19所述的系統(tǒng),其中表示第二先前執(zhí)行的數(shù)據(jù)庫命令依賴于第一先前執(zhí)行的數(shù)據(jù)庫命令的信息不包括在一個或多個數(shù)據(jù)庫服務(wù)器上先前執(zhí)行第一或第二數(shù)據(jù)庫命令的邏輯時間。
21.如權(quán)利要求19所述的系統(tǒng),其中所述信息是至少部分基于下述確定產(chǎn)生的在先前執(zhí)行第一先前執(zhí)行的數(shù)據(jù)庫命令和第二先前執(zhí)行的數(shù)據(jù)庫命令期間,第二先前執(zhí)行的數(shù)據(jù)庫命令引用在執(zhí)行第一先前執(zhí)行的數(shù)據(jù)庫命令期間被互斥鎖定的對象。
22.如權(quán)利要求19所述的系統(tǒng),其中用于確定在重放數(shù)據(jù)庫命令期間第一先前執(zhí)行的數(shù)據(jù)庫命令還未被執(zhí)行的裝置包括用于訪問記錄與第一數(shù)據(jù)庫命令相關(guān)聯(lián)的線程最新執(zhí)行的命令的計數(shù)的計數(shù)器的裝置。
全文摘要
提供了一種方法、設(shè)備和計算機可讀介質(zhì),用于在重放數(shù)據(jù)庫命令期間在不嚴(yán)格地保持?jǐn)?shù)據(jù)庫命令的全局順序的情況下保持?jǐn)?shù)據(jù)依賴性。獲取處理獲取由生產(chǎn)系統(tǒng)執(zhí)行的數(shù)據(jù)庫命令的工作負(fù)載。所獲取的工作負(fù)載包括標(biāo)識在生產(chǎn)系統(tǒng)執(zhí)行數(shù)據(jù)庫命令期間直接或間接地引用的數(shù)據(jù)庫對象的對象標(biāo)識符。所獲取的工作負(fù)載還包括在執(zhí)行命令期間數(shù)據(jù)庫對象是否可能被讀取或?qū)懭氲闹甘?。處理該工作?fù)載以確定在執(zhí)行命令期間被訪問的對象在執(zhí)行一個或多個其它命令期間被先前修改。在測試數(shù)據(jù)庫系統(tǒng)上的重放處理阻止該命令被重放,直到一個或多個其它命令已經(jīng)被重放而修改了該對象之后。
文檔編號G06F17/30GK102236705SQ20111016290
公開日2011年11月9日 申請日期2011年5月5日 優(yōu)先權(quán)日2010年5月6日
發(fā)明者B·戴奇維勒, E·帕帕多瑪諾拉基斯, J·克萊因, K·戴斯, L·賈拉尼斯, R·科勒, S·布蘭納瓦塔納喬克, 王宇君 申請人:甲骨文國際公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1