1. 程式人生 > >Oracle Exp/Imp 調優

Oracle Exp/Imp 調優

  一、Exp調優

  1.使用DIRECT和RECORDLENGTH選項

  DIRECT引數定義了匯出是使用直接路徑方式(DIRECT=Y),還是常規路徑方式(DIRECT=N)。常規路徑匯出使用SQL SELECT語句從表中抽取資料,直接路徑匯出則是將資料直接從磁碟讀到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調優

  Oracle Import程序需要花比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.增加排序區

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

  8i及其以下版本:匯入資料前增加資料庫的sort_area_size大小,可設為正常值的5-10倍。但這個值設定會影響到所有會話,設的過高有可能導致記憶體不足出現paging, swapping現象。更為穩妥的方法是,對於大表和索引特別多的表,只導資料不導索引。導完資料後,建立一個會話,設定當前會話的 sort_area_size一個足夠大的值,再手工建立索引。

  9i:在workarea_size_policy=AUTO的情況下,所有會話的UGA共用pga_aggregate_target定義的記憶體,不必單獨設定sort_area_size。匯入資料前增加pga_aggregate_target大小,如果機器記憶體夠大,可從通常設定的 500M提高到1-2G。pga_aggregate_target大小可以動態調整,匯入完成後可線上調回原值。

  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優化

 在工作中經常需要對oracle資料庫進行備份、異地恢復的情況。

Oracle的常規備份無非是exp/imp,expdp/impdp,rman三種方式。
  1. exp/imp簡單方便,適用於跨db版本、跨os平臺、異地備份等情況,是大家最常用的一種備份方式。
  2. expdp/impdp是10g以後推出的備份方式,其特點就是效率的大幅改善,據eygle報告,impdp相比與傳統imp有20倍速度提升,其最大的缺點是不能跨資料庫版本,連小版本號也不行(例如11.1到11.2)。
  3. rman相比前兩種備份方式,相對配置複雜,一般是DBA作為前兩種方案的備份。

先看看exp/imp的用法:

1.基本的exp寫法

  1. exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log
  2. user: oracle使用者名稱
  3. passwd:資料庫使用者密碼
  4. infodb81: 資料庫的連線字串
  5. file:備份後的檔名
  6. log: 備份日誌檔案

2.exp的引數

引數一:buffer
  1. exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log buffer=4096000000
  2. 注意:buffer的單位是bytes,例如要設定1M,則是1024000,上面的例子設定的是400M。 
  3. 根據我們測試的結果,加入buffer引數後,約有40%的效能提升。
  4. 效能對比:
  5. 加入buffer引數前(資料約9G,共31分鐘) 
  6. ========== 備份使用者sinosybak 11-02-21 02:08:16 ====================
  7. ========== 備份使用者shyang 11-02-21 02:35:49 ====================
  8. 加入Buffer引數後(約18分鐘) 
  9. ========== 備份使用者sinosybak 11-02-28 02:25:04 ====================
  10. ========== 備份使用者shyang 11-02-28 02:43:52 ====================
引數二:direct
  1. exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log direct=y recordlength=65536

  2. direct : 直接匯出,資料從磁碟讀入到快取記憶體,直接寫入到最終檔案,所以沒有資料行檢查與匹配的過程。據不權威的評測結果,效能有50%到70%的提升。
  3. 注意:
  4. 1.recordlength引數(IO緩衝大小),與direct引數配對使用,預設該引數為1024bytes,上面的例子為64K(最大值也為64K)。
  5. 2.使用direct後,buffer引數失效;
  6. 3.使用direct,不支援query子句(沒有行匹配的過程),不支援帶Blob型別欄位的表,但是系統會自動判斷、自動切換,也就是說不會因為一張表的問題,導致整個schema不能使用direct備份;
  7. 4.direct不支援表空間匯出。

引數三:consistent

  1. exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log consistent=y
  2. consistent : 交叉一致性,用在序列值小於表中最大值的情況。
  3. 例如:exp預設情況下,先匯出序列,後匯出表,如果序列匯出之後,表又使用序列插入了新的資料,就會導致資料不一致。

其他引數:

  1. USERID 使用者名稱/口令
  2. FULL 匯出整個檔案 (N) BUFFER 資料緩衝區的大小
  3. OWNER 所有者使用者名稱列表
  4. FILE 輸出檔案 (EXPDAT.DMP)
  5. TABLES 表名列表
  6. COMPRESS 匯入一個範圍 (Y)
  7. RECORDLENGTH IO 記錄的長度
  8. GRANTS 匯出許可權 (Y)
  9. INCTYPE 增量匯出型別
  10. INDEXES 匯出索引 (Y)
  11. RECORD 跟蹤增量匯出 (Y)
  12. ROWS 匯出資料行 (Y)
  13. PARFILE 引數檔名
  14. CONSTRAINTS 匯出限制 (Y)
  15. CONSISTENT 交叉表一致性
  16. LOG 螢幕輸出的日誌檔案
  17. STATISTICS 分析物件 (ESTIMATE)
  18. DIRECT 直接路徑 (N)
  19. TRIGGERS 匯出觸發器 (Y)
  20. FEEDBACK 顯示每 x 行 (0) 的進度
  21. FILESIZE 各轉儲檔案的最大尺寸
  22. QUERY 選定匯出表子集的子句
  23. 下列關鍵字僅用於可傳輸的表空間
  24. TRANSPORT_TABLESPACE 匯出可傳輸的表空間元資料 (N)
  25. TABLESPACES 將傳輸的表空間列表

相關推薦

Oracle Exp/Imp 調

  一、Exp調優   1.使用DIRECT和RECORDLENGTH選項   DIRECT引數定義了匯出是使用直接路徑方式(DIRECT=Y),還是常規路徑方式(DIRECT=N)。常規路徑匯出使用SQL SELECT語句從表中抽取資料,直接路徑匯出則是將資料直接從磁碟讀到PGA再原樣寫入匯出檔案,從而避

轉://Oracle undo 自動調

expire 重啟 版本 一分鐘 sysdba 需要 為什麽 啟用 extent Oracle 10gr2的後續版本中添加了UNDO信息最短保留時間段自動調優的特性,不再僅僅依據參數UNDO_RETENTION的設定,其調優原則如下:1. 當UNDO TABLESPACE

Oracle exp/imp

        Oracle exp/imp:三思筆記 Export/import匯出匯入資料   進行資料遷移,具備跨版本,跨平臺,跨字符集的資料遷移, 1 exp Cmd 》exp,imp,檔案儲存在執行該命令的機器上。 1.1

oracle之語句調

1.SQL語句大寫 因為oracle總是先解析SQL語句,把小寫的字母轉換成大寫的再執行。 2.表別名 多表join時,儘量使用表別名,同時把表別名字首於每一列上,減少解析的時間及由列歧義引起的語法錯誤 3.from從右到左解析表名 from子句中寫在最後的表(基礎表也稱為驅動表,driving t

Oracle exp/imp匯入不同的表空間

    我們在做Oracle資料庫表遷移時,通常會有這種需求,在開發階段,可能所有使用者的資料都放在一個表空間中,比如users表空間,但是在生產中,我們希望將每個使用者的資料分別放到不同表空間中,此時直接使用exp/imp是不具備選擇表空間功能的(expdp/impdp可

Linux環境下Oracle exp/imp匯出匯入工具的使用

一. 匯出工具 exp1. 它是作業系統下一個可執行的檔案 存放目錄/ORACLE_HOME/bin   exp匯出工具將資料庫中資料備份壓縮成一個二進位制系統檔案.可以在不同OS間遷移   它有三種模式:       a.  使用者模式: 匯出使用者所有物件以及物件中的資

Oracle EXP/IMP備份簡介

[size=small]EXP/IMP備份是最常用的備份方法之一,其實Exp/Imp並不算是一種好的備份方式,正確的說法是Exp/Imp只能是一個好的轉儲工具Oracle EXP/IMP備份:匯入/匯出是ORACLE倖存的最古老的兩個命令列工具了,其實我從來不認為Exp/Im

oracle exp imp實現導出導入

用戶 簡單 dmp comment 服務 導入 本地 報錯 rac 一.說明 oracle 的exp/imp命令用於實現對數據庫的導出/導入操作; exp命令用於把數據從遠程數據庫服務器導出至本地,生成dmp文件; imp命令用於把本地的數據庫dmp文件

oracle exp imp 高低版本問題

exp 和imp 是剛開始接觸oracle是進行資料遷移的方式,一直以來都是用exp低版本匯出dmp然後在用imp高版本的時候進行匯入。但是有一天朋友做測試的時候發現高版本的dmp無法匯入低版本的資料庫。故特地做了測試進行分析 系統環境:lcentos 64  oracle

oracle exp/imp命令詳解(匯入,匯出表,儲存過程,檢視等)

E: >exp help=y 通過輸入 EXP 命令和使用者名稱/口令,您可以 在使用者 / 口令之後的命令: 例項: EXP SCOTT/TIGER 或者,您也可以通過輸入跟有各種引數的 EXP 命令來控制“匯出”的執行方式。 要指定引數,您可以使用關鍵字: 格式: EXP KEYWOR

Oracle記憶體引數調技術詳解

前言 近來公司技術,研發都在問我關於記憶體引數如何設定可以優化oracle的效能,所以抽時間整理了這篇文件,以做參考. 目的 希望通過整理此文件,使大家對oracle記憶體結構有一個全面的瞭解,並在實際的工作中靈活應用,使oracle的記憶體效能達到最優配置,提升應用程式反

oracle exp/imp增量備份恢復

 增量匯出是一種常用的資料備份方法,它只能對整個資料庫來實施,並且必須作為SYSTEM來匯出。在進行此種匯出時,系統不要求回答任何問題。匯出檔名預設為export.dmp,如果不希望自己的輸出檔案定名為export.dmp,必須在命令列中指出要用的檔名。增量匯出包括三個型別

Oracle性能調之虛擬索引用法簡介

sele lan cts segment 信息 用法 pla lec 虛擬 本博客記錄一下Oracle虛擬索引的用法,虛擬索引是定義在數據字典中的偽索引,可以說是偽列,沒有修改的索引字段的。虛擬索引的目的模擬索引,不會增加存儲空間的使用,有了虛擬索引,開發者使用執行計劃的時

Oracle性能調之物化視圖用法簡介

視圖用法 查看 間隔 用法 性能 clas where sql 方式 目錄 一、物化視圖簡介 二、實踐:創建物化視圖 一、物化視圖簡介 物化視圖分類 物化視圖分類,物化視圖語

ORACLE-數據導入導出-常規exp/imp以及數據泵方式

oracle博文說明【前言】: 本文將通過個人口吻介紹有關Oracle數據庫導入導出相關知識,在目前時間點【2017年5月16號】下,所掌握的技術水平有限,可能會存在不少知識理解不夠深入或全面,望大家指出問題共同交流,在後續工作及學習中如發現本文內容與實際情況有所偏差,將會完善該博文內容。 本文所

Oracle下的exp/imp

imp exp oracle 在平時做Oracle的備份的時候一般都是做邏輯熱備份,而做邏輯熱備份一般都是使用exp/imp,在這裏就簡單的說一說。 使用exp導出數據imp導入數據操作如下:exp username/password owner=backup file=backup.d

Oracle-client支持exp|imp|rman

準備 name 檢查 entos 變量 otn 添加 code 6.5   官方精簡版的驅動,不支持持exp/imp/rman,故需要安裝oracle_client客戶端。 實驗環境:   Centos6.5 x64 Oracle 11.2.0.4.0   Ora

oracle調 淺析有效的遊標管理

content -m pos 能夠 data 遊標 size 綁定 style 淺析有效的遊標管理 【思路分析】 能夠把遊標理解成共享的運行計劃,當sql不被共享時。常規的解決思路有兩個方向: 1、調整共享池的尺寸(共享池的庫緩存區中共享運行計劃);

ORACLE sql調之記錄一次trim函數引發的大表全表掃描

oracle trim 全表掃描 sql 調優 2017年8月14日,一地市oracle相關的調度程序ETL抽取速度奇慢,sql語句每次執行平均時間要9秒左右,如果所示:該調度過程涉及的sql語句如下:select count(*) from (SELECT rtrim(

Oracle SQL調

day 定義 多個 sele rowid char 等於 dbm 出現 在多數情況下,Oracle使用索引t來更快地遍歷表,優化器主要根據定義的索引來提高性能。 但是,如果在SQL語句的where子句中寫的SQL代碼不合理,就會造成優化器刪去索引而使用全表掃描,一般就這種S