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= |
直接路徑匯出根據Oracle版本不同,有一些使用限制。比較重要的限制有,8i及以下版本不支援匯出客戶端和資料庫的字符集轉換,因此匯出前必須保證NLS_LANG設定正確;8.1.5及以下版本不支援匯出含LOBs物件的表;不能使用QUERY引數等。
2.使用管道技術
管道是從一個程式程序向另一個程式程序單向傳送資訊的技術。通常,管道把一個程序的輸出傳給另一程序作為輸入。如果匯出的資料量很大,可以利用管道直接生成最終的壓縮檔案,所耗費的時間和不壓縮直接匯出的時間相當。這樣一來,不僅能夠解決磁碟空間不足的問題,而且省去了單獨壓縮檔案的時間;如果需要傳輸匯出檔案,還可以減少網路傳輸的時間。比如,一個10G的檔案單獨壓縮可能需要半小時以上的時間。雖然管道技術不能夠直接縮短Exp/Imp本身的時間,但節省出來的壓縮時間非常可觀。管道和Exp結合的具體使用方法如下:
匯出資料示例:
% mknod /tmp/exp_pipe p # Make the pipe |
二、Imp調優
Oracle Import程序需要花比Export程序數倍的時間將資料匯入資料庫。某些關鍵時刻,匯入是為了應對資料庫的緊急故障恢復。為了減少宕機時間,加快匯入速度顯得至關重要。沒有特效辦法加速一個大資料量的匯入,但我們可以做一些適當的設定以減少整個匯入時間。
1.使用管道技術
前面已經說明了Exp時如何使用管道,在匯入時管道的作用是相同,不僅能夠解決磁碟空間不足的問題,而且省去了單獨解壓縮檔案的時間。在大資料量匯入匯出的時候,推薦一定要使用管道。
匯入資料示例:
% mknod /tmp/imp_pipe p # Make 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 |
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 |
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三種方式。- exp/imp簡單方便,適用於跨db版本、跨os平臺、異地備份等情況,是大家最常用的一種備份方式。
- expdp/impdp是10g以後推出的備份方式,其特點就是效率的大幅改善,據eygle報告,impdp相比與傳統imp有20倍速度提升,其最大的缺點是不能跨資料庫版本,連小版本號也不行(例如11.1到11.2)。
- rman相比前兩種備份方式,相對配置複雜,一般是DBA作為前兩種方案的備份。
先看看exp/imp的用法:
1.基本的exp寫法
-
exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log
- user: oracle使用者名稱
- passwd:資料庫使用者密碼
- infodb81: 資料庫的連線字串
- file:備份後的檔名
- log: 備份日誌檔案
2.exp的引數
引數一:buffer-
exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log buffer=4096000000
- 注意:buffer的單位是bytes,例如要設定1M,則是1024000,上面的例子設定的是400M。
- 根據我們測試的結果,加入buffer引數後,約有40%的效能提升。
- 效能對比:
- 加入buffer引數前(資料約9G,共31分鐘)
- ========== 備份使用者sinosybak 11-02-21 02:08:16 ====================
- ========== 備份使用者shyang 11-02-21 02:35:49 ====================
- 加入Buffer引數後(約18分鐘)
- ========== 備份使用者sinosybak 11-02-28 02:25:04 ====================
- ========== 備份使用者shyang 11-02-28 02:43:52 ====================
-
exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log direct=y
recordlength=65536
-
direct : 直接匯出,資料從磁碟讀入到快取記憶體,直接寫入到最終檔案,所以沒有資料行檢查與匹配的過程。據不權威的評測結果,效能有50%到70%的提升。
- 注意:
- 1.recordlength引數(IO緩衝大小),與direct引數配對使用,預設該引數為1024bytes,上面的例子為64K(最大值也為64K)。
- 2.使用direct後,buffer引數失效;
- 3.使用direct,不支援query子句(沒有行匹配的過程),不支援帶Blob型別欄位的表,但是系統會自動判斷、自動切換,也就是說不會因為一張表的問題,導致整個schema不能使用direct備份;
- 4.direct不支援表空間匯出。
引數三:consistent
-
exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log consistent=y
- consistent : 交叉一致性,用在序列值小於表中最大值的情況。
- 例如:exp預設情況下,先匯出序列,後匯出表,如果序列匯出之後,表又使用序列插入了新的資料,就會導致資料不一致。
其他引數:
-
USERID 使用者名稱/口令
- FULL 匯出整個檔案 (N) BUFFER 資料緩衝區的大小
- OWNER 所有者使用者名稱列表
- FILE 輸出檔案 (EXPDAT.DMP)
- TABLES 表名列表
- COMPRESS 匯入一個範圍 (Y)
- RECORDLENGTH IO 記錄的長度
- GRANTS 匯出許可權 (Y)
- INCTYPE 增量匯出型別
- INDEXES 匯出索引 (Y)
- RECORD 跟蹤增量匯出 (Y)
- ROWS 匯出資料行 (Y)
- PARFILE 引數檔名
- CONSTRAINTS 匯出限制 (Y)
- CONSISTENT 交叉表一致性
- LOG 螢幕輸出的日誌檔案
- STATISTICS 分析物件 (ESTIMATE)
- DIRECT 直接路徑 (N)
- TRIGGERS 匯出觸發器 (Y)
- FEEDBACK 顯示每 x 行 (0) 的進度
- FILESIZE 各轉儲檔案的最大尺寸
- QUERY 選定匯出表子集的子句
- 下列關鍵字僅用於可傳輸的表空間
- TRANSPORT_TABLESPACE 匯出可傳輸的表空間元資料 (N)
- 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