Oracle資料庫 Exp Imp工具效能調優

2021-04-25 21:01:58 字數 3419 閱讀 6892

摘要:oracle exp/imp工具是乙個操作簡單、方便靈活的備份恢復和資料遷移工具,它可以實施全庫級、使用者級、表級的資料備份和恢復。對於資料量在g級或g級以內,強調高可用性,可以容忍少量資料丟失的資料庫系統,exp/imp是普遍使用的邏輯備份方式。目前現網很多生產系統均使用exp/imp進行備份恢復。資料量達到g級以後,備份恢復的時間明顯拉長了,有沒有方法能夠有效提高exp/imp的速度呢?答案是肯定的,某些方法還可以成倍的提高速度,本文就從exp、imp兩個工具分別**優化備份恢復效能的方法。

一、exp調優

1.使用direct和recordlength選項

direct引數定義了匯出是使用直接路徑方式(direct=y),還是常規路徑方式(direct=n)。常規路徑匯出使用sqlselect語句從表中抽取資料,直接路徑匯出則是將資料直接從磁碟讀到pga再原樣寫入匯出檔案,從而避免了sql命令處理層的資料轉換過程,大大提高了匯出效率。在資料量大的情況下,直接路徑匯出的效率優勢更為明顯,可比常規方法速度提高三倍之多。

和direct=y配合使用的是recordlength引數,它定義了export i/o緩衝的大小,作用類似於常規路徑匯出使用的buffer引數。建議設定recordlength引數為最大i/o緩衝,即65535(64kb)。其用法如下:

exp userid=system/manager full=y direct=y recordlength=65535 file=

exp_full.dmp log=exp_full.log

直接路徑匯出根據oracle版本不同,有一些使用限制。比較重要的限制有,8i及以下版本不支援匯出客戶端和資料庫的字符集轉換,因此匯出前必須保證nls_lang設定正確;8.1.5及以下版本不支援匯出含lobs物件的表;不能使用query引數等。

2.使用管道技術

管道是從乙個程式程序向另乙個程式程序單向傳送資訊的技術。通常,管道把乙個程序的輸出傳給另一程序作為輸入。如果匯出的資料量很大,可以利用管道直接生成最終的壓縮檔案,所耗費的時間和不壓縮直接匯出的時間相當。這樣一來,不僅能夠解決磁碟空間不足的問題,而且省去了單獨壓縮檔案的時間;如果需要傳輸匯出檔案,還可以減少網路傳輸的時間。比如,乙個10g的檔案單獨壓縮可能需要半小時以上的時間。雖然管道技術不能夠直接縮短exp/imp本身的時間,但節省出來的壓縮時間非常可觀。管道和exp結合的具體使用方法如下:

匯出資料示例:

% mknod /tmp/exp_pipe p # make the pipe

% compress < /tmp/exp_pipe > export.dmp.z & # background compress

% exp file=/tmp/exp_pipe # export to the pipe

二、imp調優

oracleimport程序需要花比export程序數倍的時間將資料匯入資料庫。某些關鍵時刻,匯入是為了應對資料庫的緊急故障恢復。為了減少宕機時間,加快匯入速度顯得至關重要。沒有特效辦法加速乙個大資料量的匯入,但我們可以做一些適當的設定以減少整個匯入時間。

1.使用管道技術

前面已經說明了exp時如何使用管道,在匯入時管道的作用是相同,不僅能夠解決磁碟空間不足的問題,而且省去了單獨解壓縮檔案的時間。在大資料量匯入匯出的時候,推薦一定要使用管道。

匯入資料示例:

% mknod /tmp/imp_pipe p # make the pipe

% uncompress < export.dmp.z > /tmp/imp_pipe & # background uncompress

% imp file=/tmp/imp_pipe # import from the pipe

2.避免i/o競爭

import是乙個i/o密集的操作,避免i/o競爭可以加快匯入速度。如果可能,不要在系統高峰的時間匯入資料,不要在匯入資料時執行job等可能競爭系統資源的操作。

3.增加排序區

oracleimport程序先導入資料再建立索引,不論indexes值設為yes或者no,主鍵的索引是一定會建立的。建立索引的時候需要用到排序區,在記憶體大小不足的時候,使用臨時表空間進行磁碟排序,由於磁碟排序效率和記憶體排序效率相差好幾個數量級。增加排序區可以大大提高建立索引的效率,從而加快匯入速度。

4.調整buffer選項

imp引數buffer定義了每一次讀取匯出檔案的資料量,設的越大,就越減少import程序讀取資料的次數,從而提高匯入效率。buffer的大小取決於系統應用、資料庫規模,通常來說,設為百兆就足夠了。其用法如下:

imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commi

t=y feedback=10000 buffer=10240000

5.使用commit=y選項

commit=y表示每個資料緩衝滿了之後提交一次,而不是導完一張表提交一次。這樣會大大減少對系統回滾段等資源的消耗,對順利完成匯入是有益的。

6.使用indexes=n選項

前面談到增加排序區時,說明imp程序會先導入資料再建立索引。匯入過程中建立使用者定義的索引,特別是表上有多個索引或者資料表特別龐大時,需要耗費大量時間。某些情況下,需要以最快的時間匯入資料,而索引允許後建,我們就可以使用indexes=n 只匯入資料不建立索引,從而加快匯入速度。

我們可以用indexfile選項生成建立索引的dll指令碼,再手工建立索引。我們也可以用如下的方法匯入兩次,第一次匯入資料,第二次匯入索引。其用法如下:

imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feed

back=10000 buffer=10240000 ignore=y rows=y indexes=n

imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 comm

it=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y

7.增加large_pool_size

如果在init.ora中配置了mts_service,mts_dispatchers等引數,tnsnames.ora中又沒有(server=dedicated)的配置,那麼資料庫就使用了共享伺服器模式。在mts模式下,exp/imp操作會用到large_pool,建議調整large_pool_size到150m。

檢查資料庫是否在mts模式下:

sql>select distinct server from v$session;

如果返回值出現none或shared,說明啟用了mts。

oracle 資料庫的exp imp

oracle 資料庫匯出匯入 匯出資料庫 c documents and settings administrator exp username password ip oracleinstance file d dmp owner usename buffer 640000 匯入資料庫 先要建立表...

使用exp imp遷移oracle資料庫

參考部落格 exp imp使用詳解 1.根據使用者匯出匯入 匯出 只匯出某個使用者的資料 exp test test orcl owner coop file data oradata data dbbak data coop exp data 2018.2.23.dmp log data orad...

exp imp命令連線Oracle資料庫報錯

今天在使用exp imp命令連線資料庫的時候報錯,具體操作步驟如下 開始 執行 cmd 輸入exp或imp,報錯 invaild format of import utility name verify that oracle home is properly set 截圖如下 問題分析 記得以前安...