日期:2014-05-16  浏览次数:20682 次

Oracle DB 管理空间

? 介绍Oracle DB Server 如何自动管理空间
? 使用压缩节省空间
? 主动监视和管理表空间的空间使用量
? 介绍Oracle DB 中的段的创建
? 控制延迟创建段
? 使用“段指导”
? 使用段收缩功能从表和索引中回收浪费的空间
? 管理可恢复的空间分配

  • 空间管理:概览
空间由Oracle DB Server 自动管理。Oracle DB Server 可以生成有关潜在问题的预警,并推荐可能的解决方案。
这些功能包括:
? Oracle Managed Files (OMF)
? 用位图进行的空闲空间管理(“本地管理”)和数据文件自动扩展
? 主动的空间管理(默认阈值和服务器生成的预警)
? 空间回收(收缩段、联机重新定义表)
? 容量计划(增长报表)

空间管理:概览
通过使用Oracle Managed Files (OMF),你可以根据数据库对象(而不是文件名)来指定操作。Oracle DB Server 可以用位图来管理表空间内的空闲空间。这称为“本地管理的”表空间。此外,位于本地管理的表空间中的段内的空闲空间可以使用位图进行管理。这称为“自动段空间管理”。位图化的实施可以避免很多与空间相关的表优化工作,同时能在高峰负载期间提供更高的性能。另外,Oracle DB Server 还可以自动扩展数据文件,因此文件可以根据其中的数据量自动增长。
创建数据库时,默认情况下将启用预先空间监视。(这不会对性能产生任何影响。)
Oracle DB Server 在正常空间分配和取消分配操作期间监视空间使用情况,如果空闲空间的可用性低于预定义的阈值(可以覆盖此阈值),将发出预警。指导和向导可帮助你回收空间。
计划容量时,Oracle DB Server 根据表结构和行数进行空间估计,并根据自动工作量资料档案库(AWR) 中存储的历史空间使用情况来提供增长趋势报表。

  • 块空间管理

块空间管理
空间管理包括块级别的空闲空间管理。使用“自动段空间管理”时,每个块分为四部分,分别称为FS1(空闲空间介于0 到25% 之间)、FS2(25% 到50% 空闲)、FS3(50% 到75% 空闲)和FS4(75% 到100% 空闲)。
块的状态将根据其中空闲空间的级别自动更新。这样,你就可以根据所插入行的长度来判断特定块能否满足插入操作的要求。请注意,“满”状态表示不能再向块中插入。
在示例中,左侧的块是一个FS3 块,因为其空闲空间介于50% 和75% 之间。执行了一些插入和更新语句后,将达到PCTFREE(虚线处),并且不能再向该块中插入新行。
现在该块被视为“满”或FS1 块。块的空闲空间级别一旦降至低于下一部分,就会考虑将该块再次用于插入。在上面这种情况中,空闲空间一旦超过25%,状态即变为FS2。
注:大对象(LOB) 数据类型(BLOB、CLOB、NCLOB和BFILE)不使用PCTFREE存储参数。未压缩块和OLTP 压缩块的默认PCTFREE值为10;基本压缩块的默认PCTFREE值为0。

  • 行链接和行迁移
示例:
? 更新时:行的长度增加,超过了块中的可用空闲空间。
? 需要将数据存储在新块中。
? 将保留行的原始物理标识符(ROWID)。
? Oracle DB Server 需要读取两个块来检索数据。
? “段指导”查找包含迁移行的段。
? 可以对块中的碎片空闲空间进行自动合并。

行链接和行迁移
在以下两种情况下,表中某行的数据可能太大,无法包含在单个数据块中。
第一种情况:
在第一次插入行时,就发现行太大,无法包含在一个数据块中。在这种情况下,Oracle DB Server 将在为该段保留的一系列数据块(一个或多个)中存储该行的数据。较大的行通常要进行行链接,例