一、注意事項:
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