代码改变世界

数据泵在导入数据时为什么会大量使用undo

  abce  阅读(218)  评论(0编辑  收藏  举报

1.为什么undo在不断增长

可能是开启了undo的自动扩展功能。如果undo空间不够,会报以下错误信息:

1
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'

2.谁在使用undo

数据泵导入数据的时候,索引和主键约束会使用undo空间。

如果有索引,import不会使用direct_path方法导入数据。如果有主键约束,就会使用undo表空间。

在导入有主键的大表的时候,import数据泵在导入过程中,要在表上维护唯一索引,就会大量使用undo空间。

3.有哪些解决方法

(1)对于小表,可以不考虑该问题,

(2)对于大表

·导入之前,禁用主键约束,如果有外键约束,也要禁用

1
ALTER TABLE ... MODIFY CONSTRAINT ... DISABLE NOVALIDATE;

·仅导入数据,导入之后再创建索引

·impdp使用参数access_method=direct_path

·导入结束后,开启主键约束(外键约束也如此)

1
ALTER TABLE ... MODIFY CONSTRAINT ... ENABLE VALIDATE

  

脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--disable constraints
select 'ALTER TABLE ' || owner || '.' || table_name ||
       ' MODIFY CONSTRAINT ' || constraint_name || ' DISABLE NOVALIDATE;'
  from dba_constraints
 where owner = 'HR'
   and constraint_type = 'P'
 order by owner, table_name, constraint_name;
 
--enable constraints
select 'ALTER TABLE ' || owner || '.' || table_name ||
       ' MODIFY CONSTRAINT ' || constraint_name || ' ENABLE VALIDATE;'
  from dba_constraints
 where owner = 'HR'
   and constraint_type = 'P'
 order by owner, table_name, constraint_name;

  

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2017-02-07 12C配置EM Express的https端口
点击右上角即可分享
微信分享提示