理解exp, imp 使用direct=y 及imp commit=y
exp 中direct 引數預設為N , 即採用普通路徑匯出,和使用程式匯出恢復資料一樣,和執行其他查詢一樣, 從磁碟和高速緩衝區讀取資料, 從那裡,資料被移到一個工作區,在工作區,行被提出來, 檢查和查詢中的where子句是否匹配,然後將資料送到匯出程式。
exp direct =y , 表示直接路徑匯出, 比普通路徑匯出速度快很多, 不能使用query子查詢, SQL查詢仍然被執行,儲存表的塊仍然被讀入資料庫的快取記憶體區,但是它們從快取記憶體區直接傳給exp匯出程式, 相對普通路徑,少了檢查行是否匹配的這個過程, 所以Query子句不能在direct=y 的情況下使用。 表包含Lob的時候也不能使用y 。
-------------------------------------------------------------------------------------------------------------------------------------
oracle是9204,資料透過exp匯出,以前使用direct=n的方式匯出,考慮到效率問題,使用了direct=y引數,雖說效率得到大幅提高,但是再恢復資料庫是會提示imp-00051,imp-00008等的相關錯誤;經metalink查詢發現這是9204的bug,就是再exp時如果指定了direct=y可能導致exp的輸出檔案存在中斷的情況。解決辦法是,升級到9207或者使用direct=n. 這個問題提示我們不管用什麼方式進行備份,一定要定時將備份檔案進行恢復測試,及時發現問題,以防真正出現問題時候,備份無法使用的情況
-----------------------------------------------------------------------------------------------------------------------------------------
在匯入資料的時候,假如commit=Y,則由引數Buffer決定匯入過程中什麼時候做Commit操作。*(Note:"For tables containing LONG, LOB, BFILE, REF, ROWID, UROWID columns, array inserts are not done. If COMMIT=y, Import commits these tables after each row.") 匯入的時候,Oracle使用Array Insert.將record從dmp file中讀取到imp process buffer中,當buffer“滿”的時候,Bind Array,執行Insert. 看來Oracle也透過批次繫結來提高imp效能,以前還以為是read one record,insert one record,read one record,insert one record…… ******************************************************************************** INSERT /*+NESTED_TABLE_SET_REFS+*/ INTO "T_1K" ("X")VALUES (:1) call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- -------
Parse 1 0.00 0.01 0 4 0 0
Execute 102 0.02 0.04 0 11 174 6601
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- -------
total 103 0.02 0.05 0 15 174 6601 Misses in library cache during parse: 1 ******************************************************************************** 表T_1K每個記錄在imp的時候佔用大概1k的buffer,如上是設定了buffer=64k imp的結果。 Array Bind (Commit)102次,匯入紀錄6601條 6601/102 =64.7156863 about 64 rows/insert, using a 64k buffer —— that makes sense 看不出Oracle內部使用array bind 的地方挺多的: arraysize in sqlplus, Forall bind / fetch in PL/SQL……
-
資料引用:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-613531/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- IMP中commit=y的用法~~~MIT
- 小議IMP操作引數COMMIT=Y(三)MIT
- 小議IMP操作引數COMMIT=Y(二)MIT
- 小議IMP操作引數COMMIT=Y(一)MIT
- (轉載)小議IMP操作引數COMMIT=YMIT
- 【EXP/IMP】使用EXP /IMP工具“模糊”匯出和匯入
- exp/imp工具的使用
- 【exp/imp不同版本】Oracle不同版本的exp/imp使用注意事項Oracle
- exp/imp工具
- Oracle imp/expOracle
- expdp\impdp及exp\imp 詳解
- imp commit引數的使用MIT
- 轉摘:ORACLE:IMP工具ignore=y的一個問題Oracle
- oracle exp和impOracle
- oracle imp和expOracle
- exp imp資料
- oracle exp imp 用法Oracle
- EXP&IMP PIPE
- 關於imp和exp的有關理解
- ORACLE exp/imp匯入報錯IMP-00009&IMP-00028&IMP-00015Oracle
- imp使用注意點(commit選項)MIT
- exp和imp詳解
- 淺談exp/imp(上)
- 淺談exp/imp(下)
- exp/imp命令詳解
- IMP和EXP筆記筆記
- EXP/IMP 學習(五)
- EXP/IMP 學習(四)
- EXP/IMP 學習(三)
- EXP/IMP 學習(二)
- EXP/IMP 學習(一)
- EXP/IMP 學習(六)
- exp_imp實戰
- 不同版本exp/imp使用注意事項
- ORACLE IMP和EXP的使用實驗Oracle
- oracle實驗記錄 (使用exp/imp)Oracle
- imp commit,buffer 引數MIT
- exp/imp匯出匯入工具的使用