参考文档:1358280.1
TABLE_EXISTS_ACTION 默认为:SKIP(但是如果设定了CONTENT=DATA_ONLY,那么默认的是APPEND) 作用:定义了如果要导入的表已经存在,impdp的动作 值及其含义: SKIP:不管已经存在的表,直接跳过 APPEND:保持现有数据不变,导入源数据 TRUNCATE:删掉现有数据,导入源数据 REPLACE:删掉现有表,并重建,导入源数据 测试: --环境 用户:lm,lm2 表: create table TEST ( ID NUMBER, UPDATETIME DATE ) 源端数据: insert into lm.test values(1,sysdate); insert into lm.test values(2,sysdate); SQL> select * from lm.test; ID UPDATETIME ---------- ----------- 2 2016/9/26 1 1 2016/9/26 1 导出: C:\Users\liming>expdp lm/lm directory=DATA_PUMP_DIR tables=lm.test dumpfile=test.dmp Export: Release 11.2.0.4.0 - Production on 星期一 9月 26 10:13:35 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 启动 "LM"."SYS_EXPORT_TABLE_01": lm/******** directory=DATA_PUMP_DIR tables=lm.test dumpfile=test.dmp 正在使用 BLOCKS 方法进行估计... 处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA 使用 BLOCKS 方法的总估计: 64 KB 处理对象类型 TABLE_EXPORT/TABLE/TABLE 处理对象类型 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT 处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT 处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . 导出了 "LM"."TEST" 5.421 KB 2 行 已成功加载/卸载了主表 "LM"."SYS_EXPORT_TABLE_01" ****************************************************************************** LM.SYS_EXPORT_TABLE_01 的转储文件集为: D:\APP\LIMING\ADMIN\ORCL\DPDUMP\TEST.DMP 作业 "LM"."SYS_EXPORT_TABLE_01" 已于 星期一 9月 26 10:13:38 2016 elapsed 0 00:00:02 成功完成 目标端数据: SQL> select * from lm2.test; ID UPDATETIME ---------- ----------- 1.SKIP C:\Users\liming>impdp lm/lm directory=DATA_PUMP_DIR tables=test remap_schema=lm:lm2 table_exists_action=skip Import: Release 11.2.0.4.0 - Production on 星期一 9月 26 10:23:06 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "LM"."SYS_IMPORT_TABLE_01" 启动 "LM"."SYS_IMPORT_TABLE_01": lm/******** directory=DATA_PUMP_DIR tables=test remap_schema=lm:lm2 table_exists_action=skip 处理对象类型 TABLE_EXPORT/TABLE/TABLE 表 "LM2"."TEST" 已存在。由于跳过了 table_exists_action, 将跳过所有相关元数据和数据。 处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA 处理对象类型 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT 处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT 处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS 作业 "LM"."SYS_IMPORT_TABLE_01" 已于 星期一 9月 26 10:23:08 2016 elapsed 0 00:00:02 成功完成 目标端数据: SQL> select * from lm2.test; ID UPDATETIME ---------- ----------- 2.APPEND C:\Users\liming>impdp lm/lm directory=DATA_PUMP_DIR dumpfile=test.dmp tables=lm.test TABLE_EXISTS_ACTION=APPEND remap_schema=lm:lm2 Import: Release 11.2.0.4.0 - Production on 星期一 9月 26 10:41:39 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "LM"."SYS_IMPORT_TABLE_01" 启动 "LM"."SYS_IMPORT_TABLE_01": lm/******** directory=DATA_PUMP_DIR dumpfile=test.dmp tables=lm.test TABLE_EXISTS_ACTION=APPEND remap_schema=lm:lm2 处理对象类型 TABLE_EXPORT/TABLE/TABLE 表 "LM2"."TEST" 已存在。由于附加了 table_exists_action, 数据将附加到现有表, 但是将跳过所有相关元数据。 处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA . . 导入了 "LM2"."TEST" 5.421 KB 2 行 处理对象类型 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT 处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT 处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS 作业 "LM"."SYS_IMPORT_TABLE_01" 已于 星期一 9月 26 10:41:42 2016 elapsed 0 00:00:02 成功完成 SQL> select * from lm2.test; ID UPDATETIME ---------- ----------- 2 2016/9/26 1 1 2016/9/26 1 再导入一次,查询数据: SQL> select * from lm2.test; ID UPDATETIME ---------- ----------- 2 2016/9/26 1 1 2016/9/26 1 2 2016/9/26 1 1 2016/9/26 1 果然是追加。 那如果有主键呢?? SQL> delete lm2.test where id=1; 2 rows deleted SQL> delete lm2.test where id=2 and rownum=1; 1 row deleted SQL> commit; Commit complete SQL> select * from lm2.test; ID UPDATETIME ---------- ----------- 2 2016/9/26 1 SQL> alter table lm2.test add constraint pk_id primary key(id); Table altered 导入: C:\Users\liming>impdp lm/lm directory=DATA_PUMP_DIR dumpfile=test.dmp tables=lm.test TABLE_EXISTS_ACTION=APPEND remap_schema=lm:lm2 Import: Release 11.2.0.4.0 - Production on 星期一 9月 26 10:56:37 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "LM"."SYS_IMPORT_TABLE_01" 启动 "LM"."SYS_IMPORT_TABLE_01": lm/******** directory=DATA_PUMP_DIR dumpfile=test.dmp tables=lm.test TABLE_EXISTS_ACTION=APPEND remap_schema=lm:lm2 处理对象类型 TABLE_EXPORT/TABLE/TABLE 表 "LM2"."TEST" 已存在。由于附加了 table_exists_action, 数据将附加到现有表, 但是将跳过所有相关元数据。 处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA ORA-31693: 表数据对象 "LM2"."TEST" 无法加载/卸载并且被跳过, 错误如下: ORA-00001: 违反唯一约束条件 (LM2.PK_ID) 处理对象类型 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT 处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT 处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS 作业 "LM"."SYS_IMPORT_TABLE_01" 已经完成, 但是有 1 个错误 (于 星期一 9月 26 10:56:40 2016 elapsed 0 00:00:03 完成) 目标端数据: SQL> select * from lm2.test; ID UPDATETIME ---------- ----------- 2 2016/9/26 1 只要有一条违反了主键约束,就不会导入数据。 3.truncate 目标端数据: SQL> select * from lm2.test; ID UPDATETIME ---------- ----------- 3 2016/9/26 1 C:\Users\liming>impdp lm/lm directory=DATA_PUMP_DIR dumpfile=test.dmp tables=lm.test TABLE_EXISTS_ACTION=TRUNCATE remap_schema=lm:lm2 Import: Release 11.2.0.4.0 - Production on 星期一 9月 26 12:19:33 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "LM"."SYS_IMPORT_TABLE_01" 启动 "LM"."SYS_IMPORT_TABLE_01": lm/******** directory=DATA_PUMP_DIR dumpfile=test.dmp tables=lm.test TABLE_EXISTS_ACTION=TRUNCATE remap_schema=lm:lm2 处理对象类型 TABLE_EXPORT/TABLE/TABLE 表 "LM2"."TEST" 已存在且已截断。由于截断了 table_exists_action, 将加载数据, 但是将跳过所有相关元数据。 处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA . . 导入了 "LM2"."TEST" 5.421 KB 2 行 处理对象类型 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT 处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT 处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS 作业 "LM"."SYS_IMPORT_TABLE_01" 已于 星期一 9月 26 12:19:37 2016 elapsed 0 00:00:03 成功完成 目标端数据: SQL> select * from lm2.test; ID UPDATETIME ---------- ----------- 2 2016/9/26 1 1 2016/9/26 1 原有数据丢失。 4.REPLACE 目标端表信息: OWNER OBJECT_NAME LAST_DDL_TIME LM2 TEST 2016/9/26 12:21:40 C:\Users\liming>impdp lm/lm directory=DATA_PUMP_DIR dumpfile=test.dmp tables=lm.test TABLE_EXISTS_ACTION=REPLACE remap_schema=lm:lm2 Import: Release 11.2.0.4.0 - Production on 星期一 9月 26 12:24:38 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "LM"."SYS_IMPORT_TABLE_01" 启动 "LM"."SYS_IMPORT_TABLE_01": lm/******** directory=DATA_PUMP_DIR dumpfile=test.dmp tables=lm.test TABLE_EXISTS_ACTION=REPLACE remap_schema=lm:lm2 处理对象类型 TABLE_EXPORT/TABLE/TABLE 处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA . . 导入了 "LM2"."TEST" 5.421 KB 2 行 处理对象类型 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT 处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT 处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS 作业 "LM"."SYS_IMPORT_TABLE_01" 已于 星期一 9月 26 12:24:42 2016 elapsed 0 00:00:03 成功完成 查看数据: SQL> select * from lm2.test; ID UPDATETIME ---------- ----------- 2 2016/9/26 1 1 2016/9/26 1 查看表信息: OWNER OBJECT_NAME LAST_DDL_TIME LM2 TEST 2016/9/26 12:24:42 重建了表。