03297: file contains used data beyondrequested RESIZE value(2)

可以看到基本没有任何改变,但是根据我的直观感觉,确实没有多少表了,空间也确实都腾出来了。可以简单的验证一下,数据文件是5号,使用dba_extents可以看到占用的空间情况和对应的块的情况。

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

from dba_extents

where file_id=5

group by file_id,block_id;

6519      5              4194047                4193920

3469      5              4187263                4186368

8137      5              4186367                4186240

3919      5              4186239                4186112

3033      5              4186111                4185984

9526      5              4185983                4185856

9113      5              4185855                4184832

9669      5              4184775                4184768

1166      5              4184767                4184760

2304      5              4184743                4184736

7215      5              4184735                4184728

4933      5              4184727                4184720

......

通过对比HWM和block_id的值,看到有很多都是空间占用差别比较大的。

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

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

MAX(BLOCK_ID)

-------------

4193920

SQL>   

值为:  4193920

再查看下一个block的容量大小

SQL> show parameter db_block_size;

NAME                                                        TYPE          VALUE

----------------------------------------------- ------------------------------

db_block_size                                          integer      8192

SQL>

5,根据这个值查看对于的数据文件所占据的磁盘空间大小
 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>

6,分析问题所在
这个表不是一件被drop的哪些表记录,表RES_APPROVE_SHARE正在被应用程序使用着,也就说明了报错,所以resize的时候报错ORA-03297: file contains used data beyond requested RESIZE value,block不能释放掉,因为正在被使用。

这个时候通过正常的resize已经不能解决问题了,怎么办?可以采用expdp、impdp的方式重新生成新的表空间和数据文件,然后删除旧的表空间和数据文件。

7,开始新建表空间
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;

8,使用expdp导出数据
                先建立管道目录

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

开始导出export

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/994e3e4d226d05d4a6ea906c069618e9.html