文档章节

Oracle调整表空间大小——ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

Vchen557
 Vchen557
发布于 2016/02/17 10:49
字数 782
阅读 137
收藏 2

Oracle数据文件在有数据的情况下能自动扩展,却不能自动收缩,造成存储空间的浪费。
如果直接修改数据文件的大小,可能会遇到如下错误:ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

转载网址:http://blog.sina.com.cn/s/blog_54eeb5d901000bvg.html

SQL> ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\ICAPP\IC_DATA6.ORA' RESIZE 300m;
ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\ICAPP\IC_DATA6.ORA' RESIZE 300m
*
ERROR
位于第 1 行:
ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

但是

SQL>select d.filename,d.file_id,d.bytes/1024/1024 as d_byte,sum(f.bytes/1024/1024) as free_byte

2   from dba_data_files d,dba_free_space f

3   where d.file_id=f.file_id and d.file_id=18

4   group by d.file_name,d.file_id,d.bytes/1024/1024;

FILE_NAME                             FILE_ID    D_BYTE    FREE_BYTE

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

D:\ORACLE\ORADATA\ICAPP\IC_DATA6.ORA     18       1536     1482.0625

可以看到实际上ID=18的文件只使用了大概50M左右,只是数据分布在(按一定的顺序)50M甚至在300M以外的地方,所以这里虽然看到只使用了约50M空间,但是却不能resize datafile.

为此,要改小数据文件,我们先要对文件上的表和索引移动一下位置,具体做法如下:

 1移动表前先对表空间做整理

SQL>alter tablespace ic_data coalesce;

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

SQL>select segment_name,partition_name,segment_type

2   from dba_extents

3   where file_id=18;

 3id=18的文件上的表和索引移动位置

SQL> set heading off
SQL> set echo off
SQL> set feedback off
SQL> set termout on
SQL> spool d:\aaa.sql

//移动表

SQL>select DISTINCT 'alter table '|| segment_name || ' move tablespace test_space;' from dba_extents where segment_type='TABLE' and file_id=18;

//移动索引

SQL>select DISTINCT 'alter index '|| segment_name || ' rebuild tablespace test_space;' from dba_extents where segment_type='INDEX' and file_id=18;

//移动分区表

SQL>select DISTINCT 'alter table '|| segment_name || ' move partition '|| partition_name || ' tablespace test_space;' from dba_extents where segment_type='TABLE PARTITION' and file_id=18;

//移动分区索引

SQL>select DISTINCT 'alter index '|| segment_name || ' rebuild partition '|| partition_name || ' tablespace test_space;' from dba_extents where segment_type='INDEX PARTITION' and file_id=18;

SQL>spool off 

然后执行aaa.sql,注意保证test_space有足够的空间容纳这些数据,

其实可以不移动所有的数据,但是总的测验是不是移动了300M以外的数据,所以还是移动所有数据的方便

 4这样移动了所有的数据以后就可以对datafile resize

SQL> c/9/3
  1* ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\ICAPP\IC_DATA6.ORA' RESIZE 300M
SQL> /

数据库已更改。

 5把原来表空间ic_data中的数据再移动回来,修改aaa.sql中的表空间名为ic_data再执行,然后drop tablespace test_space including contents and datafiles

 

 以上操作起源于我删除了database里的一个大表造成很多空间浪费,想回收空间:)

-----------------------分割线-----------------------------分割线-----------------------------分割线----------------------------

经过实践,以上方法可以处理ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据问题。

但是如果一个表空间被多个Oracle用户使用,在导出sql文件时要指定用户,否则在执行sql文件时会报错


本文转载自:wwww

Vchen557
粉丝 7
博文 69
码字总数 28579
作品 0
潍坊
程序员
私信 提问
收缩表空间数据文件大小的两个案例

收缩表空间两个案例:使用users表空间测试。undo表空间也可以这样操作,系统表空间未测试。 一、空闲空间可以正常收回。 1.查出表空间总大小及空闲空间大小 BYS@ bys001>select df.tablespa...

长平狐
2013/09/17
866
0
oracle 体系结构及内存管理 16_物理文件操作

一、表空间及数据文件 1、表空间数据文件操作 创建普通表空间 create tablespace dits datafile 'E:ORACLEPRODUCT10.2.0ORADATAZONGYANGdits.dbf' size 2000M reuse autoextend on next 50m......

PeakFang-BOK
2018/10/13
0
0
oracle 备份恢复 11oracle备份恢复补充

一、冷备份: 当数据库的所有可读写的物理文件具有相同的系统改变号(SCN)时进行的备份,这个状态的唯一方法是数据库正常关闭, 所以也叫一致性备份。使用于归档和非归档模式; 优点:快速简...

PeakFang-BOK
2018/10/14
0
0
关于mysql出现java.sql.SQLException错误!

java.sql.SQLException错误! ORA-00904: --invalid column name 无效列名 ORA-00942:  --table or view does not exist 表或者视图不存在 ORA-01400:  --cannot insert NULL into () 不能......

费氏家族
2017/10/24
0
0
ORA 各种oraclesql错误

ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某...

青峰Jun19er
2018/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Tedis:基于 TiKV 构建的 NoSQL 数据库

作者介绍: 陈东明,饿了么北京技术中心架构组负责人,负责饿了么的产品线架构设计以及饿了么基础架构研发工作。曾任百度架构师,负责百度即时通讯产品的架构设计。具有丰富的大规模系统构 ...

TiDB
34分钟前
0
0
linux命令

ls命令是linux下最常用的命令。ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单。如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单。 通过ls 命令不仅可以查看linux文件...

WinkJie
41分钟前
1
0
你需要的物流运输类报表,这里都有

你需要的物流运输类报表,都在这里 葡萄城报表模板库是一款免费的报表制作、学习和参考工具,包含了超过 200 张高质量报表模板,涵盖了 16 大行业和 50 多种报表类型,为 30 余万报表开发者提...

葡萄城技术团队
48分钟前
3
0
像Java SE一样编写Java EE(ddd探索)

今天主要改写昨天的组合模式成Web系统。 容器接口为 public interface TreeProduct { /** * 展示所有产品 * @return */ List<TreeProduct> allProducts();...

算法之名
49分钟前
0
0
Django Model 模型建立

Django Model 模型 Django Model层是Django的数据模型层,每一个Model类就是数据库中的一张表; 我们需要注意下面几点: model一般都是定义在不同的APP的models.py模块文件中,可以是一个,也...

彩色泡泡糖
58分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部