可以看到基本没有任何改变,但是根据我的直观感觉,确实没有多少表了,空间也确实都腾出来了。可以简单的验证一下,数据文件是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