Oracle存储结构分物理存储结构和逻辑存储结构。
Oracle存储结构示意图
1. 数据文件
每一个ORACLE数据库有一个或多个物理的数据文件(data file)。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:
一个数据文件仅与一个数据库联系。
一旦建立,数据文件不能改变大小.
一个表空间(数据库存储的逻辑单位)由一个或多个数据文件组成。
数据文件中的数据在需要时可以读取并存储在ORACLE内存储区中。例如:用户要存取数据库一表的某些数据,如果请求信息不在数据库的内存存储区内,则从相应的数据文件中读取并存储在内存。当修改和插入新数据时,不必立刻写入数据文件。为了减少磁盘输出的总数,提高性能,数据存储在内存,然后由ORACLE后台进程DBWR决定如何将其写入到相应的数据文件。
2. 日志文件
每一个数据库有两个或多个日志文件(redo log file)的组,每一个日志文件组用于收集数据库日志。日志的主要功能是记录对数据所作的修改,所以对数据库作的全部修改是记录在日志中。在出现故障时,如果不能将修改数据永久地写入数据文件,则可利用日志得到该修改,所以从不会丢失已有操作成果。
日志文件主要是保护数据库以防止故障。为了防止日志文件本身的故障,ORACLE允许镜象日志(mirrored redo log),以致可在不同磁盘上维护两个或多个日志副本。
日志文件中的信息仅在系统故障或介质故障恢复数据库时使用,这些故障阻止将数据库数据写入到数据库的数据文件。然而任何丢失的数据在下一次数据库打开时,ORACLE自动地应用日志文件中的信息来恢复数据库数据文件。
Oralce两种日志文件类型:
联机日志文件
这是Oracle用来循环记录数据库改变的操作系统文件
归档日志文件
这是指为避免联机日志文件重写时丢失重复数据而对联机日志文件所做的备份
Oracle有两种归档日志模式,Oracle数据库可以采用其中任何一种模式:
NOARCHIVELOG
不对日志文件进行归档。这种模式可以大大减少数据库备份的开销,但可能回导致数据的不可恢复
ARCHIVELOG
在这种模式下,当Oracle转向一个新的日志文件时,将以前的日志文件进行归档。为了防止出现历史“缺口”的情况,一个给定的日志文件在它成功归档之前是不能重新使用的。归档的日志文件,加上联机日志文件,为数据库的所有改变提供了完整的历史信息。
在Oracle利用日志文件和归档日志文件来恢复数据库时,内部序列号可以起一个向导的作用。
3. 控制文件
每一ORACLE数据库有一个控制文件(control file),它记录数据库的物理结构,包含下列信息类型:
数据库名;
数据库数据文件和日志文件的名字和位置;
数据库建立日期。
为了安全起见,允许控制文件被镜象。
每一次ORACLE数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们必须被打开。当数据库的物理组成更改时,ORACLE自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。
4. 参数文件
除了构成Oracle数据库物理结构的三类主要文件外,Oracle数据库还具有另外一种重要的文件:参数文件。参数文件记录了Oracle数据库的基本参数信息,主要包括数据库名、控制文件所在路径、进程等。与旧版本的初始化参数文件INITsid.ora不同,在Oracle10g中还可以使用二进进制服务器参数文件,并且该服务器参数文件在安装Oracle数据库系统时由系统自动创建,文件的名称为SPFILEsid.ora,sid为所创建的数据库实例名。
SPFILEsid.ora中的参数是由Oracle系统自动管理。如果想要对数据库的某些参数进行设置,则可能过OEM或ALTER SYSTEM命令来修改。用户最好不要用编辑器进行修改。
Oracle逻辑存储结构示意图
一、数据块(data blocks)
数据块是Oracle数据库逻辑存储结构中的最小单位,也是执行数据库输入输出的最小存储单位。通常Oracle数据块是操作系统块的整数倍。数据块的标准大小被写入到初始化参数DB_BLOCK_SIZE中,Oracle允许在同一个数据库中存在不同大小的数据块,与标准块大小不同的就是非标准块。
二、数据区(extent)
数据区是由一组连续的Oracle数据块所构成的Oracle存储结构,由一个或多个数据块组成。一个或多个数据区组成一个段,当段中所有空间被使用完后,Oracle系统将自动为该段分配一个新的数据区,可见,数据区是Oracle存储分配的最小单位。
三、段(segment)
段是由一个或多个数据区构成的,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象。一个段只属于一个特定的数据对象,每当创建一个具有独立段的数据对象时,Oracle将为它创建一个段。
四、表空间(tablespace)
表空间是Oracle数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象。一个表空间由一个或多个数据文件(操作系统物理存储结构)组成,一个数据文件只属于一个表空间。表空间的大小等于所有从属于它的数据文件大小的总和。