第2章Oracle数据库的体系结构2.1Oracle数据库的物理存储结构Oracle数据库的物理存储结构由存储在磁盘中的操作系统文件组成。包括构成数据库的各种物理文件,包括数据文件,控制文件,重演日志文件,归档重演日志文件,参数文件,警告、跟踪日志文件和备份文件等。Oracle数据库存储结构物理存储结构数据文件(DataFile)重做日志文件(RedoLogFile)控制文件(ControlFile)逻辑存储结构表空间(TableSpace)段(Segment)区(Extent)块(Block)参数数据文件控制文件控制文件指向控制文件日志文件日志文件数据文件数据文件控制文件的内容是完全相同的控制文件指向数据文件和日志文件Oracle数据库文件类型及其关联2.1.1数据文件(DataFile)数据库中所有的数据最终都保存在数据文件中。每个Oracle数据库都有一个或多个物理数据文件数据文件中包括•表数据•索引数据•数据字典定义•回滚事务所需的信息•存储过程、函数和数据包的代码•用来排序的临时数据一个数据文件只能与一个数据库相关联(N:1)。可以对数据文件设置一些特性,在数据库空间用完的情况下可以自动扩展。一个或多个数据文件构成了一个数据库存储的逻辑单元——表空间(tablespace)。提示:表空间是数据库存储的逻辑单位。数据库文件如果离开了表空间将失去意义,而表空间如果离开了数据文件将失去物理基础数据文件的特点例:使用数据字典dba_data_files查看表空间system所对应的数据文件的部分信息。SQLdescdba_data_files;SQLselectfile_name,tablespace_name,autoextensiblefromdba_data_fileswheretablespace_name=‘SYSTEM’;dba_data_files表结构:查询执行结果:2.1.2控制文件数据库控制文件(controlfile)是一个很小的二进制文件,用于维护数据库的全局物理结构,它存放着数据库中数据文件和日志文件的信息。创建数据库时,同时就提供了与之对应的控制文件。每一个控制文件只能与一个Oracle数据库相关联。控制文件包含了数据库实例在启动和正常操作时,访问数据库所需的关于数据库的信息。一旦损坏,数据库将无法正常工作查询当前数据库的控制文件信息(使用数据字典:V$controlfile)提示:Oracle一般会默认创建3个包含相同信息的控制文件,分别存储在不同磁盘互为镜像,以防其中之一受损时,数据库可以调用其他控制文件继续工作SQLcolumnnameformata50;SQLselectnamefromV$controlfile;控制文件包含的信息数据库名称数据库创建的时间戳相关的数据文件、重演日志文件的名称和位置表空间信息数据文件脱机范围日志历史归档日志信息备份组和备份块信息备份数据文件和重演日志信息数据文件拷贝信息当前日志序列数检查点(checkpoint)信息2.1.3重做日志文件每一个Oracle数据库都有一个由两个或多个重演日志文件(redologfile)构成的文件组,这组重演日志文件合称为数据库的重演日志。一个重演日志文件是由重做条目(redoentry,也叫重做记录)组成的。重演日志的主要功能是记录下所有数据的改变。重演日志文件中的信息可以用在数据库从系统失败或者介质失败的恢复之中。记录数据库所有修改信息的文件,简称日志文件,是数据库最重要的文件之一。其中修改信息包括数据的修改信息或者数据库结构的修改信息等。为了确保日志文件的安全,在实际应用中,允许对日志文件进行镜像,它们构成一个日志文件组,同一个族的日志文件最好放在不同的磁盘中。Oracle中的多个日志文件组是循环使用的。当所有的日志文件组的空间都被填满后,系统将重新切换到第一个日志文件组,发生日志切换时,日志文件组中已有的信息是否被覆盖取决于系统运行的模式(归档模式和非归档模式。)日志文件组2.1.4其他文件1.归档重演日志文件归档重演日志文件(archivelogfile)就是对写满的重演日志文件进行复制并保存而生成的文件。可以通过设置数据库为归档模式(ARCHIVELOGmode)下来自动地保存日志文件。归档进程(ARCO)在后台负责把写满的重演日志文件复制到归档日志目标中。归档日志文件在数据库恢复时起决定性作用。2.参数文件(parameterfile)参数文件包含了一组关于数据库和实例的配置参数。主要包括数据库名和控制文件所在路径。有文本参数文件(parameterFile,简称Pfile。iniSID.ora)和服务器参数文件(ServerParameterFile,简称Spfile,spfileSID.ora)两种类型。Oracle推荐用户使用一个服务器参数文件作为维护初始化参数的动态手段。一个服务器参数文件允许用户在一个服务器端的磁盘文件里持久地保存和管理初始化参数。3.警告、跟踪日志文件每一个服务器和后台进程都可以写入一个相关的跟踪文件(tracefile)。当一个进程发现了一个内部错误的时候,它把关于错误的信息转储到它的跟踪文件里。写入到跟踪文件的一部分信息是给数据库管理员使用的,而其他信息是给Oracle支持服务的。跟踪文件信息还可以用于调整应用程序和实例。警告文件(alertfile)是一种特殊的跟踪文件,一个数据库的警告文件就是包括按时间排序的消息和错误的记录。4.备份文件用户管理的备份和恢复实际上就是要求用户在试图恢复备份的时候先还原备份文件。服务器管理的备份和恢复管理了备份过程,例如,调度备份及恢复过程就是在需要恢复的时候施加正确的备份文件。主要的逻辑存储结构:表空间各种段•数据段•索引段•临时段•回滚段区间数据块2.2Oracle数据库的逻辑存储结构表空间段数据块数据块数据库表空间段区区………Oracle数据库的逻辑结构表空间是Oracle中最大的逻辑存储结构,它与物理上的一个或多个数据文件相对应,每个Oracle数据库都至少拥有一个表空间。表空间的大小等于构成表空间的所有数据文件大小的总和。表空间用于存储用户在数据库中创建的所有的内容。2.2.1表空间(Tablespace)表空间与数据文件的关系一个表空间与硬盘上的一个或多个物理数据文件相对应。表空间A表空间B表空间C文件2文件6文件5文件4文件1文件3例:通过数据字典dba_tablespaces,查看当前数据库的所有表空间的名称SQLselecttablespace_namefromdba_tablespaces;Oracle自动创建的表空间的说明:见P23页中表2-1•系统表空间•临时表空间•工具表空间•用户表空间•数据库索引表空间•回滚表空间主要的数据库表空间Oracle允许在逐个表空间基础上控制数据库数据的可用性•在联机表空间中的数据对于应用程序和数据库来说是可用的•在脱机表空间中的数据对于应用程序和数据库来说是不可用的,即使当数据库是可用的也是如此。联机和脱机表空间永久表空间和临时表空间在Oracle数据库中,大多数表空间是永久表空间。永久表空间存储单个SQL请求和事务中必须存留的信息。Oracle还允许在数据库中创建临时表空间。临时表空间使事务能够用于处理复杂SQL操作的大量临时工作空间,如存储查询、连接查询和建立索引等。段是一组盘区,是Oracle管理数据库对象的单位。是终端用户能处理的最小单位。Oracle为段分配的空间是以数据区为单位的,当断的数据区已满,Oracle围棋分配另一个数据区。段的数据区可以是不连续的磁盘空间。段可以分为:数据段、索引段、临时段、回退段四种类型。2.2.2段(Segment)1.数据段用于存储表中的数据。数据段的名称与表的名称相同。系统为分区表的每个分区分配一个数据段。2.索引段用于存储表中国的所有索引信息。索引段的名称与索引相同。分区索引的每一个分区对应一个索引段。3.临时表临时段用于存储临时数据。排序或者汇总时所产生的临时数据都存储在临时段中,该段由系统在用户的临时表空间中自动创建,兵在排序或者汇总结束是自动消除。4.回退段用于存储用户数据被修改之前的值。用于用户进行回退(恢复)操作时使用。每个Oracle数据库至少拥有一个回退段。2.2.3区(EXtent)区时磁盘空间分配的最小单位,由一个或多个数据块组成。当段中的所有空间被使用完后,系统将自动为该段分配一个新的区。段所包含的区的个数由:minextents和maxextents参数决定。2.2.4数据块是用来管理存储空间的最基本的单位,也是最小的逻辑存储单位。块头部:包含数据块中的饿一般属性信息,如物理地址、所属断的类型等。表目录:用来存储相关对象的信息。行目录:用来存储数据块中有效的行信息。空闲空间:数据块中还没有使用的存储空间。行空间:数据块中已使用的存储空间块头部表目录行目录空闲空间行空间块头部信息区块的默认大小,由db_block_size参数在数据库创建时指定,一旦数据库创建成功后无法修改。2.2.5表空间、段、分区和数据块的关系图表空间数据文件数据文件...Oracle数据块Oracle数据块Oracle数据块Oracle数据块...操作系统块操作系统块......Oracle数据块Oracle数据块Oracle数据块Oracle数据块...操作系统块操作系统块2.3Oracle数据库系统结构与实例Oracle数据库系统结构包括:Oracle实例(Instance)、数据库文件、用户进程、服务器进程,以及其他文件如:密码文件、和归档文件(ArchiveLogFile)等。Oracle数据库管理系统包括:Oracle数据库和Oracle实例Oracle数据库是一组相关的操作系统文件的集合2.3.1Oracle数据库系统结构LibrarycacheDatadictcacheOracle数据库系统结构共享区重做日志缓存数据库缓冲区高速缓存系统全局区(SGA)SMONPMONRECO快照处理器并行查询处理器共享服务器进程调度进程用户进程专有服务器进程DBWRLGWR用户进程CKPT数据文件数据文件联机重做日志、文件归档重做日志、文件Oracle系统结构图2.3.2Oracle数据库实例Oracle实例由一些内存区和后台进程组成。内存区域主要包括:数据库高速缓存、共享池、流池以及其他可选内存区(如java池)。后台进程主要由:系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、日志写进程(LGWR)、检验点进程(CKPT)、其他进程(如ARCn进程、RECO进程)1.实例和数据库之间的关系实例1(SGA+进程)实例2(SGA+进程)数据库文件2.Oracle实例与参数文件每个实例都要用称为SID(systemidentifier,系统标识符)的符号来标识决定实例的大小及组成的参数存储在初始化参数文件(init.ora)中,启动实例时读取这个文件,在运行时可由数据库管理员修改对该文件的任何修改都只有在数据库下一次启动时才起作用2.3.3Oracle数据库系统的内存结构1.系统全局区(SGA)主要部分组成数据库高速缓存区共享池重做日志缓存区大缓存池固定的SGA。缓冲区域共享区域系统全局区(SGA)软件代码区域栈空间会话信息其他区程序全局区(PGA)Oracle内存结构图数据库高速缓存区(DatabaseBufferCache)默认缓存器池默认缓存器池保持缓存器池保持缓存器池再生缓存器池再生缓存器池图2.8数据库高速缓存区用于存储从磁盘数据文件中读取的数据,供所有用户共享,以提高数据库的整体效率共享池Sharepool数据字典缓存区库缓存区共享SQL区PL/SQL区图2.9共享池中的内存结构用于保存最近执行的SQL语句、PL/SQL程