oracle shrink space收缩表

segment shrink分为两个阶段:
1)、数据重组(compact):通过一系列insert、delete操作,将数据尽量排列在段的前面。在这个过程中需要在表上加RX锁,即只在需要移动的行上加锁。由于涉及到rowid的改变,需要enable row movement.同时要disable基于rowid的trigger,这一过程对业务影响比较小。
2)、HWM调整:第二阶段是调整HWM位置,释放空闲数据块。此过程需要在表上加X锁,会造成表上的所有DML语句阻塞。在业务特别繁忙的系统上可能造成比较大的影响。
shrink space 语句两个阶段都执行。
shrink space compact 只执行第一个阶段。
如果系统业务比较繁忙,可以先执行shrink space compact重组数据,然后在业务不忙的时候再执行shrink space降低HWM释放空闲数据块。
shrink必须开启行迁移功能。
alter table table_name enable row movement;
模拟收缩表:

--收集t1表统计信息,并查询t1表水位线
exec DBMS_STATS.GATHER_TABLE_STATS('APP', 'T1', method_opt => 'for all indexed columns',cascade=>TRUE);
select TABLE_NAME,TABLESPACE_NAME,NUM_ROWS,BLOCKS from dba_tables where table_name='T1';
T1CC15000247
--插入数据
insert into app.t1 (select * from EZC3_APPLY.CTV_SDZQZ);
commit;
T1CC115000688
--删除数据
select count(*) from app.t1; --15000
delete from app.t1 where ryxb='1';
select count(*) from app.t1; --6315
--再次查看水位线
exec DBMS_STATS.GATHER_TABLE_STATS('APP', 'T1', method_opt => 'for all indexed columns',cascade=>TRUE);
select TABLE_NAME,TABLESPACE_NAME,NUM_ROWS,BLOCKS from dba_tables where table_name='T1';
T1CC16315688(块没变化)
--开启t1表行移动,并且开始收缩表
alter table app.t1 enable row movement;
alter table app.t1 shrink space compact;
alter table app.t1 shrink space cascade;
--再次查看水位线
exec DBMS_STATS.GATHER_TABLE_STATS('APP', 'T1', method_opt => 'for all indexed columns',cascade=>TRUE);
select TABLE_NAME,TABLESPACE_NAME,NUM_ROWS,BLOCKS from dba_tables where table_name='T1';
T1CC16315279 (存储块减少)
模拟收缩表空间:

--插入数据增大表空间
begin
for i in 1 .. 1000
loop
insert into app.t1 (select * from EZC3_APPLY.CTV_SDZQZ);
end loop;
commit;
end; select * from dba_data_files where tablespace_name='CC1';
--现在文件大小
[oracle@deam orcl]$ du -sh cc*
613M cc1.dbf
605M cc2.dbf
--删除数据,收缩表
delete from app.t1;
alter table app.t1 enable row movement;
alter table app.t1 shrink space compact;
alter table app.t1 shrink space cascade;
--再次查看水位线
exec DBMS_STATS.GATHER_TABLE_STATS('APP', 'T1', method_opt => 'for all indexed columns',cascade=>TRUE);
select TABLE_NAME,TABLESPACE_NAME,NUM_ROWS,BLOCKS from dba_tables where table_name='T1';
--收缩表空间
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/cc1.dbf' RESIZE 30M;
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/cc2.dbf' RESIZE 30M;
--收缩后数据文件大小
[oracle@deam orcl]$ du -sh cc*
31M cc1.dbf
31M cc2.dbf

  

  

  

最新文章

  1. T-SQL中jion操作
  2. 关于在官网上查看和下载特定版本的webrtc代码
  3. spring boot注解之@Scheduled定时任务实现
  4. listview的头布局把我的ACTION_DOWN事件给吃了.....
  5. Java设计模式-访问者模式(Visitor)
  6. (第九周)视频发布及git统计报告
  7. fastjson和json-lib的区别
  8. 在eclipse中设计BPMN 2.0工作流定义的根本步骤
  9. Shiro使用总结
  10. Oracle管道函数示例
  11. __init__ __new__区别
  12. [Locked] Smallest Rectangle Enclosing Black Pixels
  13. POJ 2513 Colored Sticks - from lanshui_Yang
  14. mouseenter和mouseover的区别
  15. OpenCV3.1.0中调用MHI(Motion History Images, 运动历史图像)
  16. js 第二课
  17. 键盘监听事件KeyListener
  18. Derek解读Bytom源码-Api Server接口服务
  19. CodeForces 4A
  20. zabbix使用自定义key进行监控

热门文章

  1. java反射基础知识整理
  2. css预处理器scss/sass语法以及使用
  3. Redis 数据结构-双向链表
  4. SSM框架——MyBatis
  5. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(4)-Charles如何设置捕获会话
  6. ng + zorro angular表格横纵向合并,横向目前是手动,纵向是自动合并,微调后可适配三大框架使用
  7. DevGridView表格导出自定义页脚
  8. saas架构之druid解析表名
  9. myatbis的一个好的封装
  10. 【一句话】:first-child 伪类解释