凡事都不是完美的。不論哪種計算機語言,不論它的實際操作技巧是如何靈活,都是避免不掉它的缺陷之處,當然在Oracle exp備份導入時。我們也需要注意一些在實際操作中經常發生的事項。
export到import關係到四個字符集
源數據庫的字符集——A
export_session的NLS_LANG環境變量——B
import_session的NLS_LANG環境變量——C
目標數據庫的字符集——D
1. A=B時,exp_session不會對源數據庫數據進行字符集轉換,並把exp_session的字符集(即源數據庫字符集)記錄到導出文件(導出文件頭的第2、3個字節)中。
2. A!=B時,9I之前的DB exp_session會對源數據庫的所有數據進行字符集轉換,轉換爲NLS_LANG的字符集B,並把exp_session的字符集記錄到導出文件中;9I及9I以後的DB, exp_session只會對數據字典的內容進行字符集轉換,轉換爲NLS_LANG的字符集B,其他數據仍爲源數據庫的字符集不變仍爲A,還是會把exp_session的字符集B記錄到導出文件中。3. B=C時,import_session讀dump文件的內容,檢查導出時使用的字符集設置,發現與import_session的NLS_LANG相同,則dump文件導入到import_session不做字符集轉換。
4. B!=C 時,字符集B在導入到import會話時會轉換成字符集C,注意:這種轉換只能在單byte字符集之間進行,不支持單到多、多到單、多到多,所以對於多 Byte字符集的導入(如:UTF8)需要設置import_Session字符集和import_session字符集相同。 import_session字符集應該是export_session字符集的超集,否則,專有的字符將難以正確轉換。
5. C=D時,import_session中的數據不經過轉換就直接插入數據庫中。
6. C!=D時,import_session中的數據需要轉換後才能插入數據庫中。目標數據庫字符集是import_session字符集的超集,否則某些專有字符將不能正常轉換。
Oracle exp備份導入注意事項:
(1) 數據庫對象已經存在
一般情況, 導入數據前應該徹底刪除目標數據下的表, 序列, 函數/過程,觸發器等;數據庫對象已經存在, 按缺省的imp參數, 則會導入失敗如果用了參數ignore=y, 會把Oracleexp文件內的數據內容導入如果表有唯一關鍵字的約束條件, 不合條件將不被導入如果表沒有唯一關鍵字的約束條件, 將引起記錄重複。
(2) 數據庫對象有主外鍵約束
不符合主外鍵約束時, 數據會導入失敗解決辦法: 先導入主表, 再導入依存表disable目標導入對象的主外鍵約束, 導入數據後, 再enable它們
(3) 權限不夠
如果要把A用戶的數據導入B用戶下, A用戶需要有imp_full_database權限
(4) 導入大表( 大於80M ) 時, 存儲分配失敗
默認的EXP時, compress = Y, 也就是把所有的數據壓縮在一個數據塊上.導入時, 如果不存在連續一個大數據塊, 則會導入失敗.導出80M以上的大表時, 記得compress= N, 則不會引起這種錯誤.
(5) imp和exp使用的字符集不同
如果字符集不同, 導入會失敗, 可以改變unix環境變量或者NT註冊表裏NLS_LANG相關信息.導入完成後再改回來.
(6) imp和exp版本不能往上兼容
imp可以成功導入低版本exp生成的文件, 不能導入高版本Oracleexp生成的文件
使用方法:
例題格式及說明:
1.普通數據庫全部導出和導入
exp 用戶/密碼@dbName file=路徑.dmp full=y --還有其他的參數,看需要進行填寫
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log full=y commit=y ignore=y --全部導出
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2 --全部導入
以上就是對Oracle exp備份導入注意事項相關的內容的介紹,望你會有所收穫。
Oracle 12c數據庫企業版http://www.yuandingit.com/products/oracle/oracle_database/oracle_database/6587.html