Locally Managed Tablespaces本地管理的表空间

本地管理的表空间使用位图跟踪表空间本身中的所有扩展信息。

本地管理的表空间提供以下好处:

  • 快速、并发的空间操作。空间分配和释放修改本地管理的资源(存储在头文件中的位图)。

  • 增强的性能

  • 允许读取备用数据库,因为本地管理的临时表空间不会生成任何撤消或重做。

  • 空间分配被简化,因为当AUTOALLOCATE指定子句时,数据库会自动选择合适的extent大小。

  • 减少了用户对数据字典的依赖,因为必要的信息存储在文件头和位图块中。

  • 对于本地管理的表空间,合并空闲扩展区是不必要的。

所有表空间,包括SYSTEM表空间,可以本地管理。

DBMS_SPACE_ADMIN软件包提供了本地管理的表空间的维护过程。

创建本地管理的表空间

通过在Create tablespace语句的EXTENT MANAGEMENT子句中指定LOCAL,创建本地管理的表空间。

这是新永久表空间的默认值,但必须指定EXTENT MANAGEMENT LOCAL子句以指定AUTOALLOCATE子句或UNIFORM子句。可以使用AUTOALLOCATE子句(默认)自动管理数据库扩展数据块,也可以指定使用特定大小的统一扩展数据块(uniform)管理表空间。

如果您希望表空间包含不同大小的对象,这些对象需要许多具有不同数据块大小的数据块,那么AUTOALLOCATE是最佳选择。如果您对空间分配和释放没有太多控制权,那么AUTOALLOCATE也是一个不错的选择,因为它简化了表空间管理。使用此设置可能会浪费一些空间,但让Oracle数据库管理空间的好处很可能超过此缺点。

如果您希望对未使用的空间进行精确控制,并且可以准确预测为一个或多个对象分配的空间以及范围的数量和大小,那么UNIFORM是一个不错的选择。此设置确保表空间中永远不会有不可用的空间。

如果未明确指定数据块管理的类型,Oracle数据库将按以下方式确定数据块管理:

  • 如果CREATE TABLESPACE语句省略了DEFAULT存储子句,那么数据库将创建一个本地管理的自动分配表空间。
  • 如果CREATE TABLESPACE语句包含DEFAULT存储子句,则数据库会考虑以下内容:
    • 如果指定了MINIMUM EXTENT子句,数据库将评估MINIMUM EXTENT、INITIAL和NEXT的值是否相等,PCTINCREASE的值是否为0。如果是,数据库将创建一个扩展大小为INITIAL的本地管理的统一表空间。如果MINIMUM EXTENT、INITIAL和NEXT参数不相等,或者PCTINCREASE不为0,则数据库将忽略您可能指定的任何数据块存储参数,并创建本地管理的自动分配表空间。
    • 如果未指定MINIMUM EXTENT子句,则数据库仅评估INITIAL和NEXT的存储值是否相等,PCTINCREASE是否为0。如果是,则表空间是本地管理和统一的。否则,表空间将在本地管理并自动分配。

例如,以下语句创建名为lmtbsb的本地托管表空间,并指定AUTOALLOCATE:

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

AUTOALLOCATE使表空间由系统管理,最小数据块大小为64K。

AUTOALLOCATE的替代方案是UNIFORM。它指定使用统一大小的数据块管理表空间。您可以在UNIFORM的size子句中指定该大小。如果省略SIZE,则默认大小为1M。

以下示例创建具有统一128K扩展数据块的表空间。(在具有2K块的数据库中,每个数据块相当于64个数据库块)。每个128K数据块都由该文件的数据块位图中的一位表示。

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

当显式指定EXTENT MANAGEMENT LOCAL时,不能指定DEFAULT存储子句、MINIMUM EXTENT或TEMPORARY。要创建临时的本地托管表空间,请使用create temporary tablespace语句。

注意:为本地管理的表空间分配数据文件时,应为空间管理所用的元数据(扩展位图或空间头段)留出空间,这些元数据是用户空间的一部分。例如,如果在数据块管理子句中指定UNIFORM子句,但忽略了SIZE参数,则默认数据块大小为1MB。在这种情况下,为数据文件指定的大小必须大于1MB(至少一个块加上位图的空间)。

在本地管理的表空间中指定段空间管理

在本地管理的表空间中,Oracle 数据库可以使用两种方法来管理段空间:自动和手动。

手动段空间管理使用称为“freelists”的链表来管理段中的空闲空间,而自动段空间管理使用位图。自动段空间管理是更有效的方法,并且是所有新的永久本地管理表空间的默认设置。

尽管自动段空间管理是所有新的永久本地管理表空间的默认设置,但您可以使用该SEGMENT SPACE MANAGEMENT AUTO子句显式启用它。

例如,以下语句创建lmtbsb具有自动段空间管理的表空间:

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M 
    EXTENT MANAGEMENT LOCAL 
    SEGMENT SPACE MANAGEMENT AUTO;

SEGMENT SPACE MANAGEMENT MANUAL子句禁用自动段空间管理。

您在创建表空间时指定的段空间管理适用于随后在表空间中创建的所有段。您不能更改表空间的段空间管理模式。

笔记:

 

  • 如果将区管理设置为LOCAL UNIFORM,则必须确保每个区至少包含 5 个数据库块。

  • 如果将范围管理设置为LOCAL AUTOALLOCATE,并且如果数据库块大小为 16K 或更大,则 Oracle 通过创建最小大小为 5 个块的范围来管理段空间,四舍五入为 64K。

  • 不能为SYSTEM表空间指定自动段空间管理。

使用自动段空间管理的本地管理表空间可以创建为单个文件或大文件表空间

 

posted @ 2022-10-01 15:32  wongchaofan  阅读(197)  评论(0编辑  收藏  举报