公司有7套库的表空间大小与实际占用空间相差较大。为合理利用存储,打算resize数据文件,把空间释放出来。
通过下列命令找出能适合resize的文件:
Set pagesize 1000
colFILE_NAME for a40
col"used%" for 99.99
col"free%" for 99.99
SELECTa.FILE_ID,
a.FILE_NAME,
trunc(a.BYTES/1024/1024/1024,0) total_G,
trunc(b.bytes/1024/1024/1024,0) free_G,
'alter database datafile'''||a.file_name||''' resize '||ceil((a.BYTES - b.bytes)/1024/1024/1024+trunc(b.bytes/1024/1024/1024,0)*0.3) || 'G;' resizeG
FROM DBA_data_files a, (select file_id,sum(bytes)bytes from DBA_FREE_SPACE group by file_id) b
wherea.file_id = b.file_id
and A.TABLESPACE_NAME IN (select TABLESPACE_NAMEfrom dba_tablespaces)
and 100 *trunc(b.bytes / a.BYTES, 2)>30;
<pre class="html" name="code"> 87 /oradata/oradb1/system02.dbf 8 6
alter database datafile '/oradata/oradb1/system02.dbf' resize 4G;
在resize数据文件时,部分文件会报<u><span style="color:#0066cc;">ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据错误。</span></u>
我们以上面查询结果87号为例进行说明,数据文件大小8G,段的大小2G左右,但是数据分布的超过的2G,所以在resize的时候,就会报上面的错误。
解决方法:对87号上的表和索引移动位置,可以参照:http://www.cnblogs.com/wenlong/archive/2011/10/22/2221025.html