oracle-使用數據泵對不同用戶和不同表空間的數據遷移
---------------------------------------------------2013/11/13
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
注意:如果oracle是10g的,要加參數 EXCLUDE=TABLE_STATISTICS 選項將 table_statistics 對象過濾。 否則會出現數據泵導入中table_statistics長時間等待、用impdp 導入,檢查 table_statistics 時等待了N長時間
總結:執行impdp時無需創建b用戶,在導入時會自動創建並改名用戶a為b(擁有a的所有權限等),自動設置默認表空間為轉換后的表空間b。如果有多個表空間需要轉換,則使用多個remap_tablespace=源:目標字段。
此種方法只限於支持oracle10g以上版本。