impdp的TABLE_EXISTS_ACTION参数选项

简介: impdp有一个参数选项TABLE_EXISTS_ACTION,help=y的解释为:Action to take if imported object already exists.
impdp有一个参数选项TABLE_EXISTS_ACTION,help=y的解释为:
Action to take if imported object already exists.
Valid keywords are: APPEND, REPLACE, [SKIP] and TRUNCATE.
 
官方文档有句话:
“Only objects created by the Import will be remapped. In particular, the tablespaces for preexisting tables will not be remapped if TABLE_EXISTS_ACTION is set to SKIP, TRUNCATE, or APPEND.”。
仅仅是import创建的对象会被重新映射,如果使用了SKIP、TRUNCATE或APPEND,已存表对应的表空间不会有变化。
 
官方文档(Oracle® Database Utilities11g Release 2 (11.2))中对这个参数的描述如下:
这个参数目的是为了告诉impdp,试图创建的表是否在库中已存在。
默认值是skip,但若设置了CONTENT=DATA_ONLY,则默认值是APPEND,不是SKIP。
TABLE_EXISTS_ACTION=[SKIP | APPEND | TRUNCATE | REPLACE]
SKIP:跳过这张表,继续下一个对象。如果CONTENT设置了DATA_ONLY参数,则不能使用SKIP。
APPEND:会加载数据至对象,但不会影响已存在的行。
TRUNCATE:删除已存在的行,然后加载所有的数据。
REPLACE:drop已存在的表,然后create并加载数据。如果CONTENT设置了DATA_ONLY,则不能使用REPLACE。
 
还有一些其他的考虑:
1. 使用TRUNCATE或REPLACE,确保所有涉及的表行不会存在其他的参照约束关系。容易理解,例如目标表是和其他表存在外键关联,但只导入这张表,就可能会破坏这种关系。
2. 使用SKIP,APPEND,TRUNCATE,已存在表的依赖对象,例如索引、grants授权、触发器和约束,不会被修改。对于REPLACE,如果依赖对象未被显式或隐式使用EXCLUDE排除,并且存在于dump文件中,则会drop然后create重建。
3. 使用APPEND或TRUNCATE,会在执行操作前进行一些检查,以确保源dump和已存表兼容,包括:
(1) 若已存在的表有active的约束和触发器,就会使用外部表访问的方法加载数据。如果任何行违反了约束,则加载失败,不会有任何数据加载进来。当然,可以使用DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS来跳过这环节。
(2) 如果需要加载一些可能会违反约束的数据,可以考虑先disable这些约束,加载数据后,删除这些有问题的记录,然后再enable约束。
(3) 使用APPEND,数据会加载至新的空间,即使现有空间仍能重用。可以加载完成后,压缩数据。
另外,如果数据泵发现原表和目标表不匹配(例如两张表的列数量不同,或者目标表中有一列不在原表中),他会比较两张表的列名。如果两张表至少有一个列相同,则会导入这个列的数据(前提是数据类型兼容)。这种做法也有一些限制,
(a) 如果使用network参数导入则不能使用。
(b) 以下列的类型不能删除:列对象、列属性、嵌套表列、基于主键的引用列。
还有就是TRUNCATE不能用于聚簇表。
 
通过对一张表使用以上四种选项的实验,来看看区别。
 
测试表:
create table test(id number);
insert into test values(1);
commit;
expdp user_exp/user_exp directory=EXPDP_DIR dumpfile=user_exp.dmp
insert into test values(2);
commit;
此时user_exp.dmp包含test表,且有一条id=1的记录。表中有id=1和id=2两条记录。
 
REPLACE选项
impdp user_exp/user_exp TABLE_EXISTS_ACTION=replace dumpfile=user_exp.dmp directory=expdp_dir
SQL> select * from test;
        ID
----------
         1
此时表中只有id=1的记录,说明使用dmp覆盖了test表。
SKIP选项
impdp user_exp/user_exp TABLE_EXISTS_ACTION=skip dumpfile=user_exp.dmp directory=expdp_dir
ORA-39151: Table "USER_EXP"."TEST" exists. All dependent metadata and data will be skipped due to table_exists_action of skip
SQL> select * from test;
        ID
----------
         1
         2
此时导入报错,说明是skip了已存在的对象,test表仍保持原状。

APPEND选项
impdp user_exp/user_exp TABLE_EXISTS_ACTION=append dumpfile=user_exp.dmp directory=expdp_dir
ORA-39152: Table "USER_EXP"."TEST" exists. Data will be appended to existing table but all dependent metadata will be skipped due to table_exists_action of append
SQL> select * from test;
        ID
----------
         1
         2
         1
虽然报错,但仍插入了test记录,报错提示了数据会append附加至已存在表中,但若有依赖关系的元数据,则会忽略。
 
TRUNCATE选项
impdp user_exp/user_exp TABLE_EXISTS_ACTION=truncate dumpfile=user_exp.dmp directory=expdp_dir
ORA-39153: Table "USER_EXP"."TEST" exists and has been truncated. Data will be loaded but all dependent metadata will be skipped due to table_exists_action of truncate
SQL> select * from test;
        ID
----------
         1
报错提示对象已被truncate,但若有依赖关系的元数据,会被忽略。
目录
相关文章
|
25天前
|
缓存 自然语言处理 API
阿里巴巴国际站关键字搜索 API 实战:3 步搞定多语言适配 + 限流破局,询盘量提升 40%
跨境电商API开发常陷合规、多语言、限流等坑。本文详解从国际合规(GDPR/CCPA)到参数优化、数据结构化及区域化搜索的全链路方案,附Python代码模板与缓存重试架构,助力提升调用成功率至99%+,精准询盘增长42%。
|
NoSQL Java Redis
介绍Redis的各种用途以及使用场景
介绍Redis的各种用途以及使用场景 Redis 一、为什么使用 解决应用服务器的cpu和内存压力 减少io的读操作,减轻io的压力 关系型数据库的扩展性不强,难以改变表结构 二、优点: nosql数据库没有关联关系,数据结构简单,拓展表比较容易 nosql读取速度快,对较大数据.
12110 1
|
Kubernetes Cloud Native 网络协议
Kubernetes 高可用性与灾难恢复方案
【8月更文第29天】随着业务的不断增长,保持应用程序的高可用性和灾难恢复能力变得越来越重要。Kubernetes 作为现代云原生应用的主要平台,提供了丰富的工具和方法来保证应用的高可用性以及快速恢复的能力。本文将详细介绍如何利用 Kubernetes 的功能来构建高可用性的系统,并实施有效的灾难恢复策略。
582 2
|
10月前
|
存储 人工智能 API
七种RAG架构cheat sheet!
RAG 即检索增强生成,是一种结合检索技术和生成模型的人工智能方法。Weaviate厂商给出了七种RAG架构cheat sheet。
732 18
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
189 10
|
存储 算法 Java
【算法设计与分析】— —实现活动安排问题的贪心算法。
【算法设计与分析】— —实现活动安排问题的贪心算法。
|
安全 网络协议 Shell
Ubuntu端口转发
Ubuntu端口转发的相关配置
6301 0
|
数据可视化 Linux Shell
配置SSH远程登录和免密登录
配置SSH远程登录和免密登录
|
文字识别 Python Windows
Python3,自动识别图片文字,这个库,我爱了。
Python3,自动识别图片文字,这个库,我爱了。
48687 1
Python3,自动识别图片文字,这个库,我爱了。