当前位置:操作系统 > Unix/Linux >>

11g导入大量包含子分区的数据时表空间不足解决

11g导入大量包含子分区的数据时表空间不足解决
 
问题描述:
ORACLE11g使用impdp数据泵导入时遭遇:
ORA-01691: Lob 段 ISCS.SYS_LOB0000100750C00045$$ 无法通过 128 (在表空间 RT_DATA 中) 扩展
还可能遇到TEMP和UNDO表空间不足:
ORA-30036: 无法按 8 扩展段 (在还原表空间 'UNDOTBS1' 中)
ORA-01652: 无法按 8 扩展段 (在还原表空间 'TEMP 中)
解决方式:
查看RT_DATA表空间下面的段使用情况:
select *
  from (select owner,
  segment_name,
  tablespace_name,
  segment_type,
  bytes / 1024 / 1024 AS "SIZE(M)"
  from dba_segments
  order by 5 desc)
 where TABLESPACE_NAME = 'RT_DATA'
  AND rownum < 20;


LOBSEGMENT的系统命名规则是: 
SYS_LOB(10 digit object_id)C(5 digit col#)$$   表段
SYS_IL(10 digit object_id)C(5 digit col#)$$  索引
查看段空间使用者:
select * from dba_objects where object_id='0000100750';


最终发现11g导入时,impdp命令在默认表空间RT_DATA中生成的sys_import_table_01表中字段xml_clob为可变字段,且占用大量空间,下面是11条记录的片段。
select object_name,
  object_schema,
  partition_name,
  subpartition_name,
  object_tablespace,
  xml_clob,
  round(dbms_lob.getlength(xml_clob) / 1024 ) as "XML_CLOB SIZE(K)"
  from SYS_IMPORT_TABLE_01
 where rownum < 12;


相比10g的sys_import_table_01 ,11g增加了子分区的描述,从该表由原来82列变为95列,11g中在该表中对子分区的记录,会导致xml_clob列占用空间巨大,上述结果中子分区每条信息占用导致默认表空间爆满。
而这个原因目前不得而知,网上资料甚少,还请高手指点。不过可以通过手动扩展或自动扩展默认表空间,等完成导入之后,再收缩默认表空间。

方法一(手动扩展):
alter database datafile '/data1/oradata/i1000/rt_data01.dbf' resize 10G;
impdp结束后:
alter database datafile '/data1/oradata/i1000/rt_data01.dbf' resize 2G;

方法二(自动扩展):
alter database datafile '/data1/oradata/i1000/rt_data01.dbf'  autoextend on;
impdp结束后:
alter database datafile '/data1/oradata/i1000/rt_data01.dbf' resize 2G autoextend off ;
如果遭遇temp和undo表空间不足,亦如此扩展。
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,