一、概述
1、理解本地管理表
空间的由来
2、理解什么是字典管理表
空间及工作原理
3、理解本地管理表空间的优势(为什么要使用本地管理表空间)
4、理解本地管理表空间的内部结构
5、理解字典管理表空间与本地管理表空间的转换
二、名词解释与约定
表空间(Tablespace)——为数据库提供使用空间的逻辑结构
,其对应物理结构是数据文件
,一个表空间可以包含多个数据文件
本地管理表空间(Locally Managed Tablespace简称LMT)——8i以后出现的一种新的表空间的管理模式,通过本地位图来管理表空间的空间使用
。 字典管理表空间(Dictionary-Managed Tablespace简称DMT)——8i以前包括以后都还可以使用的一种表
空间管理模式,通过数据字典管理表空间的空间使用
。 段(Segment)——数据库一种逻辑结构,如表段,索引段,回滚段等,段存在于表空间中,并对应一定的存储空间。
区间,可以简称区(Extent)——段的存储可以分成一个或多个区间,每个区间占用一定数量的数据块(block),在本地管理的表空间中,表空间的Extent就对应段的Extent。
块(Block)——数据库最小的存储单位,在本文中Block的大小约定为8192字节。
位(Bit)——本地管理表空间的
空间管理单位,一个位可能等于一个区间,也可能多个位组成一个区间。
三、本地管理表空间的由来
在
Oracle8I的版本中,
Oracle推出了一种全新的表空间管理方式:本地化管理的表空间。所谓本地化管理,就是指Oracle不再利用数据字典表来记录Oracle表空间里面的区的使用状况,而是在每个表空间的数据文件的头部加入了一个位图区,在其中记录每个区的使用状况。每当一个区被使用,或者被释放以供重新使用时,Oracle都会更新数据文件头部的这个记录,反映这个变化。
本地化管理的表空间的创建过程:
语法:CREATE TABLESPACE 表空间名字
DATAFILE ’数据文件详细信息’
[EXTENT MANAGEMENT { LOCAL
{AUTOALLOCATE | UNIFORM [SIZE INTETER [K|M] ] } } ]
关键字EXTENT MANAGEMENT LOCAL 指定这是一个本地化管理的表空间。对于系统表空间,只能在创建数据库的时候指定EXTENT MANGEMENT LOCAL,因为它是数据库创建时建立的第一个表空间。
在8i中,字典管理还是默认的管理方式,当选择了LOCAL关键字,即表明这是一个本地管理的表空间。当然还可以继续选择更细的管理方式:是 AUTOALLOCATE 还是 UNIFORM.。若为AUTOALLOCATE,则表明让Oracle来决定区块的使用办法;若选择了UNIFORM,则还可以详细指定每个区块的大小,若不加指定,则为每个区使用1M大小。
Oracle之所以推出了这种新的表空间管理方法,让我们来看一下这种表空间组织方法的优点:
1. 本地化管理的表空间避免了递归的空间管理操作。而这种情况在数据字典管理的表空间是经常出现的,当表空间里的区的使用状况发生改变时,数据字典的表的信息发生改变,从而同时也使用了在系统表空间里的回滚段。
2. 本地化管理的表空间避免了在数据字典相应表里面写入空闲空间、已使用空间的信息,从而减少了数据字典表的竞争,提高了空间管理的并发性
3. 区的本地化管理自动跟踪表空间里的空闲块,减少了手工合并自由空间的需要。
4. 表空间里的区的大小可以选择由Oracle系统来决定,或者由数据库管理员指定一个统一的大小,避免了字典表空间一直头疼的碎片问题。
5. 从由数据字典来管理空闲块改为由数据文件的头部记录来管理空闲块,这样避免产生回滚信息,不再使用系统表空间里的回滚段。因为由数据字典来管理的话,它会把相关信息记在数据字典的表里,从而产生回滚信息。
由于这种表空间的以上特性,所以它支持在一个表空间里边进行更多的并发操作,并减少了对数据字典的依赖。
四、本地管理表空间管理机制
表空间是一种为段(表,索引等)提供空间的逻辑结构,所以,当在表空间中增加,删除段的时候,数据库就必须跟踪这些空间的使用。
如下例所示,假定一个新创建的表空间包含了五个表
表一……表二……表三……表四……表五……未用空间
当我们删除表四的时候,就有如下结果
表一……表二……表三……空闲空间段……表五……未用空间
很明显,ORACLE需要有一个机制来管理表空间中各数据文件的这些分配的或未分配的空间,为了跟踪这些可以使用的空间(包括未分配使用的和可以重复使用的),对于每一个空间,我们必须知道:
1、这个可用空间位于什么数据文件
2、这个空间的尺寸是多大
3、如果它在用了,是哪一个段占用的这个空间