拨开迷雾:关于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回来

查看当前数据文件分配的大小

再次通过操作系统查看

----the end

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-09-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习之tensorflow实战篇

pymongo.errors:Sort operation used more than the maximum 33554432 bytes of RAM. Add an index,

在 mongo 使用过程中遇到了一个问题,需求就是要对mongo 库中查询到数据进行分页,mongo库我们知道都会存储大容量的数据,刚开始使用的 skip 和 ...

3646
来自专栏数据小魔方

Julia语言初体验

最近MIT发布的julia 1.0.0版,据传整合了C、Python、R等诸多语言特色,是数据科学领域又一把顶级利器。

1522
来自专栏维C果糖

史上最简单的 MySQL 教程(四十一)「触发器」

触发器:trigger,是指事先为某张表绑定一段代码,当表中的某些内容发生改变(增、删、改)的时候,系统会自动触发代码并执行。

41814
来自专栏沃趣科技

MySQL的一个表最多可以有多少个字段

问题由来 引用我们客户的原话: *创建如下表,提示我:* ? *如果我将下面表中的varchar(200),修改成text(或blob):报错变为另一个:* ?...

4769
来自专栏玄魂工作室

PHP代码审计Day1 - in_array函数缺陷

--------------------------------------------------------------------------------...

551
来自专栏数据库

高级盲注—floor,rand,group by报错注入

大家好,我是你们的老朋友Alex。最近一直在学习SQL注入,发现了很多很多有趣的东西。我就分享我的一篇有关floor,rand,group by报错注入的笔记吧...

1839
来自专栏xingoo, 一个梦想做发明家的程序员

程序猿的日常——Mybatis现学现卖

最近有一个小项目需求,需要用spring mvc + mybatis实现一个复杂的配置系统。其中遇到了很多不太常见的问题,在这里特意记录下: 主要涉及的内容有...

3227
来自专栏JetpropelledSnake

SQL学习笔记之MySQL中真假“utf8” 问题

最近我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇的错误:

432
来自专栏杨建荣的学习笔记

两个看似奇怪的MySQL语句问题

今天同事给了我一个文件需要更新下CMDB的数据,提供的内容是excel的形式,因为条目比较多,我需要做一些转换,批量修改成对应的SQL语句,因为只有我知道这个逻...

3247
来自专栏维C果糖

详述 SQL 中的 distinct 和 row_number() over() 的区别及用法

1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库...

1687

扫描关注云+社区