Oracle 數據泵使用詳解


數據泵使用EXPDP和IMPDP時應該注意的事項:

EXP和IMP是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。

EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。

IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件。

expdp或impdp命令時,可暫不指出用戶名/密碼@實例名 as 身份,然后根據提示再輸入,如:


expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dir;
環境
windows2003SP2

oracle11gR1
使用expdp和impdp
1.命令行打開sqlplus
sqlplus /nolog
conn / as sysdba
2.創建邏輯目錄,該命令不會在操作系統創建真正的目錄(最好手工先建好),最好以administrator等管理員創建。
create directory dir as 'd:\dump'; //dir名稱可以隨便命名 需要手工創建d:\dump
3.查看管理理員目錄(同時查看操作系統中是否存在,因為Oracle並不關心該目錄是否存在,如果不存在,則出錯)
select * from dba_directories;
4.給scott用戶賦予在指定目錄的操作權限,最好以system等管理員賦予。
grant read,write on directory dir to scott;
5、導出數據

1)按用戶導

expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dir logfile=expdp.log

2)並行進程parallel

expdp scott/tiger@orcl directory=dir dumpfile=scott3.dmp parallel=40 job_name=scott3

3)按表名導

expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dir;

4)按查詢條件導

expdp scott/tiger@orcl directory=dir dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';

5)按表空間導

expdp system/manager DIRECTORY=dir DUMPFILE=tablespace.dmp TABLESPACES=temp,example;

6)導整個數據庫

expdp system/manager DIRECTORY=dir DUMPFILE=full.dmp FULL=y;
6、還原數據

1)導到指定用戶下

impdp scott/tiger@orcl DIRECTORY=dir DUMPFILE=expdp.dmp SCHEMAS=scott logfile=impdp.log

2)改變表的owner

impdp system/manager DIRECTORY=dir DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;

3)導入表空間

impdp system/manager DIRECTORY=dir DUMPFILE=tablespace.dmp TABLESPACES=example;

4)導入數據庫

impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;

5)追加數據

impdp system/manager DIRECTORY=dir DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION



****************************************************************************************
LINUX環境(RHEL5)
oracle10g和oracle11g
使用expdp和impdp
1.命令行打開sqlplus
sqlplus /nolog
connect system/oracle
2.創建邏輯目錄,該命令不會在操作系統創建真正的目錄(最后手工先建好),最好以system等管理員創建。
create directory dpdata1 as '/home/oracle/dump';
3.查看管理理員目錄(同時查看操作系統是否存在,因為Oracle並不關心該目錄是否存在,如果不存在,則出錯)
select * from dba_directories;
4.給scott用戶賦予在指定目錄的操作權限,最好以system等管理員賦予。
grant read,write on directory dpdata1 to scott;
5.導出數據
1)按用戶導
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
2)按表空間導
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
3)導整個數據庫
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
6.還原數據
1)導到指定用戶下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
3)導入表空間
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4)導入數據庫
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
*************************************************************************************
expdp/impdp 不同用戶,不同表空間的使用
假設a用戶的默認表空間是a,導出用戶a所有數據:

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以上版本。


數據泵導入中table_statistics長時間等待問題 
用impdp 導入,檢查 table_statistics 時等待了N長時間。

網上說這是oracle 10G impdp 的一個bug,命令中若定義了 remap_schema 項,也就是原用戶名和導入的用戶名不一致,則會有這個問題。
網上提供的解決辦法是,讓導入和導出的用戶名一致,或者在導入時通過 EXCLUDE=TABLE_STATISTICS 選項將 table_statistics 對象過濾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM