Oracle 的逻辑结构 ( 表空间、段、区间、块 ) ——表空间
关于数据库 、表空间和数据文件的关系 :
l 一个 Oracle 数据库包含一个或多个逻辑存储单元—表空间,表空间用来存储数据的所有数据。
l Oracle 数据库的每一个表空间包含一个或多个数据文件,数据文件是一种与 Oracle 运行操作系统相关的物理结构。
l 数据库数据存储在构成数据库的表空间的数据文件中。
数据库分配空间的方法
表空间的大小就是构成表空间的数据文件的大小。而数据库的大小则是各个表空间大小的累计。
扩大数据库的三种方法:
l 给表空间增加数据文件
ALTER TABLESPACE TablespaceName ADD DATAFILE ‘Datafiel path/DatafileName’
l 增加新的表空间
CREATE TABLESPACE TablespaceName DATAFILE ‘Datafiel path/DatafileName’
l 增加数据文件大小
ALTER DATABASE DATAFILE ' DatafileName ' AUTOEXTEND ON NEXT 20M MAXSIZE 1000M;
表空间概览
一个数据库被划分成一个或多个叫表空间的逻辑存储单元;一个表空间被分割成一种叫数据段的逻辑单位;一个段又进一步分割为区间。区间则是一系列连续的数据块。
系统表空间
每一个 Oracle 数据库都包含一个 SYSTEM 表空间,数据创建的时候 Oracle 自动创建的,数据被打开时,该系统表空间总是在线的。
为了更好利用本地管理 表空间的优点,你可以创建一个本地管理系统表空间或者吧现存的字典管理系统表空间变更为本地管理方式。
在一个本地管理表空间的数据库环境中,是无法创建字典管理表空间的。在字典管理表空间中使用传输特性是可能的,但是却不能置为可写的。
在系统表空间中包含了整个数据的数据字典表;和相应的 PL/SQL 程序单元 ( 存储过程、函数、包、触发器等等 )
撤销表空间
撤销表空间是一个特殊的表空间,仅仅用来存储撤销信息,你不能在撤销表空间创建任何其他类型的数据段。每一个数据库都包含 0 或者多个撤销表空间。在自动撤销管理模式下,每一个 Oracle 实例被分配一个撤销表空间。撤销表空间管理撤销数据,通过 Oracle 自动创建和维护的撤销段。
一个事务中的第一条 DML 操作运行的时候,事务就被绑定到一个当前表空间的撤销段上
临时表空间。在极端情况下,假设一个实例没有撤销表空间,则事务被绑定到系统撤销段中。
每一个撤销表空间有一组撤销文件构成,并且基于本地管理的;和其他类型的表空间一样,撤销数据块形成区间,并且以位图的方式展现每个区间的状态。在某一个时间点上,一个区间要么被分配给一个事务表,要么是空闲的
缺省临时表空间
当系统表空间是基于本地管理的时候,则必须在创建数据库的同时指定一个缺省临时表空间;一个本地管理系统表空间不能被用来作为缺省的临时存储。
假如系统是字典管理方式,则创建数据库的时候不需要创建一个缺省临时表空间,系统表空间可以被用来作为缺省临时存储。当然在 alter.log 日志文件会收到“创建一个缺省临时表空间的建议”
使用多表空间
一个小的数据库仅仅需要系统表空间 , 不过 Oracle 公司建议你至少创建一个表空间来存储用户数据,以和数据字典信息隔离。这将会给带来更加弹性的系统管理操作,减少数据字典和模式对象在同一数据文件的争用。
你可以用多个表空间进行以下任务:
l 控制数据库数据的磁盘分配
l 给数据库用户分配特定的空间配额
l 通过使表空间在线或脱线控制数据的可用性
l 实施数据库部分备份 和恢复操作
l 在跨设备进行数据存储分配,以提高系统性能
数据库管理员可以用表空间来完成以下工作:
l 创建新表空间
l 在表空间中增加数据我呢间
l 设置或更改表空间的段的缺省存储参数设置
l 使表空间只读或读写
l 使表空间成为临时表空间或永久表空间
l 删除表空间
管理表空间的空间
表空间以区间为单位分配空间。表空间有两种方式来进行空闲和已用空间的跟踪
l 本地管理表空间:由表空间自己进行区间管理
l 字典管理表空间:通过数据字典进行区间管理
本地管理表空间
表空间管理所属的区间是通过位图方式来维护的,这个位图存在于每一个数据文件中用来跟中可用或已用数据块的状态。位图中的每一位都对应一组数据块或单一的数据块。当一个区间被分配或者释放或者重用时, oracle 改变位图值显示数据块的最新状态。这些改变不会产生回滚信息,因为本身不会改变数据字典中的表。 ( 表空间配额信息变更等个例除外 )
本地管理表空间与字典管理表空间相比有如下优势:
l 本地管理表空间自动的跟踪空闲空间,消除了合并可用区间的需要
l 区间的本地管理避免了空间管理操作的递归。
多个数据块大小
系统表空间的数据块大小是标准数据块大小。这个是数据库创建是设定好的。
你可以指定四种数据块大小。在初始文件中你给每一种不同大小的数据块配置相应的缓冲区。这些子缓冲区也可以在实例运行时进行配置。你可以用任何这些块大小来创建表空间。标准块大小适用于系统表空间和大多数其他表空间
在线和脱线表空间
数据库管理员可以使系统表空间之外的任何表空间在线或脱线,甚至数据库打开的时候。数据库打开的时候,系统表空间总是在线的,这是因为数据字典对 Oracle 必须是可用的。
表空间通常是在线的,因为这里面包含的数据对用户来说是可用的,数据库管理可以使表空间脱线主要用来进行备份和恢复。
只读表空间
只读表空间的主要目的是为了实施数据库恢复和备份的需要, Oracle 不能更新只读表空间的数据文件,因此这些文件就像 CR-ROM 或 WORM 驱动器中的只读媒介一样。
排序操作使用的临时表空间
通过为排序指定临时表空间的方法,您可以更加有效的为排序操作管理空间。这样有助于有效地消除空间管理操作的序列,这些操作会涉及排序空间的分配和回收。
所有使用排序的操作,例如 Joins, index builds, ordering, 分组聚合,收集优化统计,都受益于临时表空间。这种性能的提升在 RAC 环境下尤为明显。
数据库之间的表空间传输
传输表空间允许你可以把一部分数据从一个数据库转移到另外一个相同平台的数据库。你也可以通过在数据库之间拷贝表空间,克隆一个表空间并移植到另一个数据库中。
通过传输表空间移动数据的速度要比导出 / 导入或卸载 / 加载相同的数据快一个数量级,因为传输一个数据文件仅涉及到数据文件的复制和表空间元数据的集成。
本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/312708,如需转载请自行联系原作者