oracle表碎片整理

记录一次oracle 11g整理表的命令

Oracle版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
操作系统:Windows Server 2008 R2 Enterprise - 64bit
-- 整理表,不影响DML操作
alter table TABLE_NAME shrink space compact;  --只整理碎片 不回收空间
-- 重置高水位,此时不能有DML操作
ALTER TABLE "表名" ENABLE ROW MOVEMENT; --启动行移动功能
ALTER TABLE "表名" SHRINK SPACE CASCADE; --整理碎片(含索引:CASCADE)并回收空间,并调整水位线。业务少时执行
ALTER TABLE "表名" DISABLE ROW MOVEMENT; --关闭行移动
-- 分析表
ANALYZE TABLE "表名" COMPUTE STATISTICS;

整理碎片后执行分析表,看水位线是否降低

-- 分析索引碎片
ANALYZE INDEX "表名索引名" VALIDATE STRUCTURE;
-- 查询分析后的锁片数据比例
SELECT NAME, HEIGHT, PCT_USED, DEL_LF_ROWS / LF_ROWS FROM INDEX_STATS;
-- 整理索引碎片
ALTER INDEX "表名索引名" REBUILD ONLINE;
-- Oracle系统每天晚上22点自己正常的收集命令
EXEC DBMS_STATS.GATHER_TABLE_STATS('实例名','表名',CASCADE=>TRUE); 

-- 查询表的删除、插入、修改、及哪些字段被Oracle整理
SELECT * FROM USER_TAB_MODIFICATIONS where table_name='表名';
-- 查询碎片占比
SELECT TABLE_NAME,
       ROUND(BLOCKS * 8 / 1024, 2) "占用空间",
       ROUND(NUM_ROWS * AVG_ROW_LEN / 1024 / 1024, 2) "实际空间",
       ROUND(BLOCKS / 10 / 1024, 2) "预留空间",
       ROUND(BLOCKS * 8 / 1024 - NUM_ROWS * AVG_ROW_LEN / 1024 / 1024 -
             BLOCKS / 10 / 1024,
             2) "碎片空间",
       ROUND(ROUND(BLOCKS * 8 / 1024 - NUM_ROWS * AVG_ROW_LEN / 1024 / 1024 -
                   BLOCKS / 10 / 1024,
                   2) / ROUND(BLOCKS * 8 / 1024, 2),
             2) 碎片百分比,
       BLOCKS,
       EMPTY_BLOCKS,
       NUM_ROWS,
       AVG_ROW_LEN
  FROM USER_TABLES
 WHERE BLOCKS > 0
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值