购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 Oracle的总体框架结构

要想把自己打造成为一名优秀的DBA,或者成为一名杰出的软件研发工程师,理解Oracle的体系结构非常必要。当我说出此话的时候,也许有些想成为DBA或者想成为杰出软件开发工程师的朋友会持不同意见。有的朋友说,我没有深刻理解Oracle的体系结构,照样在公司做DBA,照样干得得心应手;有的朋友会说,我没有好好学过Oracle,还不照样在搞开发,还不照样是公司的栋梁之才吗!非也,非也!作为一名DBA,日常工作也许不需要太深奥的Oracle知识,我们便能应付自如,但是,当Oracle出现疑难问题的时候,你去国内的网站搜索,没有解决方法,去国外的网站搜索,也没有解决之道,这时候,只能靠我们自己,只能靠我们对Oracle的理解来判断问题之所在。作为一名开发人员,不了解Oracle的体系结构,我们能写出高效的SQL语句吗?实现相同功能的SQL语句,别人写的一会儿就运行出结果,为什么我写的SQL语句运行几个小时还没有结果呢?所以,理解Oracle的体系结构是很重要的!

认识Oracle,首先应着眼于Oracle体系结构,从大的框架来看,Oracle由实例(Instance)和各种物理文件组成,如图1-5所示。

图1-5 Oracle的体系结构

1.5.1 Oracle实例(Oracle Instance)

一个Oracle实例(Oracle Instance)由一系列的后台进程(Background Processes)和内存结构(Memory Stru ctures)组成(如图1-5所示)。为了能够访问数据库,必须启动实例。启动实例的时候,Oracle会分配一片叫系统全局区的内存区域(System Global Area,SGA),并启动后台进程。

系统全局区是一片内存区域,用于存放数据库信息,这些信息被后台进程(Background Processes)所共享。

为了最大化性能,协调众多的用户,Oracle使用了一些额外的进程,这些进程叫“后台进程(Background Pro cesses)”,这些进程执行I/O,并监控其他进程等。每个进程都有自己的功能。

对于第一次接触“实例”这个概念的朋友来说,容易把“实例”和“数据库”这两个概念混淆,实例(Instance)是“内存”和“后台进程”的集合。“数据库”是数据的物理存储。我们要特别注意的是,一个实例可以用于一个数据库,多个实例也可同时用于一个数据库,实例和数据库的关系是一对多的关系。实例和数据库的关系如图1-6所示。

图1-6 实例和数据库的关系

为了更好地让大家理解“数据库”和“实例”的关系,我再举一个例子。如果把“数据库”比作一架飞机,“实例”就是飞机的发动机。那么,一台发动机可以驱动一架飞机,两台发动机也可以同时驱动一架飞机。

多个“实例”同时驱动一个“数据库”的架构叫“集群(Oracle Real Application Clusters,RAC)”,这是Oracle的一种高端应用,应用得非常广泛,如果结合磁盘阵列的保护机制,RAC能最大限度地保护我们的应用不间断运行,数据不丢失!

1.5.1.1 Oracle的内存结构

从上面的介绍,我们可以知道,内存是实例的组成部分。Oracle的内存由PGA和SGA组成,PGA叫程序全局区(Program Global Area)。PGA中包括服务器进程的数据和控制信息。PGA中的内容是不被共享的。

系统全局区(SGA)也是一片内存区域,与PGA不同的是,这片内存区域可以被共享。其可包含一个数据库实例的数据或控制信息。如果多个用户同时连接到同一实例时,在SGA中的数据可为多个用户所共享,所以又称为共享全局区。当实例启动时,SGA占用的内存被自动分配;当实例关闭时,该SGA占用的内存被回收。所有连接到数据库实例的全部用户可使用SGA中的信息,这些信息是共享的。SGA被划分成多个区域,这些区域包括:数据库高速缓冲区(Database Buffer Cache)、共享池(Shared Pool)、重做日志缓冲区(Redo Log Buffer)、Java池(Java Pool)、大池(Large Pool)、流池(Streams Pool)。

在SGA中,每个内存区域的功能介绍如下。

数据库高速缓冲区(Database Buffer Cache) :这片区域主要用于存放数据文件的副本。所有的用户进程都可以并发地连接到这个实例,共享数据库高速缓冲区中的数据。

共享池(Shared P ool) :共享池又分为库缓冲区(Library Cache)和字典缓冲区(Dictionary Cache)。库缓冲区用于存放使用过的SQL语句,包括这些SQL语句的执行计划及这些SQL语句的语法分析树。在第二次运行相同的SQL语句时,可以利用SQL共享池中可用的语法分析信息来加快SQL语句的执行速度。数据库对象的信息存储在数据字典表中,这些信息包括用户账号数据、数据文件名、段名、盘区位置、表的说明和权限,当数据库需要这些信息时,将读取数据字典表并且将这些信息存储在字典缓存区中。

重做日志缓冲区(Redo Log Buffer):重做 日志缓冲区用于存放用户对数据库的改变,这是一片循环使用的内存区域。

Java池(Java Pool ):Java池主要服务于Java程序。

大池(Large Pool) :大池(Large Pool)是一个可选内存区。如果使用多线程服务器选项或频繁执行备份/恢复操作,只要创建一个大池,就可以更有效地管理这些操作。

流池(Streams Pool) :也是一片特殊的内存区域,用于对流的支持。

【小贴士(Tip)】 这里只是对Oracle的内存进行概述,后续章节将对Oracle的内存做详细介绍。

1.5.1.2 Oracle后台进程

Oracle的后台进程有数据库书写进程(DBWR)、日志书写进程(LGWR)、系统监控进程(SMON)、进程监控进程(PMON)、校验点进程(CHPT)等。

【小贴士(Tip)】 有关这些进程的详细信息,我们将在后续的章节进行详细介绍。

1.5.2 Oracle的存储结构

Oracle的存储结构分为物理存储结构和逻辑存储结构。

1.5.2.1 物理存储结构

Oracle的物理存储结构由数据文件、联机日志文件、控制文件构成。

【小贴士(Tip)】 有关Oracle存储的物理结构,我们将在后续的章节进行详细介绍。

1.5.2.2 逻辑存储结构

Oracle的逻辑存储结构有表空间(Tablespace)、段(Segment)、区(Extent)、数据块(Data Block)。

【小贴士(Tip)】 有关Oracle存储的逻辑结构,我们将在后续的章节进行详细介绍。 WXUbSAQRaYU4utYE7iswonHy0pTYs9Gg5N3kskjG7Fz6hwZSGN6X6M4/LWVqI/bY

点击中间区域
呼出菜单
上一章
目录
下一章
×