expdp和impdp
expdp
假設a用戶的默認表空間是a,導出用戶a所有數據:
如果是多實例
需要在命令行或終端手工指定實例
set ORACLE_SID=實例名 否則回報ORA-12560: TNS: 協議適配器錯誤
SQL> conn / as sysdba
SQL> create directory dir as '/home/oracle/';
SQL> grant read,write on directory dir to system;
$expdp system/oracle directory=dir dumpfile=data.dmp schemas=a logfile=data.log
impdp
導入a用戶所有數據到b,並且轉換表空間a為b:
SQL> conn sys / as sysdba
SQL> create directory dir as '/home/oracle/';
SQL> grant read,write on directory dir to system;
$impdp system/oracle directory=dir dumpfile=data.dmp remap_tablespace=a:b remap_schema=a:b logfile=data.log
解釋:
remap_schema=a:b 將數據的schema從a 轉換為b
remap_tablespace=a:b 將數據的tablespace 從a 轉換為b
1.導入的數據庫中已經有相同的用戶名和老舊的表
可以在后邊加上參數table_exists_action=replace
2.導入新的用戶中
需要加入參數remap_schame=原用戶名:新用戶名
例如
impdp estate/estate@orcl schemas=estate directory=zhxt dumpfile=ESTATE20160812LAOLING.DMP logfile=estate.log table_exists_action=replace remap_schame=原用戶名:新用戶名
注意:如果oracle是10g的,要加參數 EXCLUDE=TABLE_STATISTICS 選項將 table_statistics 對象過濾。 否則會出現數據泵導入中table_statistics長時間等待、用impdp 導入,檢查 table_statistics 時等待了N長時間
總結:執行impdp時無需創建b用戶,在導入時會自動創建並改名用戶a為b(擁有a的所有權限等),自動設置默認表空間為轉換后的表空間b。如果有多個表空間需要轉換,則使用多個remap_tablespace=源:目標字段。