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表空间不足,亦如此扩展。
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表空间不足,亦如此扩展。