03297: file contains used data beyondrequested RESIZE value

SQL> set line 200

SQL> set pagesize 200

SQL> col name format A150

1,查看表空间使用情况SQL> SELECTUPPER(F.TABLESPACE_NAME) "表空间名", 2  D.TOT_GROOTTE_MB "表空间大小(M)", 3  D.TOT_GROOTTE_MB – F.TOTAL_BYTES "已使用空间(M)", 4  TO_CHAR(ROUND((D.TOT_GROOTTE_MB – F.TOTAL_BYTES) /D.TOT_GROOTTE_MB * 100,2),’990.99′) || ‘%’ "使用比", 5  F.TOTAL_BYTES "空闲空间(M)", 6  F.MAX_BYTES "最大块(M)" 7  FROM (SELECT TABLESPACE_NAME, 8  ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, 9  ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES 10  FROM SYS.DBA_FREE_SPACE 11  GROUP BY TABLESPACE_NAME) F, 12  (SELECT DD.TABLESPACE_NAME, 13   ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB 14  FROM SYS.DBA_DATA_FILES DD 15  GROUP BY DD.TABLESPACE_NAME) D 16  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME 17  ORDER BY 1; 表空间名表空间大小(M)已使用空间(M) 使用比空闲空间(M) 最大块(M)——————————————- ————- ——– ———– ———-HELP5005.19 1.04%494.81494.81ORCTSTU32406.6315545.69 47.97% 16860.9472SYSAUX900689.94 76.66%210.06204.94SYSTEM11101005.31 90.57%104.6995.44UAAP500143.37 28.67%356.63290.38UNDOTBS16485331.25 5.11% 6153.753534USERS461.25394.44 85.52%66.8122.1910 rows selected SQL>

看到ORCTSTU表空间只使用了49%,使用了15G空间,而ORCTSTU表空间占据的总磁盘空间为32G,所以我们可以收缩ORCTSTU到16G左右,,这样就释放出了将近16G的空间了。

去查看下此表空间所在的数据文件,如下所示:

SQL> SELECT file_id,file_name FROM DBA_DATA_FILES D WHERED.TABLESPACE_NAME = ‘ORCTSTU’; FILE_ID FILE_NAME——————————————————————————————5D:\ORACLE\ORASERVER\ORADATA\ORCTSTUEX\POWERDES\ORCTSTU01.DBF SQL>

准备收缩到18G,执行如下报错

SQL> alter database datafile’/home/oradata/powerdes/orctstu01.dbf’ resize 1800M;

alter database datafile’/home/oradata/powerdes/orctstu01.dbf’ resize 1800M

*

ERROR at line 1:

ORA-03297: file contains used data beyondrequested RESIZE value

SQL>

参考命令:

select file_id,max(block_id+blocks-1)HWM,block_id

from dba_extents

where file_id=5

group by file_id,block_id;

我们来在这个基础上做一个简单的分析。首先得到5号数据文件中,块号最大的数据块block_id。

SQL> SELECT MAX(block_id) FROMdba_extents WHERE tablespace_name = ‘ORCTSTU’;

MAX(BLOCK_ID)

————-

4193920

SQL>

SELECT 4193920*8192/1024/1024 FROM dual;

SQL> SELECT 4193920*8192/1024/1024/1024FROM dual;

4193920*8192/1024/1024/1024

—————————

31.9970703

SQL>

计算出来大概是32G左右,再去磁盘看实际的数据文件大小

[oracle@edustu4 ~]$ ll -h/home/oradata/powerdes/orctstu01.dbf

-rw-r—–. 1 oracle oinstall 32G May 1618:06 /home/oradata/powerdes/orctstu01.dbf

[oracle@edustu4 ~]$

也是32G左右,和实际的磁盘的数据文件的大小一致,

看看这个最大4193920的数据块所在的extent对应的segment信息是否是已经被drop到的table?

select segment_name,owner from dba_extentswhere block_id=3507584;

SQL> select segment_name,owner fromdba_extents where block_id=1942656;

SEGMENT_NAME

——————————————————————————–

OWNER

——————————

RES_APPROVE_SHARE

ORCTSTU

SQL>

create tablespace ORCTSTU_2

logging

datafile ‘/home/oradata/powerdes/orctstu02.dbf’

size 50m

autoextend on

next 50m ;

alter table RES_APPROVE_SHARE move ORCTSTU_2;

ORA-14133: ALTER TABLE MOVE cannot becombined with other operations

alter table orctstu.RES_APPROVE_SHARE movetablespace ORCTSTU_2;

先建立管道目录

CREATEOR REPLACE DIRECTORY dir_dump_t1 AS’/home/oracle/expdpimpdp’;

自己喜欢的人,那就随便怎么样了,

03297: file contains used data beyondrequested RESIZE value

相关文章:

你感兴趣的文章:

标签云: