匯入匯出我們經常用的是exp/imp命令,確實比較方便,但也有局限,例如需要匯入匯出的資料表空間名相同、schema名需要相同。
最近就碰到了這麼個問題,此時expdp和impdp這種資料泵的匯入匯出工具就起了作用。
待匯出表和索引的空間名:
SQL> select distinct tablespace_name from user_tables;
TABLESPACE_NAME
---------------
QXU_IMC_DATA
SQL> select distinct tablespace_name from user_indexes;
TABLESPACE_NAME
---------------
QXU_IMC_DATA
QXU_IMC_INDEX
INIT_IMC_DATA
1、匯出
首先需要建立dumpfile的路徑:
create directory test_dump='C:/dump';
匯出:expdp user/pwd directory=test_dump dumpfile=qxuimc.dmp schemas=qxuimc logfile=exp_qxuimc.log
在C:/dump下就會找到匯出的dmp檔案和記錄檔。
2、匯入
將dmp檔案放到待匯入的程式庫伺服器上。
同樣,若之前沒有建過dumpfile路徑,此時也需要建。
impdp user/pwd DIRECTORY=test_dump DUMPFILE=qxuimc.dmp REMAP_SCHEMA=qxuimc:*** LOGFILE=imp_test.log REMAP_TABLESPACE=QXU_IMC_DATA:***,QXU_IMC_INDEX:***,INIT_IMC_DATA:***
此處使用REMAP_SCHEMA表示將匯出的schema映射為新的名稱。REMAP_TABLESPACE表示將匯出的tablespace映射為新的名稱。
說明:
1、dumpfile可以使用select * from dba_directories;查看。
2、匯入之前需要刪除所有和匯入對象相同的對象,例如function、package、table、index、sequence、role等,否則匯入時會忽略這部分內容的匯入,將錯誤記錄到日誌中。
3、impdp和expdp的參數還有很多,這裡只用了最常用的,網上也有很多資料。
4、關於匯入匯出的版本問題,之前寫的一篇文章介紹過:
http://blog.csdn.net/bisal/article/details/17350155
Export client compatibility:Always use a version of the EXPORT utility that is equal to the lowest version of either the source or the target database.匯出用戶端相容性:建議使用和來源資料庫或目標資料庫中最低版本一致的EXPORT工具版本。
Import client compatibility:
Always use a version of the IMPORT utility that is equal to the version of the target database.匯入用戶端相容性:建議使用和目標資料庫版本一致的IMPORT工具版本。
我這裡匯出的版本是10g,匯入的是11g。expdp使用的是10g的,impdp使用的是11g,符合上面的標準。
對於和這種情況相反的情境,expdp支援version參數指定目標資料庫的版本。