oracle 表空间的空间管理

 
表空间(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都会更新数据文件头部的这个记录,反映这个变化。
本地化管理的表空间的创建过程:(在oracle 10g以后默认都是采用本地管理表空间)
   语法:CREATE TABLESPACE 表空间名字
          DATAFILE '数据文件详细信息'
          [EXTENT MANAGEMENT { LOCAL
          {AUTOALLOCATE | UNIFORM [SIZE INTETER [K|M] ] } } ]
关键字EXTENT MANAGEMENT LOCAL 指定这是一个本地化管理的表空间。对于系统表空间,只能在创建数据库的时候指定EXTENT MANGEMENT LOCAL,因为它是数据库创建时建立的第一个表空间。
优点:
1. 本地化管理的表空间避免了递归的空间管理操作。而这种情况在数据字典管理的表空间是经常出现的,当表空间里的区的使用状况发生改变时,数据字典的表的信息发生改变,从而同时也使用了在系统表空间里的回滚段。
  2. 本地化管理的表空间避免了在数据字典相应表里面写入空闲空间、已使用空间的信息,从而减少了数据字典表的竞争,提高了空间管理的并发性
  3. 区的本地化管理自动跟踪表空间里的空闲块,减少了手工合并自由空间的需要。
  4. 表空间里的区的大小可以选择由Oracle系统来决定,或者由数据库管理员指定一个统一的大小,避免了字典表空间一直头疼的碎片问题。
  5. 从由数据字典来管理空闲块改为由数据文件的头部记录来管理空闲块,这样避免产生回滚信息,不再使用系统表空间里的回滚段。因为由数据字典来管理的话,它会把相关信息记在数据字典的表里,从而产生回滚信息。
由于这种表空间的以上特性,所以它支持在一个表空间里边进行更多的并发操作,并减少了对数据字典的依赖。
oracle中将字典管理表空间转换为本地管理表空间
字典管理表空间每当表或其他对象需要扩大的时候都检查其数据字典以确保有可用的空间分配给对象,然后给对象分配一个新区段并更新其可用空间信息。
  本地管理表空间保存数据文件本身的空间管理信息,而且表空间自动跟踪每个数据文件块的可用或已用状态。
  在事务比较多的数据库中显然字典管理每次插入数据时都会检查数据字典,这就使得数据库性能有所损耗。
  转换:
  第一种方法――命令方式转移。
  首先你要新建一个oracle表空间,在oracle 10g以后默认都是采用本地管理表空间的。
  对于表空间的转移使用命令
  ALTER TABLE temp MOVE TABLESPACE new_temp;
  对于索引你需要重建
  ALTER TABLE index REBUILD TABLESPACE new_index;
以上摘自: http://www.itpub.net/142629.html  、 http://www.examda.com/oracle/zhonghe/20090804/085905456.html 。
通过以上 文章对表空间的空间管理更深一步!

你可能感兴趣的:(oracle,职场,表空间,休闲,本地管理表空间)