oracle收缩表和表空间
oracle shrink space收缩表
1 2 3 4 5 6 7 8 | 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; |
模拟收缩表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | --收集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 (存储块减少) |
模拟收缩表空间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | --插入数据增大表空间 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 |
做一个决定,并不难,难的是付诸行动,并且坚持到底。
分类:
oracle数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2020-11-11 linux加固脚本
2020-11-11 ogg同步服务配置复制和同步进程的开始文件及RBA