背景
搞了這么多年oracle,不論是開發和運維,自認為是都了解了,和dba差的只是熟練的問題,因為畢竟不是天天搞它。不過突然聽說數據泵導入的功能,大吃一驚,好像有印象,以為是落后的,一查,竟然是先進的,10g后推出的。慚愧。用了一把,簡單總結下了。和imp還是有所不同的,當用戶不同時,不是用的fromuser和touser,用的是remap_schema。
導入語句
impdp "xixi/123456@192.168.1.234:1521/orcl" dumpfile=backup.dmp directory=dump_dir
remap_schema=bobo:xixi remap_tablespace=TBS_BOBO:TBS_XIXI table_exists_action=SKIP TRANSFORM=segment_attributes:n
知識點
當使用IMPDP完成數據庫導入時,如遇到表已存在時,Oracle提供給我們如下四種處理方式:
a.忽略(SKIP,默認行為);
b.在原有數據基礎上繼續增加(APPEND);
c.先DROP表,然后創建表,最后完成數據插入(REPLACE);
d.先TRUNCATE,再完成數據插入(TRUNCATE)。
先用EXPDP生成一份dump文件
sec@secDB /expdp$ expdp sec/sec directory=expdp_dir dumpfile=`date +"%Y%m%d%H%M%S"`_sec.dmp logfile=`date +"%Y%m%d%H%M%S"`_sec.log
分別使用四中方式真實的感知一下具體效果
用到的IMPDP語句統一匯總在這里,方便參考。
SKIP:
impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=SKIP
APPEND:
impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=APPEND
impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=APPEND
REPLACE:
impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=REPLACE
impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=REPLACE
TRUNCATE:
impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=TRUNCATE
impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=TRUNCATE