当前位置:文档之家› 体系结构

体系结构

Oracle体系结构一、概述:Oracle服务器是一种对象关系数据库管理系统,它为信息管理提供开放、综合和集成的方法。

Oracle 服务器中有多种进程、内存结构和文件,但当处理SQL 语句时并非都使用它们。

有一些用于改善数据库性能确保数据库能够在软件或硬件错误事件中得以恢复或者执行维护数据库所需的其它任务。

Oracle 服务器由一个Oracle 例程和一个Oracle 数据库组成Oracle 例程是后台进程和内存结构的组合,必须启动例程才能访问数据库中的数据,每次启动例程都会分配系统全局区(SGA) 并启动Oracle后台进程• SGA 是用于存储数据库信息的内存区该信息为数据库进程所共享Oracle 数据库是作为一个单元处理的数据集合,数据库的一般用途是存储和检索相关信息。

数据库有一个逻辑结构和一个物理结构,数据库的物理结构是数据库中操作系统文件的集合Oracle 数据库由三种文件类型组成:• 数据文件包含数据库中的实际数据。

数据存储在用户定义的表中,但是数据文件也包含数据字典、成图象前的修改数据、索引以及其它类型的结构。

一个数据库至少有一个数据文件。

数据文件的特点是–一个数据文件只能与一个数据库相关;–可以为数据文件设置某些特性以便它们在数据库运行空间不足时能够自动扩展;–一个或多个数据文件形成数据库存储的逻辑单元。

这个单元称为表空间。

• 重做日志包含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。

一个数据库至少需要两个重做日志文件。

• 控制文件包含维护和验证数据库完整性的必要信息。

例如:控制文件用于识别数据文件和重做日志文件。

一个数据库至少需要一个控制文件。

Oracle 服务器也使用一些其它文件,这些文件并不是数据库的一部分:• 参数文件定义Oracle 例程的特性。

例如:它包含调整SGA 中一些内存结构大小的参数。

• 口令文件认证哪些用户有权限启动和关闭Oracle 例程。

• 归档的重做日志文件是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

Oracle 例程由SGA 内存结构和用于管理数据库的后台进程组成。

例程是通过使用对每个操作系统特定的方法来进行标识的。

例程一次只能打开和使用一个数据库。

SGA 是用于存储数据库信息的内存区,该信息为数据库进程所共享。

它包含Oracle 服务器的数据和控制信息,它是在Oracle 服务器所驻留的计算机的虚拟内存中得以分配,SGA 由几种内存结构组成• 共享池用于存储最近执行的SQL 语句和最近使用的数据字典数据。

这些SQL 语句可以是用户进程提交的,也可以是从数据字典读取的,在存储过程的情况中。

• 数据库缓冲区高速缓存用于存储最近使用的数据。

这些数据从数据文件读取或者写入数据文件• 重做日志缓冲区用于跟踪服务器和后台进程对数据库所做的更改在SGA 中还有两种可选的内存结构:• Java 池用于存储Java 代码• 大型共享池用于存储并不与SQL 语句处理直接相关的大型内存结构。

例如:在备份和复原操作过程中复制的数据块后台进程例程中的后台进程执行用于处理并行用户请求所需的通用功能,而不会损害系统的完整性和性能。

它们把为每个用户运行的多个Oracle 程序所处理的功能统一起来。

后台进程执行I/O 并监控其它Oracle 进程以增加并行性,从而使性能和可靠性更加优越。

根据配置情况Oracle 例程可以包括多个后台进程,但是每个例程都包括下面五个必需的后台进程:• 数据库写入程序(DBW0) 负责将更改的数据从数据库缓冲区高速缓存写入数据文件。

• 日志写入程序(LGWR) 将重做日志缓冲区中注册的更改写入重做日志文件。

• 系统监控程序(SMON) 检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复。

• 过程监视器(PMON) 负责在一个Oracle 进程失败时清理资源。

• 检查点进程(CKPT) 负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息在分析阶段,服务器进程使用SGA 中称作共享池的区域来编译SQL 语句共享池有两个基本组件• 库高速缓存• 数据字典高速缓存库高速缓存在称为共享SQL 区域的内存结构中存储最近使用的SQL 语句信息。

共享SQL 区域包含:• SQL 语句文本;• 分析树语句的已编译版本;• 执行计划执行语句时要采取的步骤;优化程序是Oracle 服务器中的功能,它确定最优的执行计划。

如果重新执行SQL 语句而且共享SQL 区域已经包含语句的执行计划,那么服务器进程就不需要分析语句。

库高速缓存通过减少分析时间和内存要求来改善重新使用SQL 语句的应用程序的性能。

如果SQL 语句没有重新使用,那么它最终会从库高速缓存中超龄释放。

数据字典高速缓存也称为字典高速缓存或行高速缓存,是数据库中最近使用的定义的集合,它包括有关数据库文件、表、索引、列、用户、权限以及其它数据库对象的信息。

在分析阶段,服务器进程在字典高速缓存中查找信息,以解析SQL 语句中指定的对象名并验证访问权限。

如果有必要,服务器进程启动从数据文件对该信息的加载。

共享池的大小由初始化参数SHARED_POOL_SIZE 指定数据库缓冲区高速缓存的功能处理查询时,服务器进程在数据库缓冲区高速缓存中查找任何所需的块。

如果未在数据库缓冲区高速缓存中找到这个块,服务器进程就从数据文件读取这个块,并且在缓冲区高速缓存中放置一个副本,由于对同一个块的后续请求可以在内存中找到这个块,因此这些请求可能不需要物理读取。

Oracle 服务器使用最近最少使用算法来释放近期未被访问的缓冲区,以便在缓冲区高速缓存中为新块腾出空间。

缓冲区高速缓存中每个缓冲区的大小都与Oracle 块的大小相等。

而且它由DB_BLOCK_SIZE 参数指定,缓冲区的数目等于DB_BLOCK_BUFFERS 参数值。

程序全局区或进程全局区(PGA) 是一个内存区域,它包含单个服务器进程或单个后台进程的数据和控制信息。

与几个进程共享的SGA 正相反,PGA 是只被一个进程使用的区域。

在专用服务器配置中,服务器的PGA 包括下面的组件:• 排序区:用于处理SQL 语句时可能需要的任何排序。

• 会话信息:包括用于会话的用户权限和性能统计。

• 游标状态:标明处理会话当前使用的SQL 语句中的阶段。

• 堆栈空间:包含其它会话变量。

PGA 在创建进程时分配,在终止进程时回收。

服务器进程在重做日志缓冲区中记录对数据文件的大部分更改,这个缓冲区SGA 的一部分,重做日志缓冲区有下面的特点:• 它的字节大小由LOG_BUFFER 参数定义。

• 它记录被更改的块、更改位置以及重做条目中的新值。

重做条目不区分被更改块的类型,它只记录块中哪些字节发生了更改。

• 重做日志缓冲区连续使用,而且一个事务处理所做的更改可能会与其它事务处理的更改交叉存取。

• 它是在已满后可以重新使用的循环缓冲区,但是只有在所有旧的重做条目都记录在重做日志文件之后才能使用。

进行更改之前,服务器进程将旧的数据值保存到回退段中,这里成图象前的数据用于:• 回退事务时撤销更改;• 通过确保其它事务处理不会看到DML 语句所做的未提交更改,来提供读一致性;• 如果失败,将数据库恢复到一致状态回退段就象表和索引那样存在于数据文件之中,而回退块将根据需要被放入数据库缓冲区高速缓存中。

回退段由DBA 创建,对回退段的更改记录在重做日志缓冲区中。

快速提交:Oracle 服务器使用快速提交机制来保证提交的更改能够在例程失败的情况下得以恢复。

系统更改号每当事务处理提交时,Oracle 服务器就把一个提交系统更改号(SCN) 分配给该事务处理。

SCN 是简单递增的,而且在数据库中是唯一的。

Oracle 服务器使用它作为内部时间戳以使数据同步,并且在从数据文件检索数据时提供读一致性。

使用SCN 使Oracle 服务器能够执行一致性检查,而不用依赖操作系统的日期和时间。

处理提交的步骤发出COMMIT 命令时,执行下面的步骤:1、服务器进程随同SCN 一起在重做日志缓冲区中放置一个提交记录;2、LGWR 向重做日志文件中连续写入直到提交记录(含提交记录)的所有重做日志缓冲区条目。

这之后Oracle 服务器就能够保证即使存在例程失败也不会丢失更改。

3、通知用户COMMIT 命令已完成4、服务器进程记录信息以指出事务处理已完成并且可以释放资源锁,将灰数据缓冲区刷新到数据文件由DBW0 独立执行,在提交之前或之后进行都可以。

快速提交机制将更改写入重做日志缓冲区而不是写入数据文件,这样确保数据得以恢复。

它有如下优势:• 连续写入日志文件比写入数据文件的各个块更快;• 只将记录更改必须的最少信息写入日志文件,然而写入数据文件却需要写入整个数据块;• 如果多个事务处理同时请求提交那么例程将重做日志记录合成为单个写入;• 除非重做日志缓冲区特别满,否则每个事务处理只需要一个同步写入。

如果发生合成,那么每个事务处理的同步写入可能不到一个;• 因为提交之前可能会刷新重做日志缓冲区,所以事务处理的大小并不影响实际的提交操作所需的时间量。

注意:回退事务处理并不会触发LGWR 写入磁盘。

从失败恢复时,Oracle 服务器总是回退未提交的更改。

如果回退之后出现失败,在回退之前未将条目记录到磁盘上,那么缺乏提交记录就足以确保将事务处理所做的更改回退。

LGWR 在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:• 当提交事务处理时• 当重做日志缓冲区的三分之一已满时• 当重做日志缓冲区中记录了超过1 MB 的更改时• 在DBW0 将数据库缓冲区高速缓存中修改的块写入数据文件以前,因为恢复操作需要重做,所以LGWR 只在重做写入磁盘后确认COMMIT 命令。

其它必需的四个进程并不直接参与处理SQL 语句• 数据库写入程序(DBW0)• 过程监视器(PMON)• 系统监控程序(SMON)• 检查点(CKPT)检查点进程用于使数据库文件同步,归档程序进程其它所有的后台进程都是可选的,这取决于数据库的配置。

但是其中的ARC0 对于磁盘丢失后的数据库恢复起着至关重要的作用。

ARC0 进程通常在生产数据库中创建。

数据库写入程序服务器进程在缓冲区高速缓存中记录回退和数据块的更改。

数据库写入程序(DBW0) 将灰数据缓冲区从数据库缓冲区高速缓存写入数据文件,它确保有足够数量的空闲缓冲区(即当服务器进程需要读取数据文件中的块时可以覆盖的缓冲区)在数据库缓冲区高速缓存中可用。

由于服务器进程只在缓冲区高速缓存中进行更改,因此数据库性能得到改善,而且DBW0 延迟写入数据文件直到发生下列事件之一:• 灰数据缓冲区的数量达到阈值• 当进行扫描而无法找到任何空闲缓冲区时进程扫描了指定数量的块• 出现超时每三秒• 出现检查点如果Oracle 例程失败,那么SGA 中尚未写入磁盘的所有信息都会丢失。

相关主题