impdp在线帮助中关于TABLE_EXISTS_ACTION参数的描述:
导入对象已存在时执行的操作。
有效的关键字为: APPEND, REPLACE, [SKIP] 和 TRUNCATE。
但是具体又有什么效果呢,还是真实的感受一下吧,以下仅供参考:
模拟初始环境
create table test (id int,name varchar(255)); insert into test values('1','zhang'); insert into test values('2','li'); create table test1 (id int,name varchar(255)); insert into test1 values('3','wang'); commit; 查询结果应该: SQL> select * from test; ID NAME ---------- ---------- 1 zhang 2 li SQL> select * from test1; ID NAME ---------- ---------- 3 wang
导出为test1
现在再插入以下数据:
insert into test values('4','xia'); insert into test1 values('5','ye'); insert into test values('6','qian'); commit;
导出为test2
不加参数就是默认skip,即TABLE_EXISTS_ACTION=skip
[oracle@ocm rzdb]$ impdp system/oracle directory=rzdb dumpfile=test2.dmp schemas=test logfile=test2.log Import: Release 11.2.0.3.0 - Production on 星期三 4月 24 21:43:48 2013 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_SCHEMA_01" 启动 "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/******** directory=rzdb dumpfile=test2.dmp schemas=test logfile=test2.log 处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE ORA-39151: 表 "TEST"."TEST" 已存在。由于跳过了 table_exists_action, 将跳过所有相关元数据和数据。 ORA-39151: 表 "TEST"."TEST1" 已存在。由于跳过了 table_exists_action, 将跳过所有相关元数据和数据。 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA 作业 "SYSTEM"."SYS_IMPORT_SCHEMA_01" 已经完成, 但是有 2 个错误 (于 21:43:50 完成)
APPEND:
[oracle@ocm rzdb]$ impdp system/oracle directory=rzdb dumpfile=test2.dmp schemas=test logfile=test2.log TABLE_EXISTS_ACTION=append Import: Release 11.2.0.3.0 - Production on 星期三 4月 24 21:50:19 2013 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_SCHEMA_01" 启动 "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/******** directory=rzdb dumpfile=test2.dmp schemas=test logfile=test2.log TABLE_EXISTS_ACTION=append 处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE 表 "TEST"."TEST" 已存在。由于附加了 table_exists_action, 数据将附加到现有表, 但是将跳过所有相关元数据。 表 "TEST"."TEST1" 已存在。由于附加了 table_exists_action, 数据将附加到现有表, 但是将跳过所有相关元数据。 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA . . 导入了 "TEST"."TEST" 5.453 KB 4 行 . . 导入了 "TEST"."TEST1" 5.429 KB 2 行 作业 "SYSTEM"."SYS_IMPORT_SCHEMA_01" 已于 21:50:23 成功完成
查询结果:
SQL> select * from test; ID NAME ---------- ---------- 1 zhang 2 li 1 zhang 2 li 4 xia 6 qian 已选择6行。 SQL> select * from test1; ID NAME ---------- ---------- 3 wang 3 wang 5 ye
由此可以看出append其实是在原有的数据基础上再增加现导入的数据
TRUNCATE:
[oracle@ocm rzdb]$ impdp system/oracle directory=rzdb dumpfile=test2.dmp schemas=test logfile=test2.log TABLE_EXISTS_ACTION=truncate Import: Release 11.2.0.3.0 - Production on 星期三 4月 24 21:54:20 2013 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_SCHEMA_01" 启动 "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/******** directory=rzdb dumpfile=test2.dmp schemas=test logfile=test2.log TABLE_EXISTS_ACTION=truncate 处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE 表 "TEST"."TEST" 已存在且已截断。由于截断了 table_exists_action, 将加载数据, 但是将跳过所有相关元数据。 表 "TEST"."TEST1" 已存在且已截断。由于截断了 table_exists_action, 将加载数据, 但是将跳过所有相关元数据。 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA . . 导入了 "TEST"."TEST" 5.453 KB 4 行 . . 导入了 "TEST"."TEST1" 5.429 KB 2 行 作业 "SYSTEM"."SYS_IMPORT_SCHEMA_01" 已于 21:54:23 成功完成
查询结果:
SQL> select * from test; ID NAME ---------- ---------- 1 zhang 2 li 4 xia 6 qian SQL> select * from test1; ID NAME ---------- ---------- 3 wang 5 ye
REPLACE:先drop掉表,然后创建表,再最后完成数据插入
[oracle@ocm rzdb]$ impdp system/oracle directory=rzdb dumpfile=test1.dmp schemas=test logfile=test1.log TABLE_EXISTS_ACTION=replace Import: Release 11.2.0.3.0 - Production on 星期三 4月 24 22:01:09 2013 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_SCHEMA_01" 启动 "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/******** directory=rzdb dumpfile=test1.dmp schemas=test logfile=test1.log TABLE_EXISTS_ACTION=replace 处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA . . 导入了 "TEST"."TEST" 5.429 KB 2 行 . . 导入了 "TEST"."TEST1" 5.421 KB 1 行 作业 "SYSTEM"."SYS_IMPORT_SCHEMA_01" 已于 22:01:14 成功完成
查询结果:
SQL> select * from test; ID NAME ---------- ---------- 1 zhang 2 li SQL> select * from test1; ID NAME ---------- ---------- 3 wang