1 段的管理方式
数据库内的段可以自动管理空闲空间。段内的空闲或使用空间用位图跟踪。利用这个特性,在创建本地管理的表空间时指定自动段空间管理。这个规范适用于随后在这个表空间中创建的所有段。
自动空间管理段有一组位图块(bmb),描述该段中数据块的空间利用情况。bmb组织成树形层次结构。层次结构的根级别(包含对所有中间bmb的引用)存储在段头中。这个层次结构的叶子表示属于该段的一组连续数据块的空间信息。这个层次结构中的最大级别数是3。
使用自动空间管理的好处包括:
更好的空间利用率,特别是运行时对于行大小变化很大的对象
更好地对并发访问中的变化进行调整
2 段的类型
段是为某个逻辑结构分配的一组区段。不同类型的分段包括:
表和聚簇段
索引段
undo段
临时段
段是由Oracle数据库服务器动态分配的。
表和聚簇段:每个非聚簇表都有一个数据段。所有表数据都存储在表段的区中。对于分区表,每个分区都有一个数据段。每个聚簇都有一个数据段。聚簇中每个表的数据存储在聚簇的数据段中。
索引段:每个索引都有一个存储其所有数据的索引段。对于分区索引,每个分区都有一个索引段。
undo段:Oracle数据库维护对数据库进行反向更改的信息。这些信息包括事务操作的记录,统称为undo。Undo存储在Undo表空间中的Undo段中。
临时段:当SQL语句需要临时数据库区域来完成执行时,由Oracle数据库服务器创建临时段。当语句完成执行时,临时段中的区段将返回给系统以供将来使用。
当一个段的现有区段已满时,Oracle数据库服务器会动态分配空间。因为区段是根据需要分配的,所以段的区在磁盘上可能是连续的,也可能不是。
3 区的分配
在数据文件的位图中搜索所需的相邻空闲块数量
使用storage子句调整区段大小:
UNIFORM SIZE
AUTOALLOCATE
在数据文件的位图中搜索所需的相邻空闲块数量
对于本地管理的表空间,Oracle数据库服务器首先在表空间中确定一个候选数据文件,然后在数据文件的位图中搜索所需的相邻空闲块数量,从而寻找可以分配给新区的空闲空间。如果该数据文件没有足够的相邻空闲空间,则Oracle数据库服务器将查找另一个数据文件。
可以通过两种方式来分配区:
通过UNIFORM子句,数据库为表空间中创建的任何对象指定的区为统一大小。
通过AUTOALLOCATE子句,由数据库决定表空间的区的大小。
Oracle数据库服务器提供一个Segment Advisor工具,根据对象内部的空间碎片级别,帮助确定对象是否有可用的空间进行回收。
4 练习
根据官方文档SQL Language Reference查找关于CREATE TABLESPACE语法,创建表空间其中区以uniform size方式分配。