牛 雷 孫忠林山東科技大學信息科學與工程學院牛雷,男,山東科技大學 信息科學與工程學院,學生,研究方向:數據庫。
?
基于Oracle數據庫的EXP工具性能調優
牛 雷 孫忠林
山東科技大學信息科學與工程學院
牛雷,男,山東科技大學 信息科學與工程學院,學生,研究方向:數據庫。

link
評估值15萬
appraisement

行業曲線
industry

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

圖1 導出時間比較圖
本次實驗采用數據來自于北京大學DAIM研究組,數據集來自一個支持用戶收藏發布網上資源的共享站點Delicious.com,這類站點支持用戶對資源添加標注和關注其他用戶等社交功能。本次實驗主要利用其記錄用戶在某個時刻對某個資源的標簽記錄的數據,對應字段分別為USERID,POSTID,TAGID,DATE1。
實驗所用備份步驟簡述如下:
(1)開啟Oracle數據庫服務,打開命令提示符界面;
(2)使用命令EXP及參數或EXPDP進行導出備份操作;
(3)對各個參數下的備份時間進行比較;
(4)得出的時間性能結果圖。
根據導出實驗對比,比較在相同的數據大小下,導出工具的時間性能比較。如圖1所示。
通過實驗可以看出,在較小的數據量的條件下,EXPDP工具的時間性能低于EXP工具導出的時間性能,EXP工具使用不同參數進行優化時,時間性能也有差異,用戶可以根據自身需要選擇合適的參數,或者使用參數組合來達到加快導出速度的目的。
10.3969/j.issn.101- 8972.2016.12.007