【Oracle】ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

电脑空间不够用了,发现本机的表空间数据文件有点儿大,想缩减下,看了下使用率,10G的普通表空间用了500M,6G的user表空间用了50M,
于是查询:

alter database datafile 'D:\ORACLE\ORADATA\ORCL\test01.DBF' resize 512M;

这条语句用在普通表空间上奏效了,但是用在user上报错了

alter database datafile 'D:\ORACLE\ORADATA\ORCL\USERS01.DBF' resize 512M;

ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据
什么鬼?
于是找度娘几番搜寻找到了解决方法。

1. 查询文件对应的文件号

select file#,name from v$datafile;

找到对应file#,我的是4号文件
(有一说移动表前先对表空间做整理:alter tablespace ic_data coalesce;)

2. 在dba_extents找到与ID=4的数据文件相关的表及索引

select segment_name,partition_name,segment_type from dba_extents where file_id=4;

3.对id=4的文件上的表和索引移动位置

将需缩小表空间上的内容转移到user_test表空间中
--需移动的表数据
   select DISTINCT 'alter table '|| owner||'.'||segment_name || ' move tablespace user_test;' from dba_extents where segment_type='TABLE' and file_id=4;
	--需移动的索引数据
   select DISTINCT 'alter index '|| owner||'.'|| segment_name || ' rebuild tablespace user_test;' from dba_extents where segment_type='INDEX' and file_id=4;
   --需移动的分区表数据
   select DISTINCT 'alter table '|| owner||'.'|| segment_name || ' move partition '|| partition_name || ' tablespace user_test;' from dba_extents where segment_type='TABLE PARTITION' and file_id=4;
   --需移动的分区表索引数据
   select DISTINCT 'alter index '|| owner||'.'|| segment_name || ' rebuild partition '|| partition_name || ' tablespace user_test;' from dba_extents where segment_type='INDEX PARTITION' and file_id=4;

4.执行以上查到的对应sql即可

5.执行缩小命令,问题解决

alter database datafile 'D:\ORACLE\ORADATA\ORCL\USERS01.DBF' resize 512M;

参考:

https://www.cnblogs.com/wenlong/archive/2011/10/22/2221025.html
https://blog.csdn.net/u013551961/article/details/73939236

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

实施工程师木易

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值