第4章 体系结构 本章概述 本章要点 教学过程
本章概述 作为一个数据库旗舰产品,Oracle系统具有可扩充性、可靠性和可管理性。可扩充性表示当Oracle系统承担不断增长的工作负载的同时,具有有效扩充其系统资源利用情况的能力。也就是说,给定的系统既可以有效地为5个用户提供服务,也可以有效地为5000个用户同时提供服务。可靠性表示Oracle系统具有极强的抵御风险的能力,无论是操作系统崩溃,还是系统出现故障,都可以确保在执行事务处理时不出现异常或尽快地恢复到故障前的状态。可管理性表示数据库管理员可以调整Oracle使用内存的方式、向磁盘写入数据的频率,数据库为连接到该数据库的用户分配系统进程的方式等等。 这些能力都是与Oracle的体系结构密切相关的。本章通过将Oracle Database 10g与以前版本进行比较,介绍Oracle Database 10g系统体系结构的特点。
本章要点 如何连接到数据库实例 服务器进程的作用和特点 Oracle文件系统的结构层次 重做日志的作用和特点 Oracle Database 10g是如何管理内存的 后台进程的作用
教学过程 4.1 概述 4.2 连接数据库实例 4.3 服务器进程 4.4 文件系统 4.5 内存区域 4.6 后台进程
教学过程 4.1 概述 4.2 连接数据库实例 4.3 服务器进程 4.4 文件系统 4.5 内存区域 4.6 后台进程
4.1 概述 Oracle系统的体系结构是指组成Oracle系统的主要组成部分,这些组成部分之间的关系,以及这些部分的工作方式。 4.1 概述 Oracle系统的体系结构是指组成Oracle系统的主要组成部分,这些组成部分之间的关系,以及这些部分的工作方式。 在Oracle系统的体系结构中,主要涉及到以下5个组件: 连接数据库实例的能力,这是Oracle系统的体系结构中协同工作的方式; 服务器进程; 文件系统的结构层次; 内存区域的管理,尤其是系统全局区域(system global area,SGA)的特点和作用; 后台进程。
教学过程 4.1 概述 4.2 连接数据库实例 4.3 服务器进程 4.4 文件系统 4.5 内存区域 4.6 后台进程
4.2 连接数据库实例 本节介绍连接数据库实例的操作。为了连接数据库实例,涉及到3个方面的内容,即 用户进程 Oracle监听器 4.2 连接数据库实例 本节介绍连接数据库实例的操作。为了连接数据库实例,涉及到3个方面的内容,即 用户进程 Oracle监听器 Oracle网络客户
用户进程 可以将用户进程(user process)看作是一些试图连接数据库的软件,例如客户工具。用户进程可以使用Oracle Net Services(Oracle网络服务)与数据库进行通讯。Oracle Net Services是一组通过网络连接协议提供网络连接的组件。对应用开发人员和数据管理员来说,Oracle Net Services屏蔽了不同硬件平台上设置不同网络的复杂性。 在Oracle系统中,不用编辑服务器上的注册表,使用一些简单的配置文件就可以管理Oracle Net Services。
Oracle监听器 Oracle监听器(listener)是一个运行于Oracle数据库服务器上的进程,其职责是监听来自于客户应用的连接请求。 客户负责在初始化连接请求中向监听器发送服务名称。该服务名称是一个标识符,它可以唯一地标识客户试图连接的数据库实例。当然,Oracle监听器不仅能够监听数据库实例,而且还可以监听其他服务,例如HTTP服务器和IIOP服务器。
Oracle网络客户 对于SQL*Plus、Oracle Enterprise Manager、Oracle Net Manager这些客户工具来说,可以使用Oracle Net Services客户适配器与Oracle数据库进行交互。 就像服务器一样,这些客户工具也需要经过配置才可以与网络上某处的数据库进行交互。对于监听器来说,这个配置文件是listener.ora。
教学过程 4.1 概述 4.2 连接数据库实例 4.3 服务器进程 4.4 文件系统 4.5 内存区域 4.6 后台进程
4.3 服务器进程 当Oracle Net Services接收到用户进程的连接请求之后,就会将用户进程路由到一个服务器进程(server process)。 服务器进程负责在用户进程和Oracle实例之间调度请求和响应。 当用户进程提交查询之后,服务器进程则负责执行该查询语句,即将数据从磁盘读入缓存,获取查询结果,然后向用户进程返回结果。即使响应出现了某些错误,服务器进程也会把错误信息发回用户进程,以便用户进程进行合适的处理。
专用服务器(dedicated server)模式 系统会向每个要与数据库进行连接的用户进程赋予它自己的专用服务器进程。 这是用户安装Oracle数据库时所配置的方式,也是大多数数据库管理员运行数据库的方式。 专用服务器为用户进程和服务器进程之间提供了一对一的映射关系。
共享服务器模式 共享服务器也被称为多线程服务器(multi-threaded server,MTS)。 在共享服务器模式中,有一个调度程序组件。该组件负责在用户进程与服务器进程之间进行路由。当用户进程请求与共享服务器进行连接时,Oracle Net Services就会将会话请求路由到调度程序中,而不是路由到服务器进程中。然后,调度程序就会将请求发送到请求队列中,这时第一个空闲的共享服务器就会获得请求。 共享服务器生成的结果则放回到响应队列中,受到调度程序的监控,并且返回到客户中。
教学过程 4.1 概述 4.2 连接数据库实例 4.3 服务器进程 4.4 文件系统 4.5 内存区域 4.6 后台进程
4.4 文件系统 本节介绍Oracle系统所使用的文件系统。 在Oracle数据库进程的日常操作中,该进程使用: 数据词典 应用数据 4.4 文件系统 本节介绍Oracle系统所使用的文件系统。 在Oracle数据库进程的日常操作中,该进程使用: 数据词典 应用数据 用于数据库启动的参数 事务处理日志 管理数据库物理结构的文件 其他类型的文件
参数文件 参数文件(parameter files)用于在启动实例时配置数据库。 当建立数据库时,用户就可以运行初始化文件,该文件规定了数据库中所使用的各种设置值。 这些设置包括数据库实例名称(SID)、数据库主要文件的位置、实例所使用的主要内存区域的大小等。 该文件的名称通常为init<SID>.ora。 例如,如果数据库实例名称是sales,则其初始化文件的名称是initsales.ora。
控制文件 控制文件(control files)是Oracle服务器在启动期间用来标识物理文件和数据库结构的二进制文件。控制文件提供了建立新实例时所需要的文件目录。Oracle系统可以在常规的数据库操作期间,更新控制文件,以便下次使用。 当用户建立控制文件时,最好建立多个控制文件副本。如果可能的话,把这些控制文件副本放置到不同的物理驱动器上。
数据文件 数据文件是用来存放用户数据的地方。这些数据文件对于用户数据的稳定性和完整性十分重要。如果失去了这些数据文件,用户就不会有数据了,当然也就不会有数据库了。 每一个数据库至少有一个与之相关的数据文件。通常情况下,一个数据库有多个数据文件。
数据存储层次 数据库由一个或多个表空间组成; 表空间由一个或多个数据文件组成,表空间中包含段; 段(表、索引等)由一个或多个盘区组成。段存在于表空间中,但是在表空间中可以有许多数据文件中的数据; 盘区是在磁盘上连续的块的组。一个盘区在一个表空间中,且在表空间中单一的文件中; 块是数据库中最小的分配单元,也是数据库使用的最小I/O单元。
表空间 表空间是用户可以在Oracle系统中使用的最大的逻辑存储结构。用户在数据库中建立的所有内容都会存储在表空间中。每个Oracle数据库都提前配置了system表空间,它存储了数据字典和系统管理信息。 一般情况下,用户和应用程序使用自己的表空间来存储数据。写入到临时表中的数据、为大规模排序操作写入磁盘的数据块以及其他许多类型的临时数据都会被写入到表空间中。
段 段是用户建立的数据库对象的存储表示。用户建立的每一个表都会有一个在表空间中存储的逻辑段。为用户所建立的对象生成的段都要在磁盘上占用空间。在Oracle系统中,有3种类型的段,即数据段、临时段和回滚段(有时也称为撤销段)。 数据段是存储表、索引、簇、表分区等常规应用数据的地方。 临时段是临时表空间中的段,可以用来存储临时表、引起内存页交换的SQL语句等。 回滚段用于管理数据库中的undo数据,并且为事务处理提供数据库的读取一致性视图。
盘区 段是由一个或多个盘区构成的。盘区是用来为段存储数据的逻辑上连续的数据块的集合。当建立数据库对象时(无论如何,该对象都会消耗空间),系统就会建立一个或多个盘区来存储数据。 盘区数量和盘区大小可以在正在建立对象的storage子句中规定。 在Oracle系统中,默认的表空间的盘区管理风格是本地化管理,而不是字典管理。
数据块 数据块代表了数据库中最小颗粒的逻辑数据存储层次。 数据块层次上是盘区结构。 盘区是由连续的数据块集合构成,而盘区构成了段,段则构成了表空间,表空间构成了数据库。
重做日志文件 重做日志文件对Oracle数据库至关重要,它是数据库的事务日志。重做日志文件仅用于恢复数据库。当实例或存储介质失败时,使用重做日志文件来维护数据库。 事实上,在Oracle系统中执行的每一步步操作都生成了一定数量的重做日志,它们被写入到联机重做日志文件中。当将一个行插入到某个表中时,插入的结果被写入到重做日志中。当删除表中的某行数据时,该行数据也被写入到重做日志中。 Oracle数据库要求每个数据库实例都至少有两个重做日志文件组,每一个重做日志文件组中有一个单独的成员。
临时文件 在Oracle系统中,临时文件是一个特殊类型的数据文件类型。 当内存不足以在RAM中保存一个大规模排序操作的中间结果或结果集时,Oracle使用临时文件来保存它们。永久数据对象,例如表或索引,不会被存储到临时文件中,但是临时表或临时索引的内容则可能存储到临时文件中。 所以,不能在临时数据文件中创建自己的应用程序表,但是可以在临时表中存储数据。
Oracle管理文件 Oracle管理文件(Oracle managed file,OMF,有时也称为Oracle托管文件)。
教学过程 4.1 概述 4.2 连接数据库实例 4.3 服务器进程 4.4 文件系统 4.5 内存区域 4.6 后台进程
4.5 内存区域 在Oracle系统的体系结构中,有许多不同的内存区域。不同的内存区域用于不同的目的。Oracle的服务器进程和许多后台进程负责在内存区域中写入、更新、读取和删除数据。 理解内存区域的用途,有助于理解数据库操作期间的数据和进程流程。 Oracle中的3个主要内存区域是: 系统全局区域(system global area,SGA) 程序全局区域(program global area,PGA) 用户全局区域(user global area,UGA)
系统全局区域
程序全局区域和用户全局区域 程序全局区域是为单独的服务器进程存储私有数据的内存区域。与所有服务器进程都可以访问的共享内存区域SGA不同,数据库写入器、日志写入器和许多其他的后台进程,都只为各个服务器进程提供一个PGA。PGA只能由他们的服务器进程访问。 用户全局区域是用于存储会话状态的内存区域。UGA的位置依赖于服务器是运行在共享服务器模式中,还是专用服务器模式中。在专用服务器模式中,UGA会在PGA中分配,只能够由服务器进程访问。
教学过程 4.1 概述 4.2 连接数据库实例 4.3 服务器进程 4.4 文件系统 4.5 内存区域 4.6 后台进程
4.6 后台进程 无论用户是否连接数据库,有些进程都会作为数据库的一部分运行。这些进程被称为后台进程。每一个后台进程都有自己的职责。如果这些后台进程崩溃了,那么数据库也就随着崩溃了。实际上,Oracle实例是由后台进程和内存结构共同组成的。 Oracle的后台进程主要是用来提高数据库的性能和可靠性,它可以由多个用户共同使用,为这些并发用户进程提供各种服务。Oracle的后台进程执行输入/输出操作,并监视Oracle 9i服务器的其他进程。Oracle的后台进程的结构示意图如图4-5所示。 一般情况下,Oracle的后台进程包括PMON、SMON、DBWn、LGWR、ARCn、CKPT等。
进程监控器 进程监控器(process monitor,PMON)。PMON的主要职责是监控服务器进程和注册数据库服务。 监控服务器进程,确保能够销毁发生损坏或出现故障的进程,释放这些进程占用的资源。 在主机操作系统上使用Oracle监听器注册数据库服务。全局数据库名称、SID以及其他数据库支持的服务都要使用监听器注册。
系统监视器 系统监视器(system monitor,SMON)的主要职责包括重新启动系统、清除临时段、执行盘区结合等。 SMON将会清除已经分配但是还没有释放的临时段。在字典管理表空间中,如果有大量的盘区,那么清除临时段所花费的时间将会非常多。这可能导致数据库启动时的性能问题,因为SMON将会在这个时候试图清除临时段。 SMON会在字典管理表空间中执行盘区结合。
数据库写入器 数据库缓存包含了由用户所使用的数据。数据块会从磁盘读入缓存,各种服务器进程会在那里对它们进行读取和修改。 当要将这些缓存中的数据块写回到磁盘时,数据库写入器(database writer,DBWn)负责执行这些数据的写入操作。
日志写入器 日志写入器(log writer,LGWR)负责向在线重做日志文件中记录所有数据库的已提交事务处理。该进程会将所有数据从重做日志缓存中写入到现行的在线重做日志文件中。 日志写入器会在下面4种不同情况下执行写入操作: 事务处理进行提交; 重做日志缓存已经填充了1/3; 重做日志缓存中的数据量达到了1MB; 每3秒的时间。
归档器 虽然可以通过在线重做日志文件中的事务处理日志恢复实例故障,但是却不能恢复介质故障。如果磁盘遇到了不可恢复的崩溃,那么恢复数据库的唯一方式就是利用备份。通常,每个月、每个星期、每天都需要执行备份。但是,重做日志文件不能保存所有具有价值的事务处理,所以,需要在这些有价值的事务处理被覆盖之前保存他们。 这就是引入归档器(archiver,ARCn)的原因。 归档器会随着数据库的运行完成其工作,有效地采用热备份或在线备份。
检查点 检查点(checkpoint,CKPT)进程负责使用最新的检查点信息更新所有的控制文件和数据文件标题,这种操作称为检查点。 数据库写入器会定期将其缓存写入到磁盘中,以存储检查点。前面已经介绍过,日志切换也可以激活检查点。检查点信息会在数据库恢复期间使用。当SMON恢复数据库时,它会决定最后在数据文件中记录的检查点。必须将数据文件标题和控制文件中最后记录的检查点之后的、在线重做日志文件中的各个表项重新应用到数据文件中。
作业队列协调器和作业进程 Oracle提供了规划将要在数据库后台运行的进程或作业的功能。这些规划的作业可以在指定的日期和时间运行,并且可以为随后的执行指定时间间隔。 在以前的版本中,只有固定数量的作业进程,从SNP0到SNP9、SNPA到SNPZ,共36个作业进程。这些作业进程负责执行作业队列中的进程。 现在,作业进程可以通过作业队列协调器(job queue coordinator,CJQ)的进程来建立和管理。CJQ能够启动最多1000个作业队列进程,即从J000到J999。
恢复器 在单独的Oracle实例中,PMON负责周期性地启动来判断是否有服务器进程发生故障,必须清除实例中的事务处理数据。 对于分布式事务处理,这项工作由恢复器(recoverer,RECO)进程完成。
其他进程 Oracle Database 10g系统,新增了ARB、ASMB、CTWR、MMAN、MMON、RBAL、RVWR等进程。 这些新增进程的主要作用如表4-2所示。
教学过程 4.1 概述 4.2 连接数据库实例 4.3 服务器进程 4.4 文件系统 4.5 内存区域 4.6 后台进程