oracle导数据不释放内存,关于ORACLE数据库delete后释放空间问题

前些天给一家客户开发个接口,还原了正式数据库,由于数据库存储量太大,还原后基本没什么空间了,有个业务表使用频繁,决定删除前期数据,只留近两个月数据以便测试。

数据量太大,等待时间长,就分段删除的,删了一半左右吧,发现delete掉数据后空间不但没收缩,而且占用的存储空间还越来越大,于是乎决定看下怎么回事。

首先查了下表空间占用率:

select total.tablespace_name,Round(total.MB,2) as Total_MB, Round(total.MB-free.MB,2) as Used_MB, Round((1-free.MB/total.MB)*100,2) || '%' as Used_Rct

from (select tablespace_name,Sum(bytes)/1024/1024 as MB from dba_free_space group by tablespace_name) free, (select tablespace_name,Sum(bytes)/1024/1024 as MB from dba_data_files  group by tablespace_name) total

WHERE free.tablespace_name = total.tablespace_name;

发现UNDOTBS1这个表空间占了32G的存储空间,百度了下才知道这个是回滚段表空间,事物恢复、记录些日志什么的。知道用途后就放心删除了。

1、创建新的表空间:

create undo tablespace undotbs2 datafile '/oradata/ddptest/UNDOTBS1_01.dbf' size 100m reuse autoextend on next 100m maxsize unlimited;

2、更改splife配置:

alter system set undo_tablespace=undotbs2 scope=both;

3、删除原表空间:

drop tablespace undotbs2 including contents;

4、创建pfile:

create pfile from spfile;

这时发现存储空间并没有减少,重新查了下表空间占用率,已经没有UNDOTBS1的记录了,能查到UNDOTBS2的占用率。索性停掉oracle服务,直接去路径delete掉表空间,瞬间多了30多G空间。于是继续删除数据,删除了大半天终于删完了,回滚段表空间又重新建了一次,但是数据表空间占用率并没有下降。

手动释放表空间:

alter table tableName enable row movement;

alter tabletableName shrink space;

表空间占用率一下子就降下来了。

(清除回滚段表空间一定要慎重,尽量不要在正式数据库操作!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值