oracle tablespace逻辑结构介绍
表空间(TABLESPACE)是ORACLE数据库中最大的逻辑结构。ORACLE数据库是由一个或多个表空间组成的。它在物理上与磁盘上的数据文件相对应(一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表空间)。从物理上说数据库的数据被存放在数据文件中,而从逻辑上说是被存放在表空间中的。
一、表空间概述
表空间是ORACLE数据库中最大的逻辑结构。数据库的所有对象和方案都被逻辑的保存在表空间中。
(一)表空间的特性与作用
表空间的特性:
1.一个数据库可以有多个表空间。可以在数据库中创建、删除表空间;
2.一个表空间只属于一个数据库;
3.一个表空间必须要有一个数据文件;
4.一个表空间的大小等于其中所有数据文件的大小之和。数据库的大小等于其中所有表空间的大小之和;
5.表空间可以被联机和脱机。SYSTEM表空间不能被脱机;
6.表空间可以在读写、只读状态之间切换;
7.每个表空间由一个或多个物理存在的操作系统的数据文件组成。这种数据文件可以具有固定的大小,或允许其自动变大。可以在表空间中添加、删除数据文件;
8.方案对象、表、索引的数据都被存储在表空间的数据文件中。一个数据文件存储不下,就存储在另一个数据文件中,只要该数据文件是本表空间中的就可以;
9.一个用户默认使用一个表空间,但他的不同方案对象的数据可以被存储在不同表空间中;
10.一个用户使用的表空间的数量是有一定配额的,不能超出这个配额;
11.可以根据使用目的,创建不同类型的表空间,如永久表空间、临时表空间、撤销表空间、大表空间等。不同类型的表空间的格式、使用方式及目的是不同的。
表空间的作用:
1.控制数据库所占用的磁盘空间;
2.控制用户所占用的表空间配额,也就等于控制用户所占用的配额空间;
3.通过将不同表的数据、分区表中不同分区的数据放置到不同的表空间中,可以提高数据库的I/O性能,并有利于进行部分备份和恢复等管理工作;
4.能够将一个表的数据和这个表的索引数据分别防止到不同的表空间中,同样可以提高数据库的I/O性能;
5.可以将表空间设置成只读状态而保持大量的静态数据。
(二)表空间的类型
一个数据库通常有SYSTEM,SYSAUX,TEMP三个默认表空间,一个或多个临时表空间,而且还有一个撤销表空间和几个应用程序专用的应用表空间。
表空间可以划分为系统表空间(SYSTEM和SYSAUX)和非系统表空间两类。
1)系统表空间
系统表空间包括SYSTEM表空间和SYSAUX表空间,其余的表空间就是非系统表空间。存放到ORACLE的数据字典及其数据。
(2)临时表空间
撤了撤销(UNDO)表空间、相对于临时(TEMPORARY)空间而言,其他表空间就是永久(PERMANENT)表空间。
当执行排序(ORDER BY)、分组汇总(GROUP BY)、索引(CREATE INDEX)等功能的SQL语句时,会产生大量的临时数据。服务器进程首先将临时数据存放到内存结构的PGA区的排序区中,当排序区不够用时,服务器进程就会在临时表空间中建立临时段,并将这些临时数据存放到临时段中。
如果在创建用户时没有为用户指定一个临时表空间,那么就会使用SYSTEM表空间来说创建临时段,存放临时数据。这样做的结果是:
1.占用了SYSTEM表空间的存储空间,使可用的存储空间下降;
2.频繁的分配和释放临时段,会在SYSTEM表空间中产生大量的存储碎片,使磁盘的读取效率下降。
可以通过动态性能视图V$SORT_SEGMENT来查询排序段的使用情况,通过动态性能视图V$SORT_USAGE来查询使用排序段的会话和用户信息。
(3)撤销表空间
撤销表空间存储撤销段,撤销段主要用于入下目的:
1.用一条ROLLBACK语句明确的回退一个事务;
2.隐含的回退一个事务;
3.重构数据的一个读一致图像;
4.从逻辑错误中恢复。
在ORACLE中可以创建多个撤销表空间,但同一时刻值允许激活一个撤销表空间。在初始化参数文件中用UNDO_TABLESPACE指出要激活的撤销表空间。撤销表空间的组织与管理由ORACLE内部自动完成。当回退段不足时,一个事务可以使用多个回退段,不会中止事务的运行。数据库管理员只需了解撤销表空间是否有足够的空间,而不必为每个事务设置回退段。
4)大文件表空间与小文件表空间
大文件表空间只能放置一个数据文件(或临时文件)。但其数据文件可以包括4G个数据块。
如果一个超大型数据库具有上千个数据文件的话,更新数据文件头部信息的操作就会花费很长时间。更新数据文件头部信息的操作更快一些。
三)表空间的区、段管理方式
表空间有两种管理方式字典管理和本地管理
字典管理方式(DICTIONARY-MANAGED TABLESPACE,DMT)
字典管理方式是传统的管理方式,是为了与早期版本兼容而保留的区管理方式。在字典管理方式下,使用数据字典来管理存储空间的分配。
当在表空间中分配新的区,或回收已分配的区时,ORACLE将对数据字典中的相关“基础表”进行查询、更新,并且在这一过程中,使用单线程搜索方法,速度较慢。另外,对表的更新操作会产生会退信息和重做信息,因此,在分配区或回收区时,会在数据库中产生会退信息和重做信息。这是字典管理方式的特点,也是它的缺点。
本地管理方式(LOCAL-MANAGED TABLESPACE,LMT)
从ORACLE 9I开始,创建表空间时默认使用本地管理方式。
本地管理方式下,表空间中分配与区回收的管理信息都被存储在表空间的数据文件中,而与数据字典无关。表空间会在每个数据文件中维护一个"位图(BITMAP)"结构,用于记录表空间中所有区的分配情况。
当在表空间中分配的区,或回收已分配的区时,ORACLE将对数据文件中的"位图"进行更新。因此这种更新不是对表的更新操作,所以不会产生回退信息和重做信息。
与字典管理方式相比,本地管理方式具有如下的好处:
1.因为空间的分配和回收不需要对数据库进行访问,而只是简单的改变数据文件中的位图,所以能够提高空间存储管理的速度和并发性;
2.能够避免在字典管理方式中空间分配期间可能出现的递归现象,所以提高了空间存储管理的性能。
3.允许将数据库作为只读的备用数据库(STANDBY DATABASE)。由于不会产生会退信息和重做信息,所以不会向数据库中写信息,这样就可以将整个数据库设置为只读状态。这种数据库可以作为备用数据库。
4.简化了空间分配,以为当指定了AUTOALLOCATE子句时,ORACLE会自动选择合适的区大小,不再需要用户进行任何干预;
5.减少用户对数据库字典的依赖,因为必要的信息都被存储在数据文件的位图中了,而不是保存在数据字典中;
6.不存在磁盘碎片问题。使用位图的方法去查询空闲空间,相邻的空闲块被视为一个大的空闲块,从设计上保证自动合并磁盘碎片,碎片产生后由系统自动消除;
7.DBMS_SPACE_ADMIN包对本地管理的表空间提供维护过程。
在本地管理方式下,可以用以下两个选项来指定表空间的区的分配方式:
1. 统一(UNIFORM):统一分配,指定表空间中所有区的大小都相同。区的大小的默认值是1MB,也可以指定这个大小。但不能在撤销表空间中使用这个选项;
2.自动(AUTOALLOCATE或SYSTEM)自动分配,指定由ORACLE系统来自动管理区的大小,这是默认的设置。
在自动去的分配方式下,区的大小随表的大小自动动态改变,他们之间的对应关系如下:
表大小 区大小
64KB(或前16个区) 64KB
1MB(接下来的63个区) 1MB
64MB(接下来的120个区) 8MB
1000MB(以后的区) 64MB
当表的大小不超过64KB时,表空每个区的大小为64K;
当表的大小不达到1MB时,表中每个区的大小为1MB;
当表的大小超过64MB且小于1000MB时,区的大小都是8MB;当表的大小达到1000MB时,区的大小为64MB。
也就是ishuo,这个算法只能使小表取小区,大表取大区,避免大表拥有过多的区。所以,自动选项最适合于由小表和大表构成的一个多用途的数据库系统。但是,对于数据超过1GB的大表,系统在分配磁盘空间时一次分配64MB,如果所插入的数据没有达到64MB,则可能造成空间的浪费。
(2)段空间管理方式
在本地管理方式的表空间中,除了可以用UNIFORM和AUTOALLOCATE来指定区的分配方式之外,还可以指定段空间的管理方式。段空间管理方式主要是指ORACLE用来管理段中已用数据块和空闲数据块的机制。
在本地管理方式下,可以用如下两个关键字来指定表空间的段空间管理方式:
1.MANUAL(手动)方式,这时ORACLE将使用空闲列表(FREE LIST)来管理段的空闲数据块。
2.AUTO(自动)方式,这时ORACLE将使用位图(BITMAP)来管理段的已用数据块和空闲数据块。即,通过位图中单元的取值来判断段汇总的数据块是否可用。
空闲列表(FREELIST)是传统的段空间管理方式,段中所有的空闲数据块都被放入一个空闲列表中,在需要存储空间时据在该列表中进行搜索。与空闲列表相比,使用位图的自动方式能够提供更好的存储利用率。因为在自动方式下,用户不需要在创建方案对象时通过指定PCTFREE,PCTUSED,FREELIST,FREELIST GROUP等参数来为段设置存储管理方式,即使设置了,也将会被忽略。
当SYSTEM表空间的区管理方式是本地管理方式时则不可能创建字典管理的表空间,但可以创建本地管理的表空间。
另外,创建表空间这种修改数据库物理结构的信息会同时被记录到预警日志文件中。
(四)表空间的状态
SYSTEM表空间不能被设置为只读状态或脱机状态。
(1)读写状态 (READ-WRITE)
只读(READ-ONLY)
如果将表空间设置为只读状态,则任何用户都无法向表空间中写入数据,也无法修改表空间中已有的数据。将表空间设置为只读状态的主要目的是,避免对数据库进行修改。使用户只能查询其中的数据,而不能修改其中的数据。同时,由于只读表空间中的数据不会被修改,因此DBA只需将只读表空间备份一次即可,不必再次对这个表空间进行备份。如果数据库中保存大量的不允许用户修改、但又允许用户访问的数据。
(2)脱机状态
将某个表空间设置为脱机状态,以使该表空间暂时不让用户访问。
脱机模式有以下4种:
1.正常(NORMAL):默认的脱机模式。
2.临时(TEMPORARY):
3.立即(IMMEDIATE):
4.用于恢复(FOR RECOVER):