牛 雷 孫忠林山東科技大學(xué)信息科學(xué)與工程學(xué)院牛雷,男,山東科技大學(xué) 信息科學(xué)與工程學(xué)院,學(xué)生,研究方向:數(shù)據(jù)庫。
?
基于Oracle數(shù)據(jù)庫的EXP工具性能調(diào)優(yōu)
牛 雷 孫忠林
山東科技大學(xué)信息科學(xué)與工程學(xué)院
牛雷,男,山東科技大學(xué) 信息科學(xué)與工程學(xué)院,學(xué)生,研究方向:數(shù)據(jù)庫。
link
評估值15萬
appraisement
行業(yè)曲線
industry
數(shù)據(jù)庫備份技術(shù)對于數(shù)據(jù)被破壞后的可修復(fù)性,以及預(yù)防數(shù)據(jù)丟失的方面起到了非常重要的作用,而EXP工具是數(shù)據(jù)庫備份常用的工具之一。本文將探索如何對EXP工具的性能進行優(yōu)化,從而使得數(shù)據(jù)庫文件的備份變得更加高效。從Oracle10g以后,開始支持EXPDP命令進行導(dǎo)出,本文對兩種導(dǎo)出方法的優(yōu)化進行介紹。
隨著科學(xué)技術(shù)的發(fā)展,計算機數(shù)據(jù)庫中的數(shù)據(jù)充當著重要的角色。黑客攻擊,系統(tǒng)故障等對計算機數(shù)據(jù)庫造成嚴重損壞,導(dǎo)致數(shù)據(jù)嚴重丟失。一旦數(shù)據(jù)丟失,將會耗費巨大的工作量去彌補數(shù)據(jù),也可能因此造成不可挽回的損失。此時,數(shù)據(jù)庫的備份技術(shù)起到至關(guān)重要的作用,而備份的效率對數(shù)據(jù)庫的性能又具有很大的影響。對EXP導(dǎo)出工具及使用EXPD可以快速提高備份的效率,是解決大量數(shù)據(jù)備份時間效率低下的有效工具。
首先對EXP工具的使用進行介紹
在Oracle環(huán)境下,exp工具的使用格式為
expusername/password@connStr file=user_date.dmp log=user_date.log
username指的是Oracle數(shù)據(jù)庫用戶名,password指的是數(shù)據(jù)庫用戶密碼,connStr指的是數(shù)據(jù)庫的連接字符串,file為數(shù)據(jù)庫備份后的文件名,log則是表示備份日志文件。
為EXP設(shè)置相應(yīng)的參數(shù),從而達到優(yōu)化的目的。
設(shè)置buffer參數(shù)exp username/password@connStr file=user_date.dmp log=user_date.logbuffer=512000000
buffer的單位是位/bytes,buffer設(shè)置的為數(shù)據(jù)緩沖區(qū)的大小,數(shù)據(jù)緩沖區(qū)的大小經(jīng)試驗證明并不是越大越好。
buffer=buffersize
這個參數(shù)用來指定緩沖區(qū)的大小,以字節(jié)為單位,緩沖區(qū)用來讀取或者裝載數(shù)據(jù)庫中的行數(shù)。決定了一個被export工具導(dǎo)出的序列中,導(dǎo)出行數(shù)的最大值是多少。
buffersize/maximum_row_size
如果將這個參數(shù)指定為0,那么導(dǎo)出數(shù)據(jù)時每次導(dǎo)出一行。當表中含有數(shù)據(jù)類型LONG,LOB,BFILE,REF,ROWID型的列時,export默認一次導(dǎo)出一行。buffer只應(yīng)用于常規(guī)路徑導(dǎo)出,而對直接路徑導(dǎo)出不起作用。這個默認設(shè)置是為了保證系統(tǒng)運行的獨立性。
exp username/password@connStr file=user_date.dmp log=user_date.logdirect=y recordlength=65536
當使用直接路徑導(dǎo)出時,數(shù)據(jù)直接從磁盤讀出到高速緩沖區(qū),然后再寫入到導(dǎo)出文件當中。這也同時意味著SQL命令處理層可以被繞過,因為數(shù)據(jù)已是導(dǎo)出時期望的格式。當使用direct參數(shù)時,buffer參數(shù)失效,并且direct參數(shù)不支持query子句,不支持表空間導(dǎo)出。與recordlength參數(shù)(IO緩沖參數(shù))搭配使用。
exp username/password@connStr file=user_date.dmp log=user_date.logconsistent=N
consistent參數(shù)功能為確定交叉表的一致性。在進行數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出的過程中,此參數(shù)表示是否維持數(shù)據(jù)庫中表結(jié)構(gòu)的一致性。當將此參數(shù)設(shè)置為Y,在進行導(dǎo)出的過程中,外部系統(tǒng)及相關(guān)用戶同樣可以查詢與之相關(guān)的數(shù)據(jù)庫表,并且能夠獲取到一致性數(shù)據(jù)。在進行導(dǎo)出操作之前修改以及更新的數(shù)據(jù)不會被外部系統(tǒng)感知,但仍要占用數(shù)據(jù)庫的回滾段。當資源緊張時,將此參數(shù)設(shè)置為N,此舉既減少操作占用的回滾資源,又可提高導(dǎo)出速度。
UNIX中的管道技術(shù)可以加快EXP工具的導(dǎo)出速度。管道是從一個程序進程向另一個程序進程單項傳送信息的技術(shù)。管道是一種偽文件。它存在于內(nèi)存中, 用于快速I/O操作。管道是一種存于內(nèi)存中的偽文件,用來進行快速的輸入輸出操作。管道的緩沖區(qū)采用先進先出的機制,寫管道的進程將數(shù)據(jù)寫到緩沖區(qū)的頭部,讀管道進程則讀取管道尾部。建立管道的命令為”mknod filename q”,compress 為UNIX數(shù)據(jù)壓縮工具。管道將一個進程的輸入作為另一個進行的數(shù)據(jù),適用于大數(shù)據(jù)量導(dǎo)出的情況,利用管道,可以直接生成最終的壓縮文件,與不壓縮直接導(dǎo)出的時間性能相當。使用管道,不但解決了磁盤空間不足的問題,還省去了壓縮的時間,進一步提高了導(dǎo)出數(shù)據(jù)的時間性能。
導(dǎo)出數(shù)據(jù)實例:
% mknod /tmp/exp_pipe q # Make the pipe
% compress < /tmp/exp_pipe > export.dmp.Z & # Background compress
膝蓋一軟,我倒了下去,臉碰到了地板,感覺涼涼的。有什么東西再次重擊了我的體側(cè),我本能地尖叫起來,這是開場以來我第一次喊叫。一種尖銳刺耳的聲音,那是別人的吧,好像不屬于我。體側(cè)再次遭到重擊,我什么也看不見了,連眼前是什么都不知道,一片漆黑。有人喊:“夠了!”腦子里突然閃過很多念頭,但我一個都沒記住。
% exp file=/tmp/exp_pipe # Export to the pipe
Expdp一般情況可以替代Exp,但是還無法完全替代,主要是它需要在數(shù)據(jù)庫服務(wù)器上執(zhí)行,而Exp可以在任何一臺客戶端上執(zhí)行。另外,Expdp在導(dǎo)出大型分區(qū)表(1T以上)的時候,分析時間過長,并且存在一些錯誤。所以,有些用戶仍然會使用Exp來進行數(shù)據(jù)備份。
數(shù)據(jù)泵導(dǎo)出與EXP相比有很大的性能提高,其中產(chǎn)生最大影響的就是paralle參數(shù),在使用數(shù)據(jù)泵的情況下提高導(dǎo)出速度,就必須設(shè)置并行參數(shù)。
expdp username/passwordfull=y directory=dump dumpfile=orcl_%U.dmpparallel=4
directory參數(shù)指定導(dǎo)出文件存放位置,full參數(shù)表名進行全庫導(dǎo)出,默認為n,dumpfile參數(shù)指定導(dǎo)出后的文件名,dumpfile 參數(shù)擁有一個通配符 %U,它指示文件將按需要創(chuàng)建,格式將為orcl_nn.dmp,其中nn 從 01 開始,然后按需要向上增加。
那么EXPDP將為parallel創(chuàng)建4個文件,orcl_01. dmp, orcl_02.dmp, orcl_03.dmp, orcl_04.dmp,每個文件的大小會因為進程而不同。通過設(shè)置filesize參數(shù)就可指定每個文件的最大值。當文件的大小超過最大值時,就會創(chuàng)建一個新的文件。
圖1 導(dǎo)出時間比較圖
本次實驗采用數(shù)據(jù)來自于北京大學(xué)DAIM研究組,數(shù)據(jù)集來自一個支持用戶收藏發(fā)布網(wǎng)上資源的共享站點Delicious.com,這類站點支持用戶對資源添加標注和關(guān)注其他用戶等社交功能。本次實驗主要利用其記錄用戶在某個時刻對某個資源的標簽記錄的數(shù)據(jù),對應(yīng)字段分別為USERID,POSTID,TAGID,DATE1。
實驗所用備份步驟簡述如下:
(1)開啟Oracle數(shù)據(jù)庫服務(wù),打開命令提示符界面;
(2)使用命令EXP及參數(shù)或EXPDP進行導(dǎo)出備份操作;
(3)對各個參數(shù)下的備份時間進行比較;
(4)得出的時間性能結(jié)果圖。
根據(jù)導(dǎo)出實驗對比,比較在相同的數(shù)據(jù)大小下,導(dǎo)出工具的時間性能比較。如圖1所示。
通過實驗可以看出,在較小的數(shù)據(jù)量的條件下,EXPDP工具的時間性能低于EXP工具導(dǎo)出的時間性能,EXP工具使用不同參數(shù)進行優(yōu)化時,時間性能也有差異,用戶可以根據(jù)自身需要選擇合適的參數(shù),或者使用參數(shù)組合來達到加快導(dǎo)出速度的目的。
10.3969/j.issn.101- 8972.2016.12.007