关于ORACLE清理表空间总结



--1.查看索引和表的初始大小

SELECT bytes/1024/1024 ||'M' TABLE_SIZE ,u.* FROM dba_SEGMENTS U
WHERE U.owner IN ('CLEAR','TRADE','INTERFACE','SECURITY')
ORDER BY 1 DESC

--2. 通过上面语句找到占用空间较大的表,删除表记录
DELETE
FROM CLEAR.TC_SYSCFEE_INQUIRE_FEE_DETAIL t
WHERE t.trade_date <'20180101';

--3.消除行迁移,清除空间碎片,删除空闲空间,实现缩小所占的空间
alter table CLEAR.TC_SYSCFEE_INQUIRE_FEE_DETAIL move
/*因为alter table jk_test move 是通过消除行迁移,清除空间碎片,删除空闲空间,实现缩小所占的空间,但会导致此表上的索引无效(因为ROWID变了,无法找到),
所以执行 move 就需要重建索引。
找到表对应的索引。
select index_name,table_name,tablespace_name,index_type,status  from dba_indexes  where table_owner='SCOTT' ;
根据status 的值,重建无效的就行了。
sql='alter index '||index_name||' rebuild'; 使用存储过程执行。
还要注意alter table move过程中会产生锁,应该避免在业务高峰期操作!*/

--4.删除主键
ALTER TABLE CLEAR.TC_SYSCFEE_INQUIRE_FEE_DETAIL DROP PRIMARY KEY DROP INDEX;
--5.重新建主键
alter table CLEAR.TC_SYSCFEE_INQUIRE_FEE_DETAIL
  add constraint PK_SYSCFEE_INQUIRE_FEE_DETAIL primary key (TRADE_DATE, SEQ_NO);

--6.原建表初始化大小为10M,每次增加5M,会造成空间浪费,例如只要往表中插入一条数据,就会占用10M的空间
--故修改设置 表和索引 initial初始化大小为1M,之后每次增加1M。
select 'ALTER TABLE '||owner||'.'||table_name||' MOVE TABLESPACE '||tablespace_name||' STORAGE(INITIAL 1M NEXT 1M);'  
  from dba_tables  
 where owner='CLEAR' ;

select 'ALTER INDEX '||owner||'.'||index_name||' REBUILD STORAGE(INITIAL 1M NEXT 1M);'  
  from dba_indexes  
where owner='CLEAR'
--重建索引
SELECT 'alter index CLEAR.' || t.index_name ||' rebuild;' FROM dba_indexes t WHERE t.owner ='CLEAR';



  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值