解决oracle exp/imp导入表空间过大问题

本文介绍在Oracle数据库中使用exp/imp工具导入空表导致表空间占用过大的问题及解决办法。通过对比compress选项的不同设置,展示如何有效减少表空间的使用。

通过exp/imp进行数据库备份或搭建测试环境。

在imp中导入一个用户模式时,即使是空表(ROWS=N),表空间占用很大(20多GB), 后续导入会报"Unable to INITIAL EXTENT ....tablespace"  错误。

 

查找原因发现是表空间已满了。(可通过数据库自带的em管理页面查看)

看一个简单的实验:

查看某个表空间大小:

select /*+ ordered use_merge(a,b) */
   a.tablespace_name             表空间名,
   total/(1024*1024)             表空间大小,
   (total-free)/(1024*1024)        表空间使用大小,
   free/(1024*1024)             表空间剩余大小,
   round((total-free)/total,4)*100 "使用率%"
from (select   tablespace_name,sum(bytes) free from dba_free_space
       group by tablespace_name) a,
   (select   tablespace_name,sum(bytes) total from dba_data_files
       group by tablespace_name) b
where   a.tablespace_name = b.tablespace_name
and a.tablespace_name = 'TEST_GENERAL_DAT_TS';

导入前:(单位MB)

表空间名                             表空间大小              表空间使用大小  剩余大小       使用率

IA_GENERAL_DAT_TS        37067.984375        .171875        37067.8125        0%


查看某个用户段大小:

select sum(t.bytes) from dba_segments t where t.owner='TEST';

导入前  0.

 

导入一个用户后,导出文件.dmp时的选项(compress = Y)

表空间大小

 1        IA_GENERAL_DAT_TS        37067.984375        26485.671875        10582.3125        71.45%

 

select sum(t.bytes) from dba_segments t where t.owner='TEST';

 sum  = 37725732864 bytes

 

把该用户删掉,重新导入。导出.dmp文件时的选项(compress = N)

表空间大小

1        IA_GENERAL_DAT_TS        37067.984375        5.421875        37062.5625        .01%

          

select sum(t.bytes) from dba_segments t where t.owner='TEST';

 sum  = 8847360 bytes

 

通过上述加上compress=n 选项即可解决导入空表时表空间过大的问题。

compress 选项并非压缩的意思,而是与表的initial storage 设置相关的, 如果为Y, 即导入的表大小跟原始数据库表大小一致(即使是空表!!)


 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值