调整Oracle Datafiles的大小

时间:2015-04-16 15:53:51

标签: oracle resize watermark fragmentation

我有一个包含3个数据文件的表空间(启用了自动扩展)。实际上Datafile_1和Datafile_2的大小为32GB,Datafile_3的大小为10GB。

我丢弃了一个巨大的表,Datafile_2的占用率降至4GB。在dba_extents视图中使用一些查询** [1] **我可以看到HWM仍然是32GB。我能够移动/收缩数据文件末尾的所有对象。再次使用相同的查询,我可以看到HWM下降到大约4GB。

然后我尝试了:

ALTER DATABASE DATAFILE' + DATA / myDatabase / datafile / datafile_2'调整大小5G;

得到了:

ORA-03297:文件包含超出请求的RESIZE值的已用数据;

我试图将尺寸增加到30GB而没有成功。

我做了一些研究并找到了这篇文章:

http://www.dbi-services.com/index.php/blog/entry/resize-your-oracle-datafiles-down-to-the-minimum-without-ora-03297

这里,作者不是使用dba_extents而是直接访问sys.x $ ktfbue来查看元数据。他的脚本显示Datafile_2 HWM仍然是32G。由于某种原因,sys.x $ ktfbue中的MAX(block_id)与dba_extents中的不同。

好吧,我做了一些研究,以发现如何将x $ ktfbue上的block_id映射到数据库对象。找到另一个脚本。运行之后,我可以看到Datafile_2末尾的所有块都标记为"空闲空间"。

好吧,现在我处在一个我不知道该怎么办的情况。可能有多个数据文件是问题吗?有什么提示吗?

[1] 这是查询:  SELECT(MAX((block_id + blocks-1)* 8192))/ 1024/1024" HWM(MB)" FROM dba_extents WHERE file_id = 8;

* file_id 8表示datafile_2

编辑:尝试了另外一件事。我创建了一个新的表空间,并将Datafile_3上的所有对象移动到它。我现在可以看到Datafile_3通过DBA_EXTENTS完全为空。还清除了回收站。

然后尝试调整它没有成功(ORA-03297),也试图删除它并得到" ORA-03262:文件不为空"。

最后,我决定在DBA_FREE_SPACE上对Datafile_3中的所有可用扩展区进行求和,并将其与DBA_DATA_FILES中的值进行比较。某处有1MB的差异!我快疯了。 :)

0 个答案:

没有答案