欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于并發(fā)數(shù)據(jù)庫管理系統(tǒng)表操作的方法和設(shè)備的制作方法

文檔序號:6419299閱讀:187來源:國知局

專利名稱::用于并發(fā)數(shù)據(jù)庫管理系統(tǒng)表操作的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及以這卸載和裝入數(shù)據(jù)庫表的處理。本發(fā)明尤其涉及增加數(shù)據(jù)庫表卸載和裝入的速度的并行處理技術(shù)的應(yīng)用。本發(fā)明更進(jìn)一步涉及在對稱多處理(SMP)環(huán)境中應(yīng)用于卸載和裝入數(shù)據(jù)庫表的并行處理技術(shù)。
背景技術(shù)
:現(xiàn)代數(shù)據(jù)庫管理系統(tǒng)日益受到保存更大的數(shù)據(jù)存儲量的要求。此外,由于數(shù)據(jù)庫的增大,現(xiàn)代數(shù)據(jù)庫內(nèi)的結(jié)構(gòu)越來越復(fù)雜。一般來說,數(shù)據(jù)庫以表格形式保存數(shù)據(jù),每個表保存一或多行相關(guān)數(shù)據(jù)。例如,一個基本數(shù)據(jù)庫表可以保存多個,例如,具有屬于一團(tuán)體的個人的名稱、社會保險號、地址和電話的行。當(dāng)該團(tuán)體增加新成員時該數(shù)據(jù)庫增大,而當(dāng)包括成員的附加信息時該數(shù)據(jù)庫不但增大而且還變得復(fù)雜。例如,更大更復(fù)雜的數(shù)據(jù)庫除了保存以上信息外,還可以保存可能為圖形格式的、示出俱樂部成員的居住地的地圖。通過包括工作單位地址和示出工作單位地點的附加圖形體圖,該數(shù)據(jù)庫再增加大小和復(fù)雜度。通過保存的數(shù)據(jù)庫其它表或行指針,還可能增加該數(shù)據(jù)庫表的復(fù)雜度。例如,指向在另一表中保存的一組同事的指針,指向鄰近團(tuán)體成員的指針,或指向可以保存附加成員數(shù)據(jù)的任意多項的指針。常規(guī)的數(shù)據(jù)庫管理系統(tǒng)(DBMS)通過分配存儲塊來提供建造數(shù)據(jù)庫表的空間。一旦定義了表,DBMS就會分配存儲相關(guān)數(shù)據(jù)行所必需的存儲塊。例如,如果一個表將建造成含有100,000行,并且該表的行被限定為使得每一存儲塊可以裝下100行,那么DBMS就會分配1,000塊來建造該表。DBMS系統(tǒng)一般以鄰接的存儲塊組分配存儲塊。一個鄰接的被分配的存儲塊組通常稱為一個盤區(qū)。一般來說,各個盤區(qū)的大小是變化的。使用上述示例,DBMS可以利用1,000個存儲塊構(gòu)成的單一盤區(qū)、500個存儲塊構(gòu)成的2個盤區(qū)或盤區(qū)大小的其它組合,來分配所需要的1,000個存儲塊以便建造該表。一旦分配了所需要的存儲塊,就在利用這些分配的存儲塊的表的行中存儲數(shù)據(jù)。在建造數(shù)據(jù)庫之后,可以添加附加數(shù)據(jù)給該表,并且該DBMS會按需要分配附加的存儲塊。例如,如果用戶給該表添加250行,使用以上參數(shù),則需要分配附加的3個存儲塊。在建造數(shù)據(jù)庫之后,也可以刪除數(shù)據(jù)庫中的信息。此時,行刪除通過使用SQL發(fā)生以刪除表中的行。例如,用戶可以從存儲塊1刪除50行、從存儲塊20刪除40行和從存儲塊60刪除30行。當(dāng)發(fā)生這種情況時,會使得在該表中存在比保存出現(xiàn)在該表中的數(shù)據(jù)所需的存儲塊更多的存儲塊。此外,該數(shù)據(jù)庫內(nèi)的數(shù)據(jù)會被更新。例如,使用上述數(shù)據(jù)庫表,還沒有參加工作的團(tuán)體成員可以在保存他/她的名稱、地址、社會保險號和電話號碼的分配表中占有一行。在參加工作時,該行將更新為包括工作單位地址和相關(guān)信息的行。但是,如果作為更新的結(jié)果添加實質(zhì)性的信息量,那么原來的行可能沒具有足夠數(shù)據(jù)存儲塊來保存更新的信息。當(dāng)一行被更新并且原來的行沒具有足夠空間保存全部更新的信息時,發(fā)生行移動。當(dāng)這種情況發(fā)生時,行被移動到有更多空間的存儲位置,并且在原來的行駐留的存儲塊中放一指針,該指針設(shè)置成指向移往的行的存儲位置。如果表存在實質(zhì)性更新并且沒有足夠的空間分配給原來的行,則引起大量行移動。在一個存儲塊時常沒有足夠的空間保存更新的行。在這種情況下,該行被移往和原來的行駐留的地方完全不同的存儲塊,在原來的行的位置放一指向該不同的存儲塊中的更新的行的指針。行移動的時候,引起被稱為存儲碎片現(xiàn)象。存儲碎片引起數(shù)據(jù)庫信息的檢索時間大大增加,原因是除了讀取存儲塊外,還必須讀取和解釋指針。在行移動到另一存儲塊時,為了檢索行的具體信息,必須讀取至少兩個存儲塊(包含指針的存儲塊和包含移動的和被破成存儲碎片的行)。數(shù)據(jù)庫表中的其它結(jié)構(gòu)型的改變也會引起存儲碎片和相關(guān)的效率問題(例如,行鏈接)。數(shù)據(jù)庫管理員(DBA)經(jīng)常會對提供關(guān)于表的條件的信息的DBMS表進(jìn)行分析。例如,數(shù)據(jù)庫管理員可能察看關(guān)于刪除的行的數(shù)量的信息以便弄清有關(guān)于有多少個存儲塊保存著刪除的行的效率信息。作為另一個示例,數(shù)據(jù)庫管理員可能察看表的多少行已經(jīng)由其它處理進(jìn)行了移動和被破成存儲碎片了。如果出現(xiàn)很多存儲碎片,則指示可以更有效地分配存儲塊大小和行空間,并且在進(jìn)行的表數(shù)據(jù)檢索效率低。出現(xiàn)這種情況時,數(shù)據(jù)庫管理員可能會決定重建該表。在創(chuàng)建表時,DBA通過設(shè)置自由存儲塊的百分率(PCTFREE)或使用過的存儲塊的百分率(PCTUSED),作出一個關(guān)于數(shù)據(jù)庫表的結(jié)構(gòu)的判定。當(dāng)DBMS用行或表信息裝填每一存儲塊時,它會保留至少等于百分率PCTFREE的一個自由存儲塊的百分率。DBA依據(jù)如何使用數(shù)據(jù)庫表來設(shè)置PCTFREE變量。例如,如果表要經(jīng)常更新,那么會設(shè)立附加PCTFREE,以便有足夠的空間用來允許任何必要的行移動發(fā)生在同一存儲塊內(nèi)。如以上所討論的那樣,統(tǒng)一存儲塊中的行移動不會使得表變成存儲碎片。移動過但未變成存儲碎片的行以讀取單一存儲塊檢索,而不用像移動過的行變成存儲碎片時出現(xiàn)的那樣,進(jìn)行讀取存儲塊、解釋指針和讀取第二存儲塊(或更多的存儲塊)的繁瑣處理。因此,適當(dāng)?shù)腜CTFREE設(shè)置使得雖然可以修改數(shù)據(jù)庫表,但DBMS性能保持不變。PCTUSED是允許DBA控制DMBMS表的結(jié)構(gòu)的另一參數(shù)。DBMS防止附加行放到存儲塊中,除非那一存儲塊的百分率降低到PCTUSED之下。PCTUSED在這樣一種意義下不同于PCTFREE,即雖然如果存在更新則存儲塊可以用,但它不能用于插入新行,除非存儲塊中用過的百分率低于PCTUSED。涉及大量OLTP活動(插入、更新和刪除)的DBMS表隨著時間的推移,可能會經(jīng)歷行移動、存儲碎片、行鏈接等。此外,在第一次建造時各種數(shù)據(jù)庫表可能不需要具有適當(dāng)?shù)脑O(shè)置(例如PCTFREE、PCTUSED),或者數(shù)據(jù)庫表的要求發(fā)生變化,導(dǎo)致表的附加移動、刪除或存儲碎片。而這又導(dǎo)致數(shù)據(jù)檢索性能和空間使用惡化。DBA會執(zhí)行分析以確定該表是否有效地存儲著數(shù)據(jù)。結(jié)果,可能確定出來一個或多個DBMS表在存儲和檢索數(shù)據(jù)方面效率低下。重新組織(重建)該表是解決該問題的一個解決方案。為了得到最大的性能,需要將該表重建(即,將數(shù)據(jù)卸載到輔助空間并重建該表的新實例)。這種處理避免了很多上面提到的不必要的影響,原因是變成存儲碎片的行以無存儲碎片的方式卸載和存儲在重建表中。結(jié)構(gòu)良好的數(shù)據(jù)庫使得有效地使用磁盤空間。它們需要更少的存取時間、減少了正常處理所需的時間、并且給用戶提供了更好的響應(yīng)時間。即使Oracle和其它現(xiàn)代數(shù)據(jù)庫系統(tǒng)使用有效的數(shù)據(jù)安排邏輯,隨著時間的推移,正?;顒右矔鸫疟P上的數(shù)據(jù)的實際配置降級,并且增加空間需求。這導(dǎo)致為了執(zhí)行表掃描、數(shù)據(jù)庫備份和其它功能,需要使用過多空間和額外的時間。部分空頁和未使用的盤區(qū)空間提供給額外的空間使用。此外,如果非順序的行和盤區(qū)交錯問題不周期性地解決,那么它們會嚴(yán)重降低性能。保證數(shù)據(jù)庫保持高效(增加生產(chǎn)率)的一種方法是有規(guī)律地對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行重新組織。目前,有用于重新組織DBMS表的產(chǎn)品。但是,即使用自動重新組織工具,數(shù)據(jù)庫表的重新組織也可能需要大量的時間。執(zhí)行重新組織所需要的時間對需要數(shù)據(jù)庫存取的商店的收入和生產(chǎn)率具有實質(zhì)性的影響。例如,當(dāng)數(shù)據(jù)庫離線時,某些商店可能受到大約一小時$100,000的損失(例如參見1997年12月的Oracle雜志,“ReorgsinaNon-StopShop”)。因此,執(zhí)行重新組織的效率和速度的任何改進(jìn)都會增加競爭力和收益率。發(fā)明概述本發(fā)明人已經(jīng)實現(xiàn)了提供完全并行的、支持?jǐn)?shù)據(jù)庫卸載和裝入的操作的需要,其中的操作會增加執(zhí)行表卸載和表裝入之一或兩者的任何數(shù)據(jù)庫操作的速度。因此,本發(fā)明的目的是提供允許并行數(shù)據(jù)庫表卸載的并行處理技術(shù)。本發(fā)明的另一目的是提供一種在對稱多處理(SMP)環(huán)境中利用并行處理技術(shù)卸載和裝入數(shù)據(jù)庫表的方法。本方面進(jìn)一步的目的是提供一種方法,用于在數(shù)據(jù)庫并行卸載和裝入中避免產(chǎn)生瓶頸。本發(fā)明的更進(jìn)一步的目的是通過利用本發(fā)明的并行處理技術(shù),增加執(zhí)行數(shù)據(jù)庫表的重新組織的速度。這些和其它目的通過執(zhí)行數(shù)據(jù)庫表的并行卸載的方法實現(xiàn),該方法包括步驟運行多個線程來處理該數(shù)據(jù)庫表;分配每個數(shù)據(jù)庫表與所述線程對應(yīng);以及通過對應(yīng)的線程的一種處理卸載各自數(shù)據(jù)庫表。該方法允許表卸載處理利用對稱多處理環(huán)境以明顯地改善數(shù)據(jù)庫表的卸載速度。本發(fā)明包括表數(shù)據(jù)的并行裝入的方法,包括將數(shù)據(jù)裝入到數(shù)據(jù)庫表的步驟,該方法還包括步驟確定用于將數(shù)據(jù)裝入到數(shù)據(jù)庫表的X個線程;創(chuàng)建X個臨時表,每個臨時表對應(yīng)于一組存儲在輸出目錄中的數(shù)據(jù);運行用于裝入每個臨時表的SQL*LOADERTM處理;以及借助對應(yīng)的SQL*LOADERTM處理,以將存儲在對應(yīng)輸出目錄中的數(shù)據(jù)裝入每個臨時表。附圖的簡要描述當(dāng)本發(fā)明的一個完整的評價以及本發(fā)明所附帶的很多優(yōu)點通過下列聯(lián)系附圖考慮的詳細(xì)描述,變得更容易明白時,它們將容易獲得,其中圖1是圖解數(shù)據(jù)庫快速卸載/裝入(PDL)程序的流程圖;圖2是圖解非并發(fā)數(shù)據(jù)庫卸載程序的迭代性質(zhì)的流程圖;圖3是圖解適用于根據(jù)本發(fā)明的數(shù)據(jù)庫表的并發(fā)裝入和卸載的高級處理的流程圖;圖4是在單個輸出盤上執(zhí)行并行處理的說明;圖5是根據(jù)本發(fā)明使用多個輸出盤執(zhí)行并行處理的說明;圖6是根據(jù)本發(fā)明的保存數(shù)據(jù)庫表和輸出目錄的多個存儲裝置的說明;圖7是圖解根據(jù)本發(fā)明的輸出(卸載)處理的流程圖;圖8是根據(jù)本發(fā)明的目標(biāo)表屬性頁的說明;圖9圖解根據(jù)本發(fā)明的并行查詢表也;圖10是圖解根據(jù)本發(fā)明的并行裝入處理的流程圖;圖11圖解根據(jù)本發(fā)明的具有并行輸出階段和并行直接裝入的并發(fā)表重新組織;圖12是圖解適用于根據(jù)本發(fā)明的卸載/裝入處理的安全/故障恢復(fù)系統(tǒng)的流程圖;以及圖13是圖解根據(jù)本發(fā)明的高級表名稱和裝入處理的流程圖。本發(fā)明的詳細(xì)描述在TS重新組織中的并發(fā)卸載/裝入選擇本發(fā)明人開發(fā)出了一套新的并發(fā)卸載/裝入方法。這套方法將在PlatinumTSREORG2.1.0版中引入以增強表空間(tablespace)的重新組織速度的卸載/裝入選擇中利用。以前,在TSREORG(TS改組)最快的重新組織表空間的方式是與并行直接裝入選擇協(xié)作使用快速卸載?,F(xiàn)在參考附圖,其中在整個附圖文件中,相同的參考號指的是同一或?qū)?yīng)的部分,更具體地說,其圖1是圖解數(shù)據(jù)庫快速卸載/裝入程序的流程圖。在步驟100中,單個快速卸載處理卸載每個表,步驟100a、…、110n圖解被利用來裝入表的并行直接裝入。圖2是詳細(xì)描述快速卸載的流程圖。在步驟200中,在表上執(zhí)行快速卸載??焖傩遁d從表中讀取和存儲數(shù)據(jù)。在步驟210中,確定是否將卸載數(shù)據(jù)庫中的下一個表,并重復(fù)該處理直到卸載完每個表為止。如圖1和圖2的處理所說明的那樣,在并行直接裝入中,同時只能對一個表工作時,在卸載時使用一個單一處理而在裝入時使用多個SQL*LOADERTM(一個Oracle實用程序)處理卸載這些表。例如,當(dāng)卸載包含大量表的表空間時,TSREORG在處理下一表之前必須等待一個表被完全卸載。圖3是圖解本發(fā)明的并發(fā)裝入和卸載選擇,它使用戶能夠利用多處理器機器并發(fā)地卸載(步驟300)和裝入(步驟305)多個表。這種方法在表空間既包含大表又包含小表時特別有效。在TSREORG卸載和裝入一個大表的同時,還可以同時卸載和裝入幾個小表。本發(fā)明的原理也可以推廣到多個索引和/或約束的并發(fā)建造。本發(fā)明的并發(fā)卸載/裝入處理最好在具有下列特征的計算和數(shù)據(jù)庫環(huán)境中實踐(1)對稱多處理計算環(huán)境—合適的計算硬件包含多個處理器并且必須安裝在一個對稱多處環(huán)境中。主機的對稱處理能力越高,潛在的性能就越高。多處理器計算機的一種類型是對稱多處理計算機。SMP計算機通常具有2至16個處理器,它們?nèi)抗蚕碓撚嬎銠C的單一存儲器資源和共享的存儲裝置。SMP的能力依賴于可用的處理器的數(shù)量。有更多的處理器,則本發(fā)明允許并行地執(zhí)行更多的查詢和裝入。(2)跨越多個磁盤劃分的數(shù)據(jù)文件——卸載重新組織的表空間的數(shù)據(jù)文件必須存儲在不同的物理磁盤上。這個要求是從本發(fā)明的并發(fā)卸載/裝入處理獲得全部利益所必需的。(3)在磁盤上定義輸出目錄——用于并發(fā)卸載/裝入選擇處理的多個線程將少于或等于輸出目錄的數(shù)量。這些目錄最好當(dāng)駐留在多個獨立的物理磁盤上時利用。由于物理存儲磁盤的受到限制的帶寬,即使具有高SMP能力和高效的并行操作,數(shù)據(jù)移動也可能經(jīng)歷涌塞,或斷續(xù)速度的降低。在物理磁盤不能快速適應(yīng)有多個CPU產(chǎn)生的同時讀和寫請求時,發(fā)生SMP的幾個限制之一。中斷數(shù)據(jù)的另一個來源是磁盤爭用,在并行處理中更是如此。當(dāng)多個處理試圖存取和改變數(shù)據(jù)庫時,磁頭每次只能服務(wù)于一個處理的請求,而導(dǎo)致別的操作等待。兩個處理想同時存取同一磁盤的情況稱為磁盤爭用。磁盤爭用導(dǎo)致數(shù)據(jù)阻塞或涌塞。由于并行處理使用多個CPU在存儲器和磁盤之間移動數(shù)據(jù),因此定義多個磁盤以便這多個CPU能夠快速移動數(shù)據(jù)而又不中斷或等待是非常重要的。消除涌塞的一種方式是通過將數(shù)據(jù)分劃成多個磁盤。分劃數(shù)據(jù)是跨越多個磁盤驅(qū)動器進(jìn)行物理地撤布數(shù)據(jù)、以降低磁盤I/O帶寬的和磁盤爭用的限制作用的處理。你所定義(分劃)用于數(shù)據(jù)輸出的磁盤越多,那么降低I/0涌塞越多,這產(chǎn)生更快速的并行操作。圖4說明使用一個輸出盤的并行處理。即使服務(wù)器的查詢協(xié)調(diào)器將該查詢斷開成兩個隔開的操作,磁頭每次也只能服務(wù)于一個掃描請求,而引起別的操作等待或涌塞。在這個示例中,單一盤的I/O限制抵消了服務(wù)器的并行操作特征的目的。解決這一問題依賴于恰當(dāng)?shù)拇疟P分配。圖5說明了恰當(dāng)?shù)拇疟P分配和使用多個輸出盤(分劃過的數(shù)據(jù))的并行處理的一個實施例。該并行處理同時而不是一個處理等待另一個處理地運行。在TSREORG中使用并發(fā)線程本發(fā)明的并發(fā)裝入/卸載處理利用多個定義的線程,這些線程確定多個將要在同一時間進(jìn)行卸載/裝入的表。換句話說,并發(fā)線程的數(shù)量等于卸載和裝入階段中TSREORG運行的處理數(shù)量。每一個處理在一個表上工作。所定義的線程數(shù)量由多個輸出目錄數(shù)限制。圖6圖解了具有三個隔開的磁盤的SMP計算環(huán)境310a、310b和310c。每個磁盤都存儲數(shù)據(jù)文件并且都具有輸出目錄320a、320b和320c。在所圖解的環(huán)境中,并發(fā)裝入/卸載將為每個卸載表定義三個線程(每個輸出目錄一個)。并發(fā)卸載階段圖7是圖解本發(fā)明的并發(fā)卸載階段的流程圖。在步驟400中,確定了在當(dāng)前計算環(huán)境中利用的線程數(shù)。將要利用的線程數(shù)是用戶借助GUI或其它輸入裝置提供的。但是線程數(shù)也限制為最大等于駐留在多個獨立的磁盤驅(qū)動器上的輸出目錄的數(shù)量。例如,現(xiàn)在TSREORG利用目標(biāo)表屬性頁進(jìn)入、改變或刪除在表空間改組期間為卸載數(shù)據(jù)和其它輸出文件指定位置的輸出目錄路徑(參見圖8)。在表空間改組的輸出階段,改組實用程序從表空間卸載數(shù)據(jù)描述語言(DDL)和表數(shù)據(jù),并將其輸出到指定的目錄。輸出用的主目錄路徑是在改組期間為卸載的DDL和數(shù)據(jù)指定位置的目錄路徑。目標(biāo)表屬性頁也被利用來進(jìn)行下列工作添加主輸出目錄。刪除主輸出目錄。修改主輸出目錄。如果在改組實用程序正在卸載數(shù)據(jù)的同時,輸出目錄中沒有足夠的空間可用或者輸出文件的大小達(dá)到了ulimit,那么改組實用程序?qū)⒂嘞碌臄?shù)據(jù)輸出到下一個指定的輸出目錄。如果沒有指定另一個輸出目錄,那么TSREORG將不執(zhí)行重新組織。這去掉了在大多數(shù)UNIX平臺上通用的2G字節(jié)限制。既然壓縮數(shù)據(jù)不能分離,本方法就不能應(yīng)用于壓縮輸出方法(下文描述)。在步驟410中,TSREORG運行與所定義的線程數(shù)同樣多的快速卸載處理。這被稱為第一快速卸載處理集。在步驟420中,給每個處理指定一個表。每個快速卸載處理由對應(yīng)的線程執(zhí)行,和將指定的表卸載到獨立的輸出目錄之一中(步驟430)。為了在其上卸載數(shù)據(jù)的目錄上進(jìn)行搜索,每個線程度檢查所有輸出目錄并選擇可以容納創(chuàng)建的輸出文件的最小可用目錄。這樣的方法稱為為輸出目錄尋找最佳適配。一旦線程找到了最佳適配目錄,就要求那個目錄的權(quán)利,因此下一個線程必須選擇另一個。在其它應(yīng)用使用同一文件系統(tǒng)上的空間的情況下,線程不得裝入其全部數(shù)據(jù)到其所選的最佳適配目錄。如果發(fā)生這種事,改組實用程序?qū)⑤敵鑫募殖啥鄠€輸出文件,并試圖將其寫到另一個輸出目錄上。如果不存在替換的輸出目錄,或者磁盤滿,則線程終止并且其余的線程之一卸載其余的數(shù)據(jù)。用戶可以估算用戶輸出文件的大小,以便在輸出目錄中為這些文件分配足夠的空間。為了估算輸出文件的大小,將對象的當(dāng)前分配單元除以將要被利用的線程數(shù)。改組實用程序利用如圖9所示的并行查詢表屬性頁,以便和對象的任何現(xiàn)有并行參數(shù)一起填這些域。例如,如果表使用并行參數(shù)是初次創(chuàng)建或修改,則該表的并行參數(shù)可能存在。這些參數(shù)保留在表的數(shù)據(jù)描述語言(DDL)和數(shù)據(jù)目錄中。如果一個對象的并行參數(shù)已經(jīng)存在,則改組實用程序自動將數(shù)據(jù)查詢分離,并且用戶不必在并行查詢表屬性頁中指定值。否則,改組實用程序根據(jù)并行查詢表屬性頁中的參數(shù)集分離該查詢。對于本發(fā)明的全部優(yōu)點,輸出目錄的數(shù)量等于或大與線程數(shù)量。此外,每個輸出目錄應(yīng)該駐留在隔開的磁盤上以避免磁盤I/O涌塞。如以上所討論的那樣,因為有同時向同一磁盤寫(卸載)的一個以上的處理的可能性,如果在同一磁盤上放了一個以上的輸出目錄,則可能發(fā)生I/O涌塞。當(dāng)?shù)谝唤M線程的第一快速卸載處理完成時,TSREORG檢查該處理是否成功地終止(步驟440),如果是,則運行卸載下一個表的下一個快速卸載處理(步驟470)。按這種方式,由在各自的線程中執(zhí)行的處理卸載每個表。每個線程是獨立的,因此,如果一個線程具有一分配給大表的處理,那么其它處理在運行關(guān)于下一個表的處理之前、不必等待到該大處理完成。否則,如果在表卸載期間發(fā)生問題,TSREORG顯示處理失敗的原因以及工作登記文件格式的最終的快速卸載登記文件(步驟450)。使用TSREORG的內(nèi)部程序卸載發(fā)生過問題的表。這個卸載程序不作為一個獨立的處理運行,因此必須在TSREORG能夠繼續(xù)其余表的并發(fā)卸載之前完成。一旦成功地卸載了所有表,就結(jié)束該卸載處理。還可以采用性能指計(估計的或交互式的)來顯示卸載/裝入操作的速度和被耗用的磁盤空間量。一旦卸載處理結(jié)束,TSREORG繼續(xù)表空間重新組織的下一步,那是表空間的其它對象的輸出(步驟485)其它對象的輸出包括包含全部索引、觸發(fā)器、約束和主鍵或唯一鍵(除了表和族以外的每個)的用于存儲表空間的DDL的文件的創(chuàng)建。最后,TS重新組織在載卸載表上執(zhí)行刪除(步驟490),然后執(zhí)行將被卸載的數(shù)據(jù)裝入到新的表空間的并發(fā)裝入(步驟495)。并發(fā)裝入階段在刪掉全部表空間對象之后,TSREORG開始重新組織的裝入(輸入)階段。在圖10的流程中圖解了并發(fā)裝入階段。在步驟600中,TSREORG通過創(chuàng)建表以存儲數(shù)據(jù)來開始裝入階段。TSREORG依次創(chuàng)建和指定的線程數(shù)量同樣多個表。載卸載階段,指定的線程數(shù)量等于線程的數(shù)量。在創(chuàng)建了第一組表之后,TSREORG同時運行用于裝入每個對應(yīng)表的數(shù)據(jù)的SQL*LOADERTM處理。所運行的處理的數(shù)量等于線程數(shù)量,每個SQL*LOADERTM處理裝入一個對應(yīng)表的數(shù)據(jù),從輸出目錄讀取表數(shù)據(jù)并將該數(shù)據(jù)裝入到對應(yīng)的表中(步驟610)。改組應(yīng)用程序使用輸出文件中的DDL重建對象,以消除存儲碎片并優(yōu)化存儲參數(shù)。改組應(yīng)用程序調(diào)整并行線程中的多個CPU,以便將將該數(shù)據(jù)裝入回對象,導(dǎo)致重新組織表空間。在這些處理結(jié)束后,TSREORG檢查該數(shù)據(jù)是否成功地裝入回表以及插入的行數(shù)是否正確(步驟620)。如果裝入期間發(fā)生錯誤或由SQL*LOADERTM插入的行數(shù)不正確,那么TSREORG自動切換到內(nèi)部TSREORG裝入函數(shù),以便在繼續(xù)下一表之前順序裝入數(shù)據(jù)(步驟630)。如果SQL*LOADERTM處理沒有錯誤存在,或者在內(nèi)部裝入無錯誤地終止之后,TSREORG創(chuàng)建下一個表(步驟650),并且依舊并發(fā)地運行的另一個SQL*LOADERTM處理,以便裝入這個表的數(shù)據(jù)(重復(fù)步驟610)。如在圖11圖所示的并發(fā)表重新組織中圖解的那樣,并發(fā)直接裝入調(diào)用多個CPU同步地將輸出文件裝入回對象的數(shù)據(jù)文件,其中的每個CPU執(zhí)行獨立的SQL*LOADERTM會話。當(dāng)SQL*LOADERTM寫這些數(shù)據(jù)文件時,改組應(yīng)用程序使用最佳配合法,該方法選擇那些具有足夠空間來容納引入數(shù)據(jù)的分劃目錄。然后,該改組應(yīng)用程序繼續(xù)在所選擇的目錄列表中使用最佳配合法,并且選擇可以容納線程的全部引入數(shù)據(jù)的最小數(shù)據(jù)文件。每個線程裝入其數(shù)據(jù)到盡可能多的數(shù)據(jù)文件的自由空間中。如果在裝入階段發(fā)生了致命錯誤,或者重新組織工作由于任何原因取消或刪除,那么失敗的工作變成了需要恢復(fù)的工作。如圖12所示,在工作已經(jīng)失敗后(步驟1105),TSREORG自動跳過在失敗之前已經(jīng)成功地創(chuàng)建和裝入的所有表(步驟1110),并且只并行裝入不存在的表或沒有裝完的表(步驟1115)。如圖13所示,在裝入階段,TSREORG首先借助臨時名稱創(chuàng)建表(步驟1300)。在該數(shù)據(jù)已經(jīng)重新裝入之后,該臨時表被重新命名為表原來的名稱(步驟1320)。最后,創(chuàng)建關(guān)于該表的主約束和索引(步驟1330)。這使得TSREORG認(rèn)識在失敗之前未完成輸入的表,并刪掉全部臨時表和重新開始對那些表的裝入(參見圖11的處理1115A)。當(dāng)使用并發(fā)卸載/裝入選項時,TSREORG自動選擇選項在所有表創(chuàng)建之后創(chuàng)建所有索引/約束。在成功地創(chuàng)建所有表和將它們的數(shù)據(jù)重新裝入到這些表之后,創(chuàng)建該表空間的這些索引和約束。TSREORG中的并發(fā)索引創(chuàng)建并發(fā)索引創(chuàng)建是可以用在表中或者表空間重新組織中、以便在重新組織期間增加索引創(chuàng)建速度的一個選項。在常規(guī)表或表空間重新組織中,在表創(chuàng)建并且數(shù)據(jù)裝入回該表之后一個接一個地創(chuàng)建索引。在表空間改組,用戶可以選擇并發(fā)索引創(chuàng)建選項。在這種情況下,TSREORG將并發(fā)地創(chuàng)建索引(缺省行為是順序索引創(chuàng)建)。這將允許TSREORG收集一個輸出文件中的所有索引和約束,并且當(dāng)已經(jīng)創(chuàng)建了表空間的所有表(在表空間重新組織情況下)時,或重新組織的表(在重新組織表的情況下)開始并發(fā)地創(chuàng)建這些索引和約束。當(dāng)選擇這一選項時,在索引/約束創(chuàng)建階段用戶必須指定將用作并發(fā)地運行的處理數(shù)量的線程數(shù)量。當(dāng)關(guān)于索引的輸入階段開始時,TSREORG運行與指定的線程數(shù)量相同的索引創(chuàng)建處理。當(dāng)完成第一組線程的第一索引處理時,運行下一個索引創(chuàng)建處理,并且在其它線程結(jié)束后類似地運行后續(xù)索引創(chuàng)建處理,直到創(chuàng)建完全部索引和約束為止。如果在一個索引或約束創(chuàng)建時發(fā)生錯誤,那么TSREORG登記該錯誤并將失敗的索引的DDL寫入一個文件。然后用戶可以手工編輯和糾正問題。本發(fā)明已經(jīng)參考與Oracle數(shù)據(jù)庫相聯(lián)系的實現(xiàn),并且用該實現(xiàn)的術(shù)語進(jìn)行了描述。但是所描述的這些處理可以等效地應(yīng)用于其它數(shù)據(jù)庫產(chǎn)品和客戶數(shù)據(jù)庫安裝。例如,可以利用另一個能夠讀取存儲在輸出目錄的表數(shù)據(jù)和裝入數(shù)據(jù)到新表空間的程序,代替利用Orcle應(yīng)用程序SQL*LOADERTM。本發(fā)明可以方便地使用根據(jù)本發(fā)明公開的原理編程的常規(guī)通用或特別的數(shù)字計算機或微處理器實現(xiàn),就如計算機領(lǐng)域的普通技術(shù)人員所明白的那樣。就如軟件領(lǐng)域的普通技術(shù)人員所明白的那樣,基于本發(fā)明的公開的原理,熟練的程序員可以很容易地制作適當(dāng)?shù)能浖幋a。本發(fā)明還可以通過制作成具體的集成電路或通過互連常規(guī)元件電路的適當(dāng)網(wǎng)絡(luò)實現(xiàn),就如本領(lǐng)域的普通技術(shù)人員所明白的那樣。本發(fā)明包括在其上/中存儲指令的介質(zhì)(媒體)的計算機程序產(chǎn)品,這種介質(zhì)(媒體)可以用于編程計算機以執(zhí)行本發(fā)明的處理。存儲介質(zhì)可以包括,但不限于包括軟盤、光盤、DVD、CD-ROM、微型驅(qū)動器和磁光盤在內(nèi)的任何類型的磁盤,ROM,RAM,EPROM,EEPROM,DRAM,VRAM,快閃存儲裝置,磁或光卡,毫微級系統(tǒng)(nanosystem)(包括分子存儲器IC),或者適合于存儲指令和/或數(shù)據(jù)的任何類型的媒體或裝置。本發(fā)明包括存儲在任何一個計算機可讀介質(zhì)(媒體)上的軟件,用于控制通用/特殊計算機或微處理器的硬件,以及用于使這種計算機或微處理器能夠與人類用戶或利用本發(fā)明的成果的其它機制交互。這樣的軟件可以包括,但不限于裝置驅(qū)動器、操作系統(tǒng)、數(shù)據(jù)庫引擎和產(chǎn)品以及用戶應(yīng)用程序。最后,這樣的計算機可讀媒體還包括軟件,用于按上述執(zhí)行本發(fā)明。包括在通用/特殊計算機或微處理器的可程程序(軟件)中的是用于實現(xiàn)本發(fā)明的理論的軟件模塊,它包括但不限于用戶輸入和關(guān)于并行處理的多個線程的確定的檢索、運行線程、卸載數(shù)據(jù)庫表、確定成功、初始化內(nèi)部重新組織處理、輸出數(shù)據(jù)庫對象、壓縮卸載數(shù)據(jù)、監(jiān)視本發(fā)明的處理以及利用表裝入實用程序和根據(jù)本發(fā)明的處理的結(jié)果的顯示、存儲或通信設(shè)置并發(fā)裝入環(huán)境。顯然,可以按照上述理論對本發(fā)明進(jìn)行多處修改和該變。因此,應(yīng)該理解,在附屬的權(quán)利要求的范圍之內(nèi),本發(fā)明可以不象這里具體描述的那樣實現(xiàn)。權(quán)利要求1.一種卸載數(shù)據(jù)庫表的方法,該方法包括步驟運行多個線程來處理該數(shù)據(jù)庫表;分配所述數(shù)據(jù)庫表的各自一個與所述線程對應(yīng);以及通過對應(yīng)的線程的處理卸載各自數(shù)據(jù)庫表。2.根據(jù)權(quán)利要求1的方法,其中所述運行步驟包括步驟檢索由用戶輸入的線程數(shù)X;識別位于多個獨立的保存所述數(shù)據(jù)庫表的存儲裝置上的輸出目錄數(shù);將X限制為所識別到的輸出目錄的數(shù);以及利用X作為所述線程數(shù)。3.根據(jù)權(quán)利要求2的方法,其中所述存儲裝置是磁盤驅(qū)動器。4.根據(jù)權(quán)利要求1的方法,其中所述卸載步驟包括步驟從各自數(shù)據(jù)庫表讀取數(shù)據(jù)塊并將讀取的數(shù)據(jù)塊存儲到輸出目錄。5.根據(jù)權(quán)利要求4的方法,其中所述卸載步驟還包括步驟確定所述讀取和存儲步驟成功結(jié)束;以及(1)如果所述確定成功的步驟指示未結(jié)束,則停止每個所述線程,(2)在該表上執(zhí)行內(nèi)部TS重新組織。6.根據(jù)權(quán)利要求1的方法,還包括步驟重復(fù)所述分配和卸載步驟,直到卸載完每個數(shù)據(jù)庫表。7.根據(jù)權(quán)利要求1的方法,還包括步驟輸出相關(guān)于每個所述表的其它對象;以及刪掉所述表。8.一種裝入數(shù)據(jù)到數(shù)據(jù)庫表的方法,該方法包括步驟確定用于將數(shù)據(jù)裝入到數(shù)據(jù)庫表的X個線程;創(chuàng)建X個臨時表,每個臨時表對應(yīng)于一組存儲在輸出目錄中的數(shù)據(jù);與每個線程一起運行SQL*Loader處理,用于裝入每個臨時表;以及借助對應(yīng)的SQL*LOADERTM處理,以將存儲在對應(yīng)輸出目錄中的數(shù)據(jù)裝入每個臨時表。9.根據(jù)權(quán)利要求8的方法,還包括步驟確定用于各自數(shù)據(jù)庫表的裝入步驟的成功;以及如果所述裝入步驟未成功,則執(zhí)行步驟(1)如果所述確定成功的步驟指示未結(jié)束,則停止每個所述線程,(2)在該表上執(zhí)行內(nèi)部TS重新組織。10.根據(jù)權(quán)利要求8的方法,還包括創(chuàng)建、運行和裝入直到裝入每個表的步驟。11.根據(jù)權(quán)利要求8的方法,還包括步驟在所述裝入步驟中確認(rèn)失誤,并執(zhí)行步驟(1)確認(rèn)不成功地裝入的表;以及(2)在不成功地裝入的表上執(zhí)行內(nèi)部TS重新組織。12.根據(jù)權(quán)利要求8的方法,其中所述確定步驟包括步驟檢索由用戶輸入的線程數(shù);確定輸出目錄數(shù);以及設(shè)立等于少于被檢索的線程數(shù)的線程數(shù)和輸出目錄數(shù)。13.一種在其中存儲有計算機指令的計算機可讀介質(zhì),當(dāng)所述計算機指令裝入計算機時,引起計算機執(zhí)行步驟運行多個線程來處理數(shù)據(jù)庫表;給對應(yīng)的所述線程各自分配一個所述數(shù)據(jù)庫表;通過對應(yīng)的線程的處理卸載每個對應(yīng)數(shù)據(jù)庫表。14.根據(jù)權(quán)利要求13的計算機可讀介質(zhì),其中所述運行步驟包括步驟識別位于多個獨立的保存所述數(shù)據(jù)庫表的存儲裝置上的輸出目錄數(shù)X;以及利用X作為所述線程數(shù)。15.根據(jù)權(quán)利要求14的計算機可讀介質(zhì),其中所述存儲裝置是磁盤驅(qū)動器。16.根據(jù)權(quán)利要求13的計算機可讀介質(zhì),其中所述卸載步驟包括步驟從各自數(shù)據(jù)庫表讀數(shù)據(jù)塊并將讀取的數(shù)據(jù)塊存儲到輸出目錄。17.根據(jù)權(quán)利要求16的計算機可讀介質(zhì),其中所述卸載步驟還包括步驟確定所述讀取和存儲步驟成功結(jié)束;以及(1)如果所述確定成功的步驟指示未結(jié)束,則停止每個所述線程,(2)在該表上執(zhí)行內(nèi)部TS重新組織。18.根據(jù)權(quán)利要求13的計算機可讀介質(zhì),還包括步驟重復(fù)所述分配和卸載步驟,直到卸載完每個數(shù)據(jù)庫表。19.根據(jù)權(quán)利要求13的計算機可讀介質(zhì),還包括步驟輸出相關(guān)于每個所述表的其它對象;以及刪掉所述表。20.一種在其中存儲有計算機指令的計算機可讀介質(zhì),當(dāng)所述計算機指令裝入計算機時,引起計算機執(zhí)行步驟確定用于將數(shù)據(jù)裝入到數(shù)據(jù)庫表的X個線程;創(chuàng)建X個臨時表,每個臨時表對應(yīng)于一組存儲在輸出目錄中的數(shù)據(jù);運行SQL*Loader處理,用于裝入每個臨時表;以及借助對應(yīng)的SQL*LOADERTM處理,以將存儲在對應(yīng)輸出目錄中的數(shù)據(jù)裝入每個臨時表。21.根據(jù)權(quán)利要求20的計算機可讀介質(zhì),其中所述存儲于其上的計算機指令在被裝入計算機時,還引起計算機執(zhí)行步驟確定用于各自數(shù)據(jù)庫表的裝入步驟的成功;以及如果所述裝載步驟不成功,則執(zhí)行步驟(1)如果所述確定成功的步驟指示未結(jié)束,則停止每個所述線程,(2)在該表上執(zhí)行內(nèi)部TS重新組織。22.根據(jù)權(quán)利要求20的計算機可讀介質(zhì),其中所述存儲于其上的計算機指令在被裝入計算機時,還引起計算機執(zhí)行重復(fù)所述創(chuàng)建、運行和裝入直到裝入每個表的步驟。23.根據(jù)權(quán)利要求20的計算機可讀介質(zhì),其中所述存儲于其上的計算機指令在被裝入計算機時,還引起計算機執(zhí)行步驟在所述裝入步驟中確認(rèn)失誤,并執(zhí)行步驟(1)確認(rèn)不成功地裝入的表;(2)在不成功地裝入的表上執(zhí)行內(nèi)部TS重新組織。24.根據(jù)權(quán)利要求20的計算機可讀介質(zhì),其中所述確定步驟包括步驟檢索由用戶輸入的線程數(shù);確定輸出目錄數(shù);以及設(shè)立等于少于被檢索的線程數(shù)的線程數(shù)和輸出目錄數(shù)。25.一種用于卸載保存在系統(tǒng)中的數(shù)據(jù)庫表的設(shè)備,包括用于運行多個線程來處理該數(shù)據(jù)庫表的部件;用于分配所述數(shù)據(jù)庫表的各自一個與所述線程對應(yīng)的部件;以及用于通過對應(yīng)的線程的處理卸載各自數(shù)據(jù)庫表的部件。26.根據(jù)權(quán)利要求25的設(shè)備,其中用于運行的所述部件還包括用于檢索由用戶輸入的線程數(shù)的部件;27.根據(jù)權(quán)利要求25的設(shè)備,其中用于運行的所述部件還包括用于將運行的線程數(shù)限制為定位于所述系統(tǒng)的獨立存儲裝置上的輸出目錄的數(shù)的部件。28.根據(jù)權(quán)利要求25的設(shè)備,其中用于卸載的所述部件包括從各自數(shù)據(jù)庫表讀取數(shù)據(jù)塊并將讀取的數(shù)據(jù)塊存儲到與對應(yīng)的線程有關(guān)輸出目錄。29.根據(jù)權(quán)利要求25的設(shè)備,還包括用于重復(fù)地分配各自的數(shù)據(jù)庫表給對應(yīng)的線程和卸載每個各自的表直到卸載完全部所述數(shù)據(jù)庫表的部件。30.一種卸載數(shù)據(jù)庫表的設(shè)備,包括運行裝置,被配置成初始化多個線程來處理所述數(shù)據(jù)庫表;分配器,被配置成給每個所述數(shù)據(jù)庫表分配對應(yīng)的被運行的所述線程;以及卸載器,被安裝在每個對應(yīng)的線程上,每個各自的卸載器被配制成用于卸載分配的數(shù)據(jù)庫表到卸載器的對應(yīng)線程。31.根據(jù)權(quán)利要求30的設(shè)備,其中運行裝置包括用戶接口,配制成檢索來自用戶的運行的線程數(shù);以及限制裝置,被配制成限制運行的線程數(shù)為位于所述系統(tǒng)的多個獨立的存儲裝置上的輸出目錄數(shù)。32.根據(jù)權(quán)利要求30的設(shè)備,其中每個各自的卸載器包括讀取裝置,該讀取裝置被配制成讀取在分配給與各自的卸載器相同的線程的表內(nèi)保存的數(shù)據(jù)塊;寫入裝置,該寫入裝置被配置成存儲讀取的數(shù)據(jù)塊到對應(yīng)于與各自卸載器同樣的線程的輸出目錄。33.根據(jù)權(quán)利要求30的設(shè)備,其中所述分配器分配一數(shù)據(jù)庫表給每個所述線程,并且在一個所述線程結(jié)束時分配另一個所述數(shù)據(jù)庫表給結(jié)束了的線程,直到每個數(shù)據(jù)庫表都分配過為止。34.根據(jù)權(quán)利要求32的設(shè)備,還包括裝入器,在每個數(shù)據(jù)庫表都被卸載后,裝入并在每個所述線程上執(zhí)行,每個裝入器被配置成,讀取存儲在輸出目錄中的數(shù)據(jù)塊,以及在新表空間保存數(shù)據(jù)塊。全文摘要通過運行相當(dāng)于位于多個獨立的、保存數(shù)據(jù)庫表的存儲裝置(310)上的輸出目錄(320)的數(shù)目個線程(400)來卸載數(shù)據(jù)庫表。給每個線程分配一個數(shù)據(jù)庫表以卸載(420)。從每個數(shù)據(jù)庫表卸載的數(shù)據(jù)被存儲在對應(yīng)的輸出目錄(320)中。通過從每個表讀取數(shù)據(jù)塊并存除該數(shù)據(jù)登記到輸出目錄(320)中來從每個數(shù)據(jù)庫表中卸載該數(shù)據(jù)。每個線程都由對稱多處理(SMP)環(huán)境中的獨立處理管理。重復(fù)該處理直到卸載完每個數(shù)據(jù)庫表為止。然后,通過首先創(chuàng)建相當(dāng)于線程數(shù)目個臨時表(600),接著讀取一組存儲在輸出目錄(320)中的數(shù)據(jù)并存儲該數(shù)據(jù)到臨時表來將該數(shù)據(jù)裝入數(shù)據(jù)庫表。文檔編號G06F9/46GK1331817SQ99814739公開日2002年1月16日申請日期1999年11月24日優(yōu)先權(quán)日1998年11月25日發(fā)明者羅西塔·米爾扎德申請人:電腦聯(lián)合想象公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
噶尔县| 建湖县| 清新县| 杨浦区| 德惠市| 鱼台县| 始兴县| 孙吴县| 仪陇县| 兴化市| 平武县| 泸西县| 黄陵县| 八宿县| 虎林市| 阳曲县| 克拉玛依市| 乳源| 滦南县| 凤冈县| 团风县| 互助| 郎溪县| 宝清县| 丽江市| 漠河县| 台东县| 黑山县| 浠水县| 梅河口市| 巧家县| 随州市| 景谷| 郓城县| 南开区| 东宁县| 长兴县| 兴安盟| 鄯善县| 屏东市| 铜川市|