北京字典价格联盟

拨开迷雾:关于resize datafile理解的错误

只看楼主 收藏 回复
  • - -
楼主
拨开迷雾:关于resize datafile理解的错误
黄廷忠
网名:认真就输
云和恩墨技术专家
个人博客:http://www.htz.pw/

resize数据文件的时候,常常会报ORA-03297错误,也许很多人会认为通过在相同表空间move一下对象,就会自动使用最小的未使用的空间,其实并不是这样的,在MOS文件中遇到ORA-03297错误是直接给出的DROP对象,那么为什么不能使用move,表空间的对象究竟是如何存储的呢?今天我们通过实验一起来认识。
数据库版本
查询表空间中对象的大小
这里可以看到对象总的大小为271974400
然后看到表空间中总分配的空间远远大于271974400
查询需要MOVE的对象
查看表空间中的数据文件系统
原来以为表空间中使用数据文件是均匀的使用,但是后面的测试并不是这样的,下面这样的SQL是之前以后均匀的使用数据文件而写的
由于查询dba_extents需要消耗大量的时间,特别是数据库越大的时候,所以这里我们通过一次性查询出来,并生成一个表来实现只查询一次dba_extents。
创建表
MOVE对象
多次MOVE后,查看当前表空间使用情况
这里看到两个数据文件中分配给对象的最大块的BLOCK_ID相差太多了,也说明数据文件中并不是平均使用数据文件的
这里看到表空间分配的大小还是远远大于表空间中对象使用的大小
查询对表块的分布情况
通过上面信息得到,中间其它有很多块并没有使用,并且相隔还很大
dump数据文件位图块
通过上面的信息可以得到每一个位图块都对应数据文件中一段连续的空间,在分配空间的时候,并不是依次使用位图块,而是同时在多个位图块中使用位图块,估计是为了减少块的挣用,提高并发性。
MOVE到其它表空间
其实通过MOS文档可以发现,ORACLE官方并没有说通过MOVE方式,而是通过DROP方式来实现,下面我们通过MOVE到其它的表空间来使用。
RESIZE数据文件
查询数据分配给对象的最大块的位置
这里看到已经除下面了
已经resize成功
将对象MOVE回来
查看当前数据文件分配的大小
再次通过操作系统查看




云和恩墨
数据驱动,成就未来。整合业界顶尖的技术与合作伙伴资源,围绕数据及相关领域,提供解决方案和专业服务。
业务架构
电子渠道(网络销售)分析系统、数据治理
IT基础架构
分布式存储解决方案
数据架构
Oracle DB2 MySQL NoSQL
专项服务:架构/安全/容灾/优化/整合/升级/迁移
运维服务:运维服务  代维服务
人才培养:个人认证  企业内训
软件产品:工具软件(SQL 审核、监控、数据恢复)
应用架构
应用软件开发:数据建模 SQL审核和优化 | 中间件服务



恩墨学院

恩墨学院是云和恩墨(北京)信息技术有限公司旗下的培训事业部,创业数年专注于数据库认证、技能培训,以专业的讲师塑造品牌,以专业的训练保证就业,目前已经发展成为国内数据库领域培训领导品牌。





恩墨学院:名师传道,授业以专。

助您实现DBA职业理想

分享文章

点击左上方↖关注微信公众号:enmoedu


举报 | 1楼 回复

友情链接