整理ORACLE表空间文件

固定大小表空间文件使用率过低,并执行alter database datafile '/u01/xx/xx/xx.dbf' resize 256m时 收缩表空间- ORA - 03297 错误的解决方法;

1:查看所有表空间文件的使用率
select a.FILE_ID,a.file_name,a.bytes/1024/1024 TOTAL,b.sb/1024/1024 FREE,100*b.sb/a.bytes "FREE%" 
from dba_data_files a,(select file_id,sum(BYTES) sb from dba_free_space group by file_id) b
where a.file_id=b.file_id order by a.file_name;

2:通过表空间文件的file_id查看block_id
select segment_name,segment_type,tablespace_name,extent_id,bytes,blocks,block_id from dba_extents where file_id=27;

3:通过表空间文件的MAX(block_id)和数据库的db_block_size(show parameter db_block_size )可以计算出表空间最小能缩小到一个什么值(MAX(block_id)*db_block_size

4:新建一个临时表空间,并赋予用户权限
CREATE SMALLFILE TABLESPACE "ZLZK_BAK" DATAFILE '/u01/oracle/oradata/yyc/zlzk_bak.dbf' SIZE 10240M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

alter user zlzk quota unlimited on ZLZK_BAK; 

5:将表空间文件中的table和index移动到临时表空间里

SELECT distinct 'alter table '|| SEGMENT_NAME||' move tablespace ZLZK_BAK; ' FROM DBA_EXTENTS 
       WHERE TABLESPACE_NAME='ZLZK' AND FILE_ID = 24  and segment_type='TABLE' ;

SELECT distinct 'alter INDEX '|| SEGMENT_NAME||' REBUILD TABLESPACE ZLZK_BAK; ' FROM DBA_EXTENTS 
       WHERE TABLESPACE_NAME='ZLZK' AND FILE_ID = 24 and  segment_type='INDEX' ;


6:移动完后再执行缩小表空间
ALTER DATABASE DATAFILE '/u01/oracle/oradata/yyc/zlzk25.dbf' RESIZE 256M;

7:将移动到临时的table和index重新移动回原来表空间







来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28588485/viewspace-1220431/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28588485/viewspace-1220431/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值