固定大小表空间文件使用率过低,并执行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重新移动回原来表空间
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/