專利名稱::Oracle數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于數(shù)據(jù)庫數(shù)據(jù)刪除領(lǐng)域,具體涉及一種oracle數(shù)據(jù)庫中在大數(shù)據(jù)量情況下大批量刪除數(shù)據(jù)的方法。
背景技術(shù):
:在通信領(lǐng)域中,性能管理和告警管理是電信網(wǎng)管系統(tǒng)的重要的兩個功能,也是網(wǎng)管系統(tǒng)中產(chǎn)生數(shù)據(jù)量較多的兩個功能。當(dāng)網(wǎng)管運行一段時間(比如兩年)后,現(xiàn)場的網(wǎng)管需要進(jìn)行版本升級,其中對網(wǎng)管數(shù)據(jù)庫的升級是網(wǎng)管版本升級環(huán)節(jié)中最耗時最重要的一個環(huán)節(jié),網(wǎng)管數(shù)據(jù)庫中大量存在的歷史告警數(shù)據(jù)和性能統(tǒng)計數(shù)據(jù)會大大增加數(shù)據(jù)庫升級的時間,占有大量磁盤空間,然而這些歷史數(shù)據(jù)中大部分可能已經(jīng)沒有使用價值,因此一般在網(wǎng)管升級之前,都會對歷史數(shù)據(jù)進(jìn)行一些清理工作,只保留最近一段時間(常常為三個月)的數(shù)據(jù),這樣既釋放了數(shù)據(jù)庫空間,又大大提升了升級效率,減少了升級失敗的概率。對于oracle數(shù)據(jù)庫,現(xiàn)有大數(shù)據(jù)量刪除方法有以下幾種1.分批刪除,逐次提交這種方法的缺點是效率較低,數(shù)據(jù)庫高水位線無法直接壓縮。2.保留的數(shù)據(jù)先轉(zhuǎn)移到臨時表中,truncate原表,從臨時表中移回數(shù)據(jù),刪除臨時表這種方法的缺點是當(dāng)保留的數(shù)據(jù)量達(dá)到幾十萬,并且還包含BLOB、CL0B字段時,效率較低,原始數(shù)據(jù)轉(zhuǎn)移到臨時表中時,會占用較大的數(shù)據(jù)庫表空間。綜上可知,現(xiàn)有大數(shù)據(jù)量情況下的數(shù)據(jù)庫刪除數(shù)據(jù)方法中,存在刪除效率低以及其它如數(shù)據(jù)庫高水位線無法直接壓縮的不足和缺陷,所以有必要加以改進(jìn)。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種ORACLE數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法,有效地解決現(xiàn)有技術(shù)中刪除效率低,刪除時間長的問題,并且在刪除過程中可實現(xiàn)磁盤碎片整理以及高水位線的壓縮。為解決上述技術(shù)問題,本發(fā)明是通過以下技術(shù)方案實現(xiàn)的一種ORACLE數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法,包括如下步驟A、根據(jù)刪除條件分析出保留數(shù)據(jù)的where條件;B、使用exp命令以壓縮方式將滿足where條件的保留數(shù)據(jù)導(dǎo)出;C、清空原表;D、將保留數(shù)據(jù)導(dǎo)回數(shù)據(jù)庫中。上述方法中,所述步驟A具體為根據(jù)要刪除的數(shù)據(jù)的條件和現(xiàn)有數(shù)據(jù)的情況分析出保留數(shù)據(jù)的where條件(表中所有數(shù)據(jù)為全集,保留數(shù)據(jù)為刪除數(shù)據(jù)集合的補集)。上述方法中,所述步驟B具體為以步驟A的where條件作為exp命令的query選擇項參數(shù),同時使exp命令選擇項參數(shù)compress:y,將保留數(shù)據(jù)導(dǎo)出。上述方法中,所述步驟C具體為以dr叩原表或truncate原表的方式清空原表,兩種方式效率都很高,都能實現(xiàn)高水位線的壓縮和數(shù)據(jù)庫表空間的回收。上述方法中,所述步驟D具體為若步驟C采用dr叩原表的方式清空原表,則使用i卿命令重建數(shù)據(jù)庫的原表結(jié)構(gòu),并將保留數(shù)據(jù)導(dǎo)回到重建的原表中;若步驟C采用truncate原表的方式清空原表,則使用imp命令將保留數(shù)據(jù)導(dǎo)回到數(shù)據(jù)庫原表中即可,不需要表重建。上述方法,還包括步驟E:成功導(dǎo)回保留數(shù)據(jù)后,如果不需要保存導(dǎo)出的保留數(shù)據(jù),則刪除導(dǎo)出的保留數(shù)據(jù)。使用本發(fā)明的ORACLE數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法具有以下有益效果本發(fā)明方法在大數(shù)據(jù)量情況下大批量刪除數(shù)據(jù),刪除效率高,并且將數(shù)據(jù)庫表的磁盤碎片整理,高水位線壓縮操作在刪除數(shù)據(jù)的過程中一次實現(xiàn)完成,不需進(jìn)行額外的數(shù)據(jù)庫操作。圖1是本發(fā)明的數(shù)據(jù)刪除方法的流程示意圖2是本發(fā)明的數(shù)據(jù)庫表數(shù)據(jù)的流向和狀態(tài)示意圖。具體實施例方式為了更好地理解本發(fā)明,下面結(jié)合附圖和具體實施例對本發(fā)明作進(jìn)一步地描述。請參閱圖1,本發(fā)明數(shù)據(jù)刪除方法流程包括如下步驟4100、數(shù)據(jù)刪除準(zhǔn)備進(jìn)行當(dāng)前刪除表的記錄總數(shù)統(tǒng)計和要刪除的記錄數(shù)量統(tǒng)計,以明確當(dāng)前刪除任務(wù)的數(shù)據(jù)量;102、是否適用本方法的判斷有以下兩種情況本發(fā)明方法的刪除效率不高,應(yīng)采用104流程的其它刪除方法;104、若刪除全部數(shù)據(jù),則直接用truncate語句,效率較高;若要刪除的數(shù)據(jù)量較小,則直接用delete語句可以實現(xiàn);106、分析表中得到保留數(shù)據(jù)的where條件根據(jù)要刪除的數(shù)據(jù)的條件和現(xiàn)有數(shù)據(jù)的情況分析出保留數(shù)據(jù)的where條件(表中所有數(shù)據(jù)為全集,保留數(shù)據(jù)為刪除數(shù)據(jù)集合的補集);比如要刪除2008-7-01日前的歷史告警數(shù)據(jù),原始刪除語句是DeletefromHISTORYALARMwherehappentime〈to一date('2008-07-0100:00:00','YYYY-麗-DDHH24:MI:SS');可以得到保留數(shù)據(jù)的where條件為wherehappentime〉=to_date('2008-07-0100:00:00,,'YYYY-MM-DDHH24:MI:SS,);108、使用exp命令的表備份模式將滿足上步操作得到的where條件的記錄導(dǎo)出106步驟的where條件作為query選擇項參數(shù),同時以壓縮方式(選擇項參數(shù)compress=y),將刪除數(shù)據(jù)表中的保留數(shù)據(jù)導(dǎo)出到磁盤空間上;導(dǎo)出命令如下expuser/pwdquery二where條件tables二表名compress=yfile二導(dǎo)出文件;需要注意的是,在where條件中一般都會有空格,而命令行下就會被看成幾個命令行參數(shù),需要用單引號或雙引號將整個where條件括起來;110、drop原表或清空原表記錄清空原表有幾種方式,效率都很高,都能實現(xiàn)高水位線的壓縮和數(shù)據(jù)庫表空間的回收,如1)直接dr叩原表的方式,在操作導(dǎo)回保留數(shù)據(jù)時,先使用imp命令重建數(shù)據(jù)庫的原表結(jié)構(gòu),使用DDL的sql:dr叩tableHISTORYALARM;2)使用truncate原表的方式,在操作導(dǎo)回保留數(shù)據(jù)時,只要導(dǎo)入數(shù)據(jù),不需要表重建,使用DDL的sql:truncatetableHISTORYALARM;112、使用imp命令將保留數(shù)據(jù)導(dǎo)回數(shù)據(jù)庫impuser/pwdfromuser=usertables二表名file二導(dǎo)出文件ignore二y;114、根據(jù)情況決定是否刪除導(dǎo)出的保留數(shù)據(jù);116、如果不需要保存導(dǎo)出的保留數(shù)據(jù),則刪除導(dǎo)出的保留數(shù)據(jù)。5118、刪除數(shù)據(jù)成功,并且成功實現(xiàn)數(shù)據(jù)庫表高水位線的壓縮和表空間碎片整理。請參閱圖2,該圖是本發(fā)明的數(shù)據(jù)庫表數(shù)據(jù)的流向和狀態(tài)示意圖,其詳細(xì)解釋如下狀態(tài)1、刪除前的狀態(tài),表中數(shù)據(jù)分為要刪除的數(shù)據(jù)(即刪除數(shù)據(jù))和需要保留的數(shù)據(jù)(即保留數(shù)據(jù)),其中數(shù)據(jù)總量和刪除數(shù)據(jù)的量都是很大的數(shù)據(jù)量;狀態(tài)2、將保留數(shù)據(jù)導(dǎo)出,由于使用壓縮的方式,并且不需要額外占用數(shù)據(jù)庫數(shù)據(jù)表空間,只要占用操作系統(tǒng)磁盤空間即可,效率較高,失敗的概率較低;狀態(tài)3、truncate或drop原表后,數(shù)據(jù)庫表空間得以回收;狀態(tài)4、將保留數(shù)據(jù)導(dǎo)回數(shù)據(jù)庫表,由于數(shù)據(jù)庫表空間回收已經(jīng)完成,導(dǎo)入數(shù)據(jù)庫要求的表空間肯定足夠;狀態(tài)5、數(shù)據(jù)庫表中只剩保留數(shù)據(jù),而且高水位線得到了壓縮。Oracle數(shù)據(jù)庫中大數(shù)據(jù)量情況下大批量數(shù)據(jù)刪除,使用傳統(tǒng)的刪除方法,刪除效率較低。改用本發(fā)明方法,可以較大的改善刪除速度,提高刪除效率,并在刪除過程中實現(xiàn)了數(shù)據(jù)庫表的高水位線的壓縮。以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,應(yīng)當(dāng)指出,對于本領(lǐng)域的普通技術(shù)人員來說,凡是本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換或改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。權(quán)利要求1.一種ORACLE數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法,其特征在于,包括如下步驟A、根據(jù)刪除條件分析出保留數(shù)據(jù)的where條件;B、使用exp命令以壓縮方式將滿足where條件的保留數(shù)據(jù)導(dǎo)出;C、清空原表;D、將保留數(shù)據(jù)導(dǎo)回數(shù)據(jù)庫中。2.根據(jù)權(quán)利要求1所述的ORACLE數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法,其特征在于,所述步驟B具體為以步驟A的where條件作為exp命令的query選擇項參數(shù),同時使exp命令選擇項參數(shù)compress-y,將保留數(shù)據(jù)導(dǎo)出。3.根據(jù)權(quán)利要求1或2所述的ORACLE數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法,其特征在于,所述步驟C具體為以drop原表或truncate原表的方式清空原表。4.根據(jù)權(quán)利要求3所述的ORACLE數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法,其特征在于,所述步驟D具體為若步驟C采用drop原表的方式清空原表,則使用imp命令重建數(shù)據(jù)庫的原表結(jié)構(gòu),并將保留數(shù)據(jù)導(dǎo)回到重建的原表中;若步驟C采用truncate原表的方式清空原表,則使用imp命令將保留數(shù)據(jù)導(dǎo)回到數(shù)據(jù)庫原表中。5.根據(jù)權(quán)利要求4所述的ORACLE數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法,其特征在于,還包括歩驟E:成功導(dǎo)回保留數(shù)據(jù)后,如果不需要保存導(dǎo)出的保留數(shù)據(jù),則刪除導(dǎo)出的保留數(shù)據(jù)。全文摘要本發(fā)明公開了一種ORACLE數(shù)據(jù)庫中大批量刪除數(shù)據(jù)的方法,其包括如下步驟A.根據(jù)刪除條件分析出保留數(shù)據(jù)的where條件;B.使用exp命令以壓縮方式將滿足where條件的保留數(shù)據(jù)導(dǎo)出;C.清空原表;D.將保留數(shù)據(jù)導(dǎo)回數(shù)據(jù)庫中。步驟C中以drop原表或truncate原表的方式清空原表,能實現(xiàn)高水位線的壓縮和數(shù)據(jù)庫表空間的回收。本發(fā)明方法在大數(shù)據(jù)量情況下大批量刪除數(shù)據(jù),刪除效率高,并且將數(shù)據(jù)庫表的磁盤碎片整理,高水位線壓縮操作在刪除數(shù)據(jù)的過程中一次實現(xiàn)完成,不需進(jìn)行額外的數(shù)據(jù)庫操作。文檔編號G06F17/30GK101493842SQ20091010554公開日2009年7月29日申請日期2009年2月20日優(yōu)先權(quán)日2009年2月20日發(fā)明者徐春生,詹榮國申請人:中興通訊股份有限公司