Oracle Table、Tablespace的存储空间的压缩和回收

早上帮朋友看一个服务器(测试环境)、Oralce装在了/home/oracle下面。。一共就40多G现在全用满了,数据库现在连不上了。

去目录里面看了看,清了清alter和trace文件夹里日志(我喜欢用du -sh * 一步步往下定位),然而也没释放多少。

看了下数据文件,system01.dbf 17个G了... undo表空间也4个多G

先给他建了个新undo,然后切过去,然后把老undo删了(虽然删了,但是直到重启库后操作系统的空间才释放出来)

然后查了一下system表空间的情况,发现最大的是aud$,应该是开着审计呢,show parameter audit_trail 看了一下是DB,于是alter system set audit_trail=NONE scope=spfile 把它关了

然后aud$这个表也是直接truncate了。

然后就怎么考虑把这个dbf大小降下去,网上查了查,好像只能resize。

select max(block_id)*8/1024/1024 'G' from dba_extents where file_id=xxx;查了一下,然后按照这个查出来的结果resize

这个dbf其实没有resize太多。就往下降了2G多,其实现在这个dbf里还是有绝大部分的块是unused,但是没办法,max block_id摆在那。。其实最好的办法是把这个库重建了

 

整完之后,我就去网上查看然后整理总结了一下表和表空间的回收、收缩的一些知识点,如下:

alter table xxx shrink space:
       收缩表,降低高水位线
前提:
1.只对ASSM(Auto Segment Space Management)表空间有效  
2.需开始行移动alter table xxx enable row movement(开启行移动会照成引用表的数据库对象失效);
3.以下情况不能用shrink:IOT索引组织表、用rowid创建的物化视图的基表、带有函数索引的表、SECUREFILE 类型的大对象、压缩表

该语句执行分为两个阶段:
1.数据重组(compact):将数据尽量排在段的前面,需要开启行移动且禁用基于rowid的相关的触发器,alter table xxx shrink space compact命令可以只执行这一步骤,过程中会加行级X锁,有一种聚合的感觉
2.HWM调整:降低高水位,释放空闲数据块,过程中会加表级X锁

alter table xxx shrink space cascade:连同表的级联对象一起整理(比如索引)
alter index xxx shrink space:收缩索引

alter table xxx move(tablespace xxxx):
       收缩或者迁移表,相当于是把表拿到另一个地方(本表空间或者其他表空间),然后重新构建和组织表,达到减少存储碎片、降低HWM的效果
需要额外的存储空间、move后索引需要rebuild,执行的时候也是表级X锁

alter database datafile 'xxx' resize xx:
       收缩数据文件大小(物理层面),从操作系统的存储空间中可以直观的看出效果
resize的大小参考 select max(block_id)*8/1024/1024 'G' from dba_extents where file_id=xxx;这个值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值