ITPub博客

首页 > 数据库 > Oracle > 整理ORACLE表空间文件

整理ORACLE表空间文件

原创 Oracle 作者:xccfeng 时间:2014-07-16 14:56:16 0 删除 编辑
固定大小表空间文件使用率过低,并执行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博客 ” ,链接:https://blog.itpub.net/28588485/viewspace-1220431/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-02-25

  • 博文量
    56
  • 访问量
    254454