频道栏目
读书频道 > 数据库 > Oracle > Oracle 11g数据库基础与应用教程
2.3.1 存储结构
2013-03-09 13:06:43     我来说两句
收藏   我要投稿
Oracle是数据库领域最优秀的数据库系统之一,本书以Oracle 11g为蓝本,系统地讲述了数据库的原理、Oracle 11g的功能和应用。全书共分11章,在讲述数据库原理的基础知识和数据库结构化查询语言SQL的同时,详细地...  立即去当当网订购

Oracle数据库的存储结构分为逻辑存储结构和物理存储结构,这两种存储结构既相互独立又相互联系,如图2.2所示。


 

逻辑存储结构主要描述Oracle数据库的内部存储结构,即从技术概念上描述在Oracle数据库中如何组织、管理数据。从逻辑上来看,数据库是由系统表空间、用户表空间等组成。表空间是最大的逻辑单位,块是最小的逻辑单位。逻辑存储结构中的块最后对应到操作系统中的块。因此,逻辑存储结构是与操作系统平台无关的,是由Oracle数据库创建和管理的。

物理存储结构主要描述Oracle数据库的外部存储结构,即在操作系统中如何组织、管理数据。因此,物理存储结构是与操作系统平台有关的。从物理上看,数据库由控制文件、数据文件、重做日志文件等操作系统文件组成。

1.逻辑存储结构

Oracle的逻辑存储结构是由一个或多个表空间组成, 一个表空间(Tables Pace)由一组段组成,一个段(Segment)由一组区组成,一个区(Extent)由一批数据库块组成,一个数据库块(Block)对应一个或多个物理块。逻辑结构示意如图2.3所示。


 

(1) 数据库块(Database Block)

块是数据库使用的I/O最小单元,也是最基本的存储单位,又称逻辑块或Oracle块。其大小在建立数据库的时候指定,虽然在初始化文件中可见,但是不能修改。为了保证存取的速度,它是OS数据块的整数倍。Oracle的操作都是以块为基本单位,一个区间可以包含多个块,如果区间大小不是块大小的整数倍,Oracle实际也扩展到块的整数倍。

数据库块的结构包括块头和存储区两个部分,如图2.4所示。


 

① 第一部分:块头

标题:包括通用的块信息,如块地址/段类型等,最佳大小为85~100字节。

表目录:存储聚集中表的信息,这些信息用于聚集段。

行目录:包括这块中的有效行信息,允许使用每行开头的2字节。

② 第二部分:存储区

空闲区:这块中能插入或修改的一组空间。

行数据区:存储表或索引的数据。

PCTFREE与PCTUSED是表的两个存取参数,其实是作用在表中的块上面的,PCTFREE与PCTUSED表示两个百分比,默认分别是10与40。PCTFREE表示保留该百分比的可用空间用于以后的行更新,避免行迁移。如果行数据达到PCTFREE保留的空间,该块从FREE LIST上撤消下来,不再接收数据。PCTUSED表示当行的空闲空间降低(如删除数据)到该参数指定的百分比的时候,该块重新进入FREE LIST,开始接收新的数据。PCTFREE与PCTUSED的配置与系统的优化有一定的关系,所以要慎重。

PCTFREE+PCTUSED不要大于等于100,否则将导致块不断地在FREE LIST移上移下,严重影响性能。

(2) 区(Extent)

区是数据库存储空间分配的逻辑单位,Extent的翻译有多种,有的译作扩展,有的译作盘区,通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。

理论上一个段可以有无穷个区间,但是多个区间对Oracle却是有性能影响的,Oracle建议把数据分布在尽量少的区间上,以减少Oracle的管理与磁头的移动,但是在某些特殊情况下,需要把一个段分布在多个数据文件或多个设备上,适当地加多区间数也是有很大好处的。

通过DBA/ALL/USER_EXTENTS可以查询详细的区间信息。

(3) 段(Segment)

段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。

表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接与数据文件发生关系。一个段可以属于多个数据文件,段可以指定扩展到哪个数据文件上。

段基本可以分为以下4种。

数据段(Data Segment):存储表中的所有数据。

索引段(Index Segment):存储表上最佳查询的所有索引数据。

回滚段(Rollback Segment):存储修改之前的位置和值。

临时段(Temporary Segment):存储表排序操作期间建立的临时表的数据。

通过DBA/ALL/USER_SEGMENTS可以查询详细的段信息。

(4) 表空间(Table Space)

表空间是最大的逻辑单位,对应一个或多个数据文件,表空间的大小是它所对应的数据文件大小的总和。表空间是Oracle逻辑存储结构中数据的逻辑组织,第一个数据库至少有一个系统表空间(System Tablespace)。

Oracle 11g自动创建的表空间有:

Example(实例表空间)。

Sysaux(辅助系统表空间)。用于减少系统负荷,提高系统的作业效率。

System(系统表空间)。存放关于表空间的名称、控制文件、数据文件等管理信息,是最重要的表空间。它属于Sys、System两个Schema(方案),仅被这两个或其他具有足够权限的用户使用。但是均不可删除或者重命名System表空间。

Temp(临时表空间)。存放临时表和临时数据,用于排序。

Undotbs(重做表空间)。

Users(用户的表空间)。永久存放用户对象和私有信息,也被称为数据表空间。

一般地,系统用户使用System表空间,非系统用户使用Users表空间。

2.物理存储结构

Oracle物理存储结构包含3种数据文件:控制文件、数据文件和日志文件,另外还包括一些参数文件。由控制文件来管理数据文件和日志文件,用参数文件来寻找控制文件。其中数据文件的扩展名为.DBF,日志文件的扩展名为.LOG,控制文件的扩展名为.CTL。

(1) 控制文件(Control File)

数据库控制文件是一个很小的二进制文件,它维护着数据库的全局物理结构,用以支持数据库成功地启动和运行。创建数据库时,同时就提供了与之对应的控制文件。在数据库使用过程中,Oracle不断地更新控制文件,所以只要数据库是打开的,控制文件就必须处于可写状态。若由于某些原因控制文件不能被访问,则数据库也就不能正常工作了。

每一个Oracle数据库有一个控制文件,它记录着数据库的物理结构,其中主要包含下列信息类型:

数据库名称

数据库数据文件和日志文件的名字和位置

数据库建立日期

日志历史

归档日志信息

表空间信息

数据文件脱机范围

数据文件拷贝信息

备份组和备份块信息

备份数据文件和重做日志信息

当前日志序列数

检查点信息(CHECKPOINT)

Oracle数据库的控制文件是在数据库创建的同时创建的。默认情况下,在数据库创建期间至少有一个控制文件副本,如在Windows平台下,将创建3个控制文件的副本。

每一次Oracle数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时,它们必须被打开。当数据库的物理组成更改时,Oracle自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。如果数据库的物理结构发生了变化,用户应该立即备份控制文件。一旦控制文件不幸被毁损,数据库便无法顺利启动。也因为如此,控制文件的管理与维护工作显得格外重要。

(2) 数据文件(Data File)

一个Oracle数据库可以拥有一个或多个物理的数据文件。数据文件包含了全部数据库数据。逻辑数据库结构的数据也物理地存储在数据库的数据文件中。

数据文件具有如下特征:

一个数据库可拥有多个数据文件,但一个数据文件只对应一个数据库。

可以对数据文件进行设置,使其在数据库空间用完的情况下进行自动扩展。

一个表空间(数据库存储的逻辑单位)可以由一个或多个数据文件组成。

数据文件中的数据在需要时可以读取并存储在Oracle的内存储区中。例如,用户要存取数据库一个表的某些数据,如果请求的数据不在数据库的内存存储区中,则从相应的数据文件中读取并存储在内存存储区。当数据被修改或是插入新数据时,不必立刻写入数据文件,而是把数据暂时存储在内存,由Oracle的后台进程DBWR来决定何时将其写入数据文件中,这是为了减少磁盘I/O的次数,提高系统的效率。

数据文件是用于存储数据库数据的文件,如表、索引数据等都物理地存储在数据文件中。这就把数据文件和表空间联系在一起。表空间是一个或多个数据文件在逻辑上的统一组织,而数据文件是表空间在物理上的存在形式。没有数据文件的存在,表空间就失去了存在的物理基础;而离开了表空间,Oracle就无法获得数据文件的信息,无法访问到对应的数据文件,这样的数据文件就成了垃圾文件。

数据文件的大小可以有两种方式表示,即字节和数据块。数据块是Oracle数据库中最小的数据组织单位,它的大小由参数DB_BLOCK_SIZE来确定。

(3) 日志文件(Redo Log File)

日志文件也称为重做日志文件。重做日志文件用于记录对数据库的所有修改信息,修改信息包括用户对数据的修改,以及管理员对数据库结构的修改。重做日志文件是保证数据库安全和数据库备份与恢复的文件。

重做日志文件主要在数据库出现故障时使用。在每一个Oracle数据库中,至少有两个重做日志文件组,每组有一个或多个重做日志成员,一个重做日志成员物理地对应一个重做日志文件。在现实作业系统中为确保日志的安全,基本上对日志文件采用镜像的方法。在同一个日志文件组中,其日志成员的镜像个数最多可以达到5个。有关日志的模式包括归档模式(ARCHIVELOG)和非归档模式(NOARCHIVELOG)两种。

提示:日志成员镜像个数受参数MAXLOGNUMBERS的限制。若需要确定系统正在使用哪一个日志文件组,可以查询数据字典V$LOG,还可以查询数据字典V$LOGFILE,进一步找到正在使用日志组中的哪个日志文件。管理员可以通过语句ALTER SYSTEM SWITCH LOGFILE来强行地进行日志切换;若要查询数据库运行在何种模式下,可以查询数据字典V$DATABASE,在数据字典V$LOG_HISTORY中记录着历史日志的信息。

Oracle在重做日志文件中以重做记录的形式记录用户对数据库进行的操作。当需要进行数据库恢复时,Oracle将根据重做日志文件中的记录,恢复丢失的数据。重做日志文件是由重做记录组成的,重做记录又称为重做条目,它由一组修改向量组成。每个修改向量都记录了数据库中某个数据块所做的修改。例如,如果用户执行了一条UPDATE语句对某个表中的一条记录进行修改,同时将生成一条重做记录。这条重做记录可能由多个变更向量组成,在这些变更向量中记录了所有被这条语句修改过的数据块中的信息。被修改的数据块包括表中存储这条记录的数据块,以及回滚段中存储的相应的回滚条目的数据块。

利用重做记录,不仅能够恢复对数据文件所做的修改操作,还能够恢复对回滚段所做的修改操作。因此,重做日志文件不仅可以保护用户数据库,还能够保护回滚段数据。在进行数据库恢复时,Oracle会读取每个变更向量,然后将其中记录的修改信息重新应用到相应的数据块上。

说明:数据文件、控制文件、日志文件,还有一些其他文件(如参数文件、备份文件等),构成了Oracle数据库的物理存储结构,对应于操作系统的具体文件,是Oracle数据库的物理载体。

(4) 参数文件(Parameter File)

当Oracle实例启动时,它从一个初始化参数文件中读取初始化参数。初始化文件记载了许多数据库的启动参数,如内存、控制文件、进程数等,对数据库的性能影响很大,如果不是很了解,不要轻易乱改写,否则会引起数据库性能下降。这个初始化参数文件可以是一个只读的文本文件,或者是可以读/写的二进制文件。这个二进制文件被称作服务器参数文件(Sever Parameter File),它总是存储在服务器上。使用服务器参数文件,可以使得管理员能用alter system命令把对数据库所作的改变保存起来,即使重新启动数据库,改变也不会丢失。因此Oracle建议用户使用服务器参数文件。可以通过编辑过的文本初始化文件,或者使用DBCA来创建服务器参数文件。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.3 Oracle 11g体系结构概述
下一篇:2.3.2 内存结构
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站