expdp / impdp 用法詳解




一、注意事項:

EXP和IMP是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。
EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。
IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件。

二、使用expdp導出文件前的設置:

1、創建邏輯目錄,該命令不會在操作系統創建真正的目錄,最好以system等管理員創建(我登錄的是root用戶),選取linux上一個實際目錄,或者新建一個目錄,這里我選的是'/usr/local/tomcat'這個已經有的目錄,並將tomcat文件夾權限設為最高777,最簡單的方式就是右鍵文件夾,修改屬性.....:

進入oracle模式:su - oracle     
[oracle@iz2zehftd4ce4m2zqo3c6iz ~]$ sqlplus / as sysdba

SQL>create directory dmp_dir as '/usr/local/tomcat';

2、查看管理理員目錄(同時查看操作系統是否存在,因為Oracle並不關心該目錄是否存在,如果不存在,則出錯)
SQL>select * from dba_directories;

3、給用戶賦予在指定目錄的操作權限,最好以system等管理員賦予(我這里登錄的是root用戶,所以設置為public)。
SQL>grant read,write on directory dmp_dir to public;

SQL> show user;

SQL> host

備注:刪除目錄語句:SQL> DROP DIRECTORY dmp_dir;

三、導出數據

退出sql模式到oracle

1、按用戶導出數據

[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ expdp 用戶名/密碼@服務器IP地址/orcl schemas=用戶名 DIRECTORY=dmp_dir DUMPFILE=20190603.dmp logfile=20190603dmp.log;

2、按表名導
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ expdp test_demo/test_demo@orcl TABLES=sys_log,dept dumpfile=sys_log.dmp DIRECTORY=dmp_dir;

按指定一類的表名進行導出,比如導出表名前綴為test_的所有表:

[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ expdp test_demo/test_demo@orcl TABLES=test_% dumpfile=sys_log.dmp DIRECTORY=dmp_dir;

3、按查詢條件導
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ expdp test_demo/test_demo@orcl directory=dmp_dir dumpfile=sys_log1.dmp Tables=sys_log query=\"WHERE id=\'5280e\'\";

五、導入數據
1、導到指定用戶下

如果想導入的用戶已經存在,並且導入用戶名和導出的用戶名不一致:
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdp user2/pass2 directory=dmp_dir dumpfile=TestDemo.dmp REMAP_SCHEMA=user1:user2  remap_tablespace=user1space:user2space  EXCLUDE=USER

如果想導入的用戶不存在:
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$impdp system/passsystem directory=dmp_dir dumpfile=user1.dmp REMAP_SCHEMA=user1:user2

user2會自動建立,其權限和使用的表空間與user1相同,但此時用user2無法登錄,必須修改user2的密碼

如果想導入的用戶已經存在,並且導入用戶名和導出的用戶名一致:

[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdp test_demo/test_demo DIRECTORY=dmp_dir DUMPFILE=expdp.dmp SCHEMAS=test_demo;

impdp username/password table_exists_action=truncate  directory=DATA_PUMP_DIR dumpfile=expdpfilename.dmp logfile=implog.log

如果需要覆蓋或追加數據,則需要添加table_exists_action命令:

例如,導入到指定用戶下,並覆蓋原有表數據:

[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdp user2/pass2 table_exists_action=replace directory=dmp_dir dumpfile=TestDemo.dmp REMAP_SCHEMA=user1:user2 EXCLUDE=USER
table_exists_action含義:

skip 是如果已存在表,則跳過並處理下一個對象;

append是為表增加數據;

truncate是截斷表,然后為其增加新數據;

replace是刪除已存在表,重新建表並追加數據;

2、改變表的owner
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3、導入表空間
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4、導入數據庫
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5、追加數據
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION

表導入完成后,登錄plsql等工具,檢查下function、view這些是否有報錯,有報錯的查找下代碼原因,也可能是因為導入的原因需要重新編輯並運行下即可:

備注:密碼有特殊字符的加上引號:'username/"psdf$@FS"'

如果要導入的數據庫沒有表空間,則在impdp語句后加上參數:TRANSFORM=segment_attributes:n

例如: impdp test_demo/test_demo DIRECTORY=dmp_dir DUMPFILE=expdp.dmp SCHEMAS=test_demo TRANSFORM=segment_attributes:n

有上述錯誤時,檢查目錄文件是否是777權限
————————————————
版權聲明:本文為CSDN博主「論風煮雨」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_25034619/article/details/81382084


免責聲明!

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



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