链接:文件体系结构
Oracle数据库:①数据库(DB),存放在磁盘上;②数据库管理系统(DBMS)对磁盘上的数据库进行管理;分别对应着数据库的存储结构和软件结构。
Oracle数据库的存储结构(Storage Structure):分为物理存储结构和逻辑存储结构,分别描述了在操作系统中和数据库系统内部数据的组织与管理方式。其中,物理存储结构表现为操作系统中一系列文件,逻辑存储结构是对物理存储结构的逻辑组织与管理。
Oracle数据库的软件结构:即Oracle实例,包括内存结构与后台进程结构两部分。
一、物理存储结构
Oracle数据库在物理上主要由3种类型的文件组成,分别是数据文件(.dbf)、控制文件文件(.ctl)和重做日志文件(*.log)
①数据文件(Data File)
数据文件是指存储数据库数据的文件。例如,表中的记录和索引等都存放在数据文件中。
读取数据时,如果用户要读取的数据不在内存的数据缓冲区中,那么Oracle就从数据文件中把数据读取出来,放到内存的缓冲区中去,供用户查询;存储数据时,用户修改或添加的数据会先保存在内存的数据缓冲区中,然后由Oracle的后台进程DBWn将数据写入数据文件。
数据文件特点:
1。一个表空间由一个或多个数据文件组成。
2。一个数据文件只对应一个数据库。而一个数据库通常包含多个数据文件。
3。数据文件可以通过设置其参数,实现其自动扩展的功能。
了解数据文件的信息,可以查询数据字典DBA_DATA_FILES和V$DATAFILE
desc dba_data_files;
column name format a40;
select file#,name,checkpoint_change# from v$datafile;
FILE#为数据文件编号;NAME为数据文件名称;CHECKPOINT_CHANGE#为数据文件的同步号,同步号随着系统的运行自动修改,以维持所有数据文件的同步。
②控制文件(Control Files)
控制文件是一个很小的二进制文件,用于描述数据库的物理结构。在Oracle数据库中,控制文件相当重要,它存放着数据库中数据文件和日志文件的信息。
一个Oracle数据库通常包含有多个控制文件,在数据库的使用过程中,数据库需要不断更新控制文件,一旦控制文件受损,那么数据库将无法正常工作。
通过数据字典v$controlfile,可以了解控制文件的信息。
select name from v$controlfile;
③重做日志文件(Redo Log File)
简称日志文件,是指记录数据库中所有修改信息的文件。借助于日志文件,可以保证数据库的安全,也可以实现数据库备份与恢复。
为了确保日志文件的安全,在实际应用中,允许对日志文件进行镜像。一个日志文件和它的所有镜像文件构成一个日志文件组,它们具有相同的信息。同一组中的日志文件最好保存到不同的磁盘中,这样可以防止物理损坏带来的麻烦。
通过数据字典v$LOG,可以了解系统当前正在使用哪个日志文件组。
select group#,members,status from v$log;
④其他文件
参数文件、备份文件、归档重做日志文件 和 警告、跟踪日志文件。
二、逻辑存储结构
Tip:数据库的逻辑存储结构概念存储在数据库的数据字典中,可以通过数据字典查询逻辑存储结构信息。
如上图,Oracle数据库的逻辑存储结构分为Oracle数据块(Oracle Data Block)、区(Extent)、段(Segment)和表空间(Table space)4种。一个或多个连续的Oracle数据块构成区,一个或多个区构成段,一个或多个段构成表空间,所有表空间构成数据库。
①Oracle数据块
Oracle数据块是数据库中最小的逻辑存储单元,是数据库执行输入、输出操作的最小单元,由一个或者多个操作系统块构成。
在Oracle 11g数据库中,数据块分为标准块和非标准块两种,其中标准块由数据库初始化参数DB_BLOCK_SIZE设置,其大小不可更改。Oracle数据库的默认数据缓冲区就是由标准数据块构成的。
show parameter db_block_size;
Tip:由于块头部、表目录和行目录所组成的头部信息区并不存储实际数据,所以一个数据块的容量实际上就是空闲空间和行空间容量的总和
②区
区由一系列连续的数据块构成的逻辑存储单元,是存储空间分配的最小单位。
引入目的:为了提高系统存储空间分配的效率,以区为单位的存储空间分配大大减少了磁盘分配的次数。
select min_extents,max_extents,tablespace_name from dba_tablespaces;
③段
段是由一个或多个连续或不连续的区组成的逻辑存储单元,用于存储特定的、具有独立存储结构的数据库对象。根据存储对象类型不同,分为表段、索引段、临时段和退回段。
1. 表段,又称为数据段,用来存储表或簇的数据,可以细分为普通表段(Table)、分区表段(Table Parition)、簇段(Cluster)、索引化表段(Index-organized Table)
2. 索引段用来存放索引数据,包括ROWID和索引键值。
3. 临时段是进行查询、排序等操作时,如果内存空间不足,用于保存sql语句在解释和执行过程中产生的临时数据。会话结束时,为该操作分配的临时段将被释放。
4. 回退段用于保存数据库的回退信息,可以实现事务回滚、数据库恢复、数据的读一致性和闪回查询。