本文整理了oracle exp和imp在工作中實用的例子。
1.單表導出,導入
(1) 導出
exp scott/tiger rows=y indexes=n compress=n buffer=20480000 feedback=100000 file=/tmp/emp1.dmp log=/tmp/emp1.log tables=emp1
(注:1.默認的 EXP 時, compress = Y,也就是把所有的數據壓縮在一個塊上 也導入時 , 如果不存在連續一個大數據塊 , 則會導入失敗 . 導出 80M 以上的大表時 , 記得 compress= N, 則不會引起這種錯誤 則不會引起這種錯誤 。
2. 參數 BUFFER定義了每一次讀取導出文件的數據量,設越 大就定減少 export 進程讀取數據的次,從而提高導入效率。 進程讀取數據的次,從而提高導入效率。 BUFFER 的大小取決於 的系統的應用、數據庫規模,通常設為百兆足夠了。通常設置為(20-100M),buffer 參數對直接路徑導出direct=y沒有影響)
3.feedback 意思是多少行返回一次 可以根據實際情況修改
4.(ROWS=Y導出數據行, ROWS=N 不導出數據行
5. indexes=n 不導出索引,因為索引可以直接重建,在恢復數據的過程中,若 在恢復數據的過程中,若 indexes=n ,則表上的索引不會被恢復,但是主鍵對應的唯一索引將
無條件恢復,這是為了保證數據完整性)
(2)導入
imp scott/tiger fromuser=scott touser=scott rows=y indexes=n commit=y buffer=51200000 feedback=100000 ignore=n file=/tmp/emp1.dmp log=/tmp/emp1.log
(注:1.ignore 標明在執行‘CREATE’命令時,是否忽略遇到的錯誤。若 ignore=y,Oracle不執行 CREATE TABLE語句, 直接將數據插入到表中,如果插入的記錄違背了約束條件,比如
主鍵約束,則出錯的記錄不會插入,但合法的記錄會添加到表中。
若 ignore=n ,Oracle 不執行 不執行 CREATE TABLE語句,同時也不會將數據插入 到表中,而是忽略該的錯誤繼續恢復下一個。
導入語句的ignore參數=y,忽略創建錯誤。比如庫中已存在表,但無數據,加上此參數即可導入數據而不會報錯)
2.用戶模式導出,導入
(1) 導出
exp scott/tiger owner=scott rows=y indexes=n compress=n buffer=20480000 feedback=100000 file=/tmp/scott.dmp log=/tmp/scott.log
若 ignore=y,Oracle不執行 CREATE TABLE語句, 直接將數據插入到表中
(2)導入
整個用戶
imp scott/tiger fromuser=scott touser=scott rows=y indexes=n commit=y buffer=51200000 feedback=100000 ignore=n file=/tmp/scott.dmp log=/tmp/scott.log
導入一個用戶的某個表
imp scott/tiger fromuser=scott touser=scott rows=y indexes=n commit=y buffer=51200000 feedback=100000 ignore=n file=/tmp/scott.dmp log=/tmp/scott.log
tables=emp1
3.完全模式導出,導入
(1)導出
exp system/oracle rows=y indexes=n compress=n buffer=20480000 feedback=100000 full=y file=/tmp/oracle.dmp log=/tmp/oracle.log
(2)導入
imp system/oracle rows=y indexes=n commit=y buffer=20480000 feedback=100000 ignore=y full=y file=/tmp/oracle.dmp log=/tmp/oracle.log
4.數據庫對象有主外鍵約束
不符合主外鍵約束時,數據會導入失敗
解決辦法
先導入主表,再導入依存表
disable 目標導入對象的主外鍵約束,導入數據后再enable它們
5.權限不夠
如果A用戶的數據導入B用戶下,A用戶需要有imp_full_database權限
6.導入大表(大於80M)時,存儲分配失敗
默認EXP時,compress=Y 也就是把所有的數據壓縮在一個數據塊上,導入時如果不存在連續一個大數據塊,則會
導入失敗導出80M 以上的大表時,記得compress=N,則不會一起這種錯誤。
7.imp和exp使用的字符集不同
如果字符集不同,導入會失敗,可以改變unix環境變量或者windows注冊表里NLS_LANG相關信息,導入完成再改回來。
8.imp和exp版本不能往上兼容
可以從低版本導入高版本,但不能從高版本導入版本
如果遇到遷移因版本不同的問題,可以用低版本的export導出,到導入到低版本的。