Extents
扩展区是数据库存储空间分配的逻辑单位,由多个连续数据块组成。在一个扩展区中的数据块在逻辑上是连续的,但在物理上可能由于 RAID 条带化和文件系统的实施方式而在磁盘上分散分布。
Allocation of Extents分配扩展区
在默认情况下,在数据段被创建时,数据库会为数据段分配一个初始扩展区。一个扩展区总是包含在一个数据文件中。
虽然还没有数据被添加到段中,在初始扩展区中的数据块被专门为段保留起来。每个段的第一个数据块包含该段中的扩展区目录。
如果初始扩展区满了,并需要更多空间时,则数据库自动为该段分配一个增量扩展区。一个增量扩展区是为该段创建的后续扩展区。
在新分配扩展区中的块,虽然他们是可用的,但可能并未清空旧数据。在 ASSM中,对新分配扩展区中的块,只有当Oracle 数据库开始使用它们时,才会根据需要将其格式化。
Deallocation of Extents 释放扩展区
通常,用户段的扩展区不会返回给表空间,除非您使用 DROP 命令删除该对象。在Oracle数据库 11g 第 2 版中 (11.2.0.2)也可以使用 DBMS_SPACE_ADMIN 软件包删除段。例如,如果你删除了表中的所有行,但数据库不会回收数据块以供表空间中的其他对象使用。
在一个撤消段中, 如果指定了OPTIMAL 大小参数,或数据库处于自动撤消管理模式,则Oracle 数据库会周期性地释放一个或多个扩展区
在某些情况下,可以手动释放空间。基于对象中的碎片级别,Oracle 数据段顾问工具可帮助确定一个对象是否有空间可回收。以下技术可以释放扩展区:
你可以使用在线段收缩来回收在段中的零碎空间。段收缩是一种在线、 就地的操作。通常,紧凑的数据会获得更好的缓存利用率,且在全表扫描中只需读取更少的块。
您可以将非分区表或表分区的数据移动到一个新的段,或可选地移入另一个你在其中具有配额的表空间。
您可以重建或合并索引
您可以截断表或表簇,这将删除所有行。默认情况下,除了留下由MINEXTENTS存储参数所指定的扩展区数之外,Oracle 数据库将释放已删除行所使用的所有空间。在数据库 11g 第 2 版 (11.2.0.2) 中,您还可以用带有DROP ALL STORAGE选项的TRUNCATE语句来删除整个段。
您可以释放未使用的空间,即释放数据库段的高水位端的未使用空间,以便供表空间中的其他段使用
当扩展区被释放时,Oracle 数据库将修改本地管理表空间的数据文件中的位图,以反映重新获得作为可用空间的扩展区。被释放扩展区的数据块中的任何数据变得不可访问。
Storage Parameters for Extents
每一个段是由扩展区表示的存储参数来定义的。这些参数控制 Oracle 数据库如何为段分配可用空间。
存储设置按如下的优先级顺序确定,列表中较高的设置会覆盖较低的设置:
1. 段存储子句
2. 表空间存储子句
3. Oracle数据库缺省值
本地管理表空间可以具有统一的扩展区大小,或由系统自动确定可变的扩展区大小:
对统一的扩展区,可以指定扩展区的大小,或使用默认的大小 1 MB。表空间中的所有扩展区都是一样大小。本地管理的临时表空间只能使用这种分配类型。
对于自动分配的扩展区由Oracle 数据库确定新分配扩展区的最佳大小。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25427762/viewspace-1061092/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25427762/viewspace-1061092/