impdp之table_exists_action

参考文档: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

重建了表。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丹心明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值