impdp操作产生大量UNDO的原因及解决方法

本文探讨了在使用Oracle数据库工具impdp进行数据导入时,为何会出现大量UNDO的情况,并提供了相应的解决方案,帮助优化数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在IMPDP Job期间产生大量UNDO的大部分原因都是因为在目标数据库导入的表已经存在,并且在这个表上存在一个或多个的索引。在impdp job期间,插入的每一行都需要维护索引。

     要解决这个问题,请确保在目标数据库不存在需要导入的表,之后让impdp来创建表。也就是说在执行impdp DataPump job的时候不要使用TABLE_EXISTS_ACTION=APPEND或者TABLE_EXISTS_ACTION=TRUNCATE参数,除非是真正必须要使用。

     如果一个大数据量需要导入一个存在表,你不得不使用TABLE_EXISTS_ACTION=APPEND,那么请执行以下的步骤:
1).在目标数据库执行存在表的export,以至于在需要的时候能够恢复表的数据和相关对象的DDL操作。
2).如果在目标数据库存在的表上有触发器,如果可能考虑DROP它们。
3).确保在表上没有主键(索引),(如果你的目的是为了防止重复行,你必须要保留主键约束,这将不可避免在相关索引import job期间产生UNDO)。
4).如果在目标数据库存在的表上包含其它的索引,如果可能考虑DROP它们(注意在执行impdp期间使用EXCLUDE=INDEX不能跳过任何存在索引的维护工作)。
5).将数据导入目标数据库存在的表中。
6).重建索引、主键和触发器。

     DataPump会选择最佳的方法确保数据和元数据以最有效的方法完成导出和导入。
     默认情况在impdp期间,Impdp将维护索引,如果表和索引已经创建,不要使用direct_path,然而,如果没有索引强制约束,可以在DataPump导入命令行指定ACCESS_METHOD=DIRECT_PATH,DataPump能使用直接路径(direct path)方法实施导入。

     也可以通过禁用主键约束来实现直接路径加载数据(使用ALTER TABLE ... MODIFY CONSTRAINT ... DISABLE NOVALIDATE),之后在impdp期间使用access_method=direct_path参数加载数据,最后启用主键约束(使用ALTER TABLE ... MODIFY CONSTRAINT ... ENABLE VALIDATE)。

     在导入期间不创建索引消耗UNDO是非常小的,下面是一个很好的数据导出、导入案例(案例转载自: http://www.anbob.com/archives/1888.html ):

因一次硬件原因导致了服务器异常停机,防止蝴蝶效应及时进行了数据迁移,一周发现了这个决定正确的。
申请了2小时的停机时间。因数据不大且表空间开始使用不规范决定用expdp数据泵方式迁移。
在新设备
1).raid10+安装OS
2).安装oracle 10.2.0.1(single instance)+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值