本地管理(locally managed)的表空间使用在每个数据文件中存储的位图(bitmpa)来管理区(extents)。
本地管理的表空间通过使用位图来跟踪表空间的所有区的信息。
本地管理表空间提供以下好处:
1)快速的并发的空间操作。空间分配和取消分配修改本地管理的资源(存储在文件头部中的位图)。
2)增强的性能
3)允许可读的备数据库,因为本地管理的临时表空间不会道理任何undo或redo
4)简化空间分配,因为当指定AUTOALLOCATE子语句时,数据库自动选择合适的区大小。
5)减少了用户对数据字典的依赖,因为必要的信息存储在文件头部和位图块中。
6)对于本地管理的表空间,合并空闲的区是不必要的。
所有的表空间,包含SYSTEM表空间,都可以是本地管理的。
包DBMS_SPACE_ADMIN提供了本地管理表空间在维护存储过程。
1. 创建本地管理的表空间
通过在CREATE TABLESPACE语句的EXTENT MANAGEMENT子语句中指定LOCAL来创建本地管理的表空间。
这是新的永久表空间的缺省设置,但必须指定EXTENT MANAGEMENT LOCAL子语句来指定AUTOALLOCATE子语句或UNIFORM子语句。可以使用AUTOALLOCATE子语句让数据库自动管理区(缺省),或使用统一的指定大小(UNIFORM)的区来管理表空间。
如果预计表空间包含各种大小的对象,对象要求很多不同区大小的区,那么AUTOALLOCATE是最佳选择。如果不需要过多地控制空间分配和取消分配,AUTOALLOCATE也是好的选择,因为它简化了表空间管理。这个设置可能会浪费一些空间,但让数据库管理空间的好处很可能大于它的缺点。
如果想精确控制未使用的空间,可以精确预计为每个对象分配的空间和区的数量和大小,那么UNIFORM是好的选择。这个设置确保在表空间中不会有未使用的空间。
当没有明确指定区管理的类型时,数据库根据以下情况来决定区管理:
1)如果CREATE TABLESPACE语句忽略了DEFAULT存储子语句,那么数据库创建一个本地管理的自动分配的表空间。
2)如果CREATE TABLESPACE语句包含了DEFAULT存储子语句,那么数据库的考虑如下:
a.如果指定了MINIMUM EXTENT子语句,数据库衡量MINIMUM EXTENT,INITIAL和NEXT的值是否相同和PCTINCREASE是否为0。如果是,数据库使用INITIAL的区大小来创建本地管理的统一表空间。如果MINIMUM EXTENT,INITIAL和NEXT参数不同,或PCTINCREATE不是0,那么数据库忽略指定的区存储参数,创建一个本地管理的自动分配的表空间。
b.如果没有指定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的区在这个文件的区位图中被1位来表示。
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 TEMPORAY TABLESPACE语句。
2. 在本地管理的表空间中指定段空间管理
在本地管理的表空间中,数据库可以使用两种方法来管理段(segment)空间:自动和手动。
手动段空间管理使用称为空间列表的链接列表来管理段中的空闲空间,而自动段空间管理使用位图。自动段空间管理是更有效的方法,它是所有新的永久的本地管理表空间的缺省设置。
自动段空间管理比手动段空间管理提供更好的空间利用。它是自调整的,随着用户或实例的增加而扩展。在RAC环境中,自动段空间管理允许空间与实例之间的动态匹配(affinity)。另外,对于很多标准负载,使用自动段空间管理的应用程序的性能比使用手动段空间管理调整好的应用程序的更好。
尽管自动段空间管理是所有新的永久的本地管理的表空间的缺省设置,也可以明确使用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子语句禁用自动段空间管理。
在表空间创建时指定的段空间管理应用到所有后来在表空间中创建的段。不能更改表空间的段空间管理模式。
来源:《Oracle Database Database Administrator’s Guide, 19c》