Oracle中exp,imp(匯入匯出)資料遷移注意事項

不一樣的天空w發表於2017-07-26

這幾天做開發庫schema備份,出現些問題,記錄一下.

一,exp時,os語言環境和資料庫不同時會自動發生轉換.
   如果作業系統的字符集小於資料庫字符集,就可能出現亂碼現象.imp時,同理,也是有可能出現亂碼的.如果源庫和目標庫字符集是
相同的話,防止exp,imp過程出現字元轉換,我們可以在exp,imp動作前,手動設定語音環境和資料庫語言環境一樣.如資料庫語言環境

為AMERICAN_AMERICA.AL32UTF8,os是windows,使用命令set NLS_LANG=AMERICAN_AMERICA.AL32UTF8;os是linux or unix,使用命令

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8.


二,在遷移schema時,即使不遷移資料,也易發生ORA-1659錯誤.

   在上述錯誤發生後,select view,發現表的大小和源庫表大小是一樣的.而實際,我們只是遷移表結構,並沒有遷移資料(rows=n).

查詢表發現也是沒有遷移資料的,但它的儲存空間和源表是一樣的.也就是說它遷移了儲存空間.分析發現,是由於exp時,沒有設定參

數compress=n所致,由於此引數預設值為y,那麼它會在exp時,將源表所有資料壓縮到一個extent,也就是initial extent,而imp時,會

預分配initial extent大小的.因此此種情況下,極易發生ORA-1659錯誤.
   注:另在作有資料匯出時,如果表大小較大的話,使用此引數的預設值也極易發生ORA-1659錯誤.因為假設你的源表大小為100m,在

imp時,需分配initial extent大小為100m,如果此時,使用者所在表空間沒有連續100m空間,那麼就會報此錯誤了.


三,如果匯出統計資訊,在只匯出部分資料,或不匯出資料時,匯出統計資訊會報錯.另如果未匯出統計資訊,但匯入時,需匯入統計資訊

,那此時,匯入後,統計資訊會被鎖住,而無法更新統計資訊.
   此時,我們可使用包dbms_stats.unlock_schema_stats來解鎖.最好的辦法是,在exp,imp時,加入引數statistics=none,不exp,imp

統計資訊,在匯入完成後,在重新收集統計資訊.


四,在使用ftp跨系統cp dmp檔案時,一定要注意使用bin模式,來防止imp時,不能open檔案,而匯入失敗.


五,在作imp資料操作時,特別是imp大表時,為了防止發生ORA-1555錯誤,應設定引數commit=y,buffer=10000000(根據實際情況設定),此時,當buffer空間滿時,會自動提交.預設是imp一個表提交一次.

 

詳例
遷移使用者,但無需遷移資料,且源庫,目標庫語言環境都為AMERICAN_AMERICA.AL32UTF8,可如下操作:

匯出:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

exp user/pwd file=export.dmp log=export.log buffer=10000000 grants=n rows=n statistics=none compress=n

匯入:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

imp user/pwd fromuser=user1 touser=user2 rows=n statistics=none file=export.dmp log=export.log

出處:http://blog.163.com/card_2005/blog/static/117810368200991562719396/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2142617/,如需轉載,請註明出處,否則將追究法律責任。

相關文章