第1章Oracle的体系结构这一章的内容是比较枯燥的,但它是理解以后章节的基础。如果有读者在开始时有些内容没有完全理解也不用太着急,可以继续学习后面的内容,等使用了一段时间Oracle系统之后,一些概念就变得容易理解了。1.1Oracle引入复杂的体系结构的原因数据库管理系统引入非常复杂的内存和外存体系结构的主要原因是有效地管理稀有的系统资源。资源不足不只是数据库管理系统所面对的。其实,在我们五千年的人类发展历史中,我们的祖先们一直在同资源不足作斗争。历史上粮食和土地等一直都是稀有资源,还记得我们的祖先们用什么方法来管理这些稀有资源的吗?用战争,我们的先民们为粮食而战,为土地而战;我们当代人类为石油而战,为市场而战,为金钱而战。那么在Oracle数据库中什么是稀有资源?它们又是如何来管理的呢?如果读者接触过数据库或读过相关的书,应该还有印象,数据库的数据量和输入/输出量都是相当大的,而这些数据一般都存在硬盘(外存)上,因此硬盘为数据库的一类资源。为了方便介绍,图1-1给出了硬盘的内部结构示意图。旋转轴磁头移动臂硬盘面磁头图1-1从图1-1可以看出,所有硬盘上数据的访问都是靠硬盘的旋转和磁头的移动来完成的,第1章Oracle的体系结构·11·这种旋转和移动是机械运动。因为在计算机中所有数据的修改操作必须在内存中进行,所以内存也是数据库的一类资源。表1-1给出内存和外存的简单比较以帮助读者理解本书的内容。表1-1内存外存(硬盘)数据访问速度很快很慢存储的数据临时永久价钱很贵相当便宜从表1-1的比较可知,内存的数据访问速度要比外存(硬盘)快得多。这是因为内存的数据访问是电子速度,而硬盘的数据访问主要取决于机械速度。也就是说,如果一个数据库管理系统能够使绝大多数(如90%以上)数据操作在内存中完成,那么这一数据库管理系统的效率将非常高。但是由于内存中的数据在断电或出现系统故障时会消失,所以数据库管理系统还必须保证,所有的数据改动都必须及时写到硬盘上,以保障不会丢失数据;即使数据库崩溃之后,所有提交过的数据都能得到完全恢复。尽管可以通过加大内存来提高数据库管理系统的效率,但在大多数情况下信息系统的开发和维护经费都是有限的。通过以上的讨论,读者应该意识到,在数据库管理系统中最宝贵的稀有资源是内存。为了高效地使用内存这种稀有资源,同时保证不会丢失任何数据库中的数据,Oracle数据库管理系统引入了一个非常复杂的体系结构。1.2Oracle数据库中常用的术语为了讲解容易,在详细讨论Oracle体系结构之前,先介绍一下相关的名词和术语。在这里只给出实用的解释,并不追求学术上的严谨。进程(process):一段在内存中正在运行的程序。如果没有学过计算机操作系统相关课程,可以把进程想象成能够自动完成某些特定任务的任何东西,如训练有素的狗狗、跑龙套的等。后台进程(backgroundprocess):进程的一种,在内存中运行时,不占显示,而且它的优先级比前台进程低。可以只有一个前台进程,但可以有多个后台进程。缓冲区(buffer):一段用来临时存储数据的内存区。主机(host):计算机系统的另一个称呼。服务器(server):一台在网络中向其他计算机系统提供一项或多项服务的主机。客户机(client):一台使用由服务器(server)提供服务的计算机系统。1.3Oracle数据库管理系统的体系结构为了能使Oracle数据库管理系统满足商业用户的要求,Oracle引入了如图1-2所示的OracleDBA基础培训教程·12·复杂的体系结构。userprocessseverprocessinstanceSGADBbufferscacheredologbufferssharedpoollibrarycachedictionarycacheSMONPMONCKPTDBWRLGWRARC0database二进制文件二进制二进制二进制二进制二进制二进制二进制二进制二进制二进制二进制二进制parameterpassword正文文件二进制文件controlfilesredologfilesdatafilesarchivedlogfiles图1-2以上这个复杂的体系结构主要包括Oracle服务器(server)(而服务器又是由Oracle实例(instance)和Oracle数据库(database)组成),还包括一些其他的关键文件、用户进程和服务器进程等。Oracle服务器(server)由Oracle实例(instance)和Oracle数据库(database)两大部分组成。它是一个数据库管理系统,提供了一致、开放和多样的信息管理的方法和途径。服务器中的一些结构并不在处理SQL语句时使用,它们是为了改进数据库系统的效率或数据的恢复等而设计的。1.4Oracle服务器(server)Oracle服务器(server)可以有以下3种安装方式。(1)基于主机方式:在此种配置下,用户直接在安装了数据库的计算机上登录Oracle第1章Oracle的体系结构·13·数据库。(2)客户端-服务器(client-server)(两层模型)方式:数据库和客户终端分别安装在不同的计算机上,用户通过网络从个人计算机(客户端)上访问数据库。(3)客户端-应用服务器-服务器(client-applicationserver-server)(三层模型):用户首先从自己的个人计算机登录应用服务器,再通过应用服务器访问真正的数据库。1.5Oracle实例(instance)Oracle实例(instance)是一种访问数据库的机制,它是由内存结构(SGA)和一些后台进程(5个进程)组成的。它的内存结构也称为系统全局区(systemglobalarea,SGA)。系统全局区是实例的最基本的部件之一。实例的后台进程中有5个是必需的,即这5个后台进程中的任何一个没有启动,实例将自动关闭。这5个后台进程分别是SMON、PMON、DBWR、LGWR和CKPT。在OCP考题中有时可能会问哪些后台进程是可选的?除了这5个都是可选的。实例一启动就分配系统全局区和启动所需的后台进程。这里应该指出的是,每个实例只能操作一个数据库,而且它不可以操作其他的数据库。但是反过来是不成立的,因为一个数据库可以同时被几个实例操作(在Oracle集群中)。系统全局区(SGA)中包含了以下几个内存结构:共享池(sharedpool)、数据库高速缓冲区(databasebuffercache)、重做日志缓冲区(redologbuffer)和其他的一些结构(如锁和统计数据)等。1.6Oracle数据库Oracle数据库是数据的一个集合,Oracle把这些数据作为一个完整的单位来处理。Oracle数据库也叫做物理(外存)结构,它为数据库信息提供了真正的物理存储,它是由以下3类操作系统文件组成的。(1)控制文件(controlfiles):包含了维护和校验数据库一致性所需的信息。(2)重做日志文件(redologfiles):包含了当系统崩溃后进行恢复所需记录的变化信息。(3)数据文件(datafiles):包含了数据库中真正的数据。1.7Oracle其他的关键文件除了以上3类数据库文件之外,Oracle服务还需要其他的一些文件,这些文件不属于数据库。其中包括:初始化参数文件(parameterfiles):定义了实例的特性,如系统全局区中一些内存结构的大小、DBWR的个数。OracleDBA基础培训教程·14·密码文件(passwordfiles):包含了数据库管理员或操作员用户在启动和关闭实例时所需的密码。虽然Oracle数据库提供了相当完善的安全管理机制,但是在Oracle数据库没有开启时如何验证要启动数据库的人是真正的数据库管理员或操作员呢?这就是Oracle引入密码文件的原因。归档重做日志文件(archivedredologfiles):是重做日志文件的脱机备份。在系统崩溃后进行恢复时可能需要这些文件。1.8建立与Oracle实例的连接Oracle实例(instance)是用Oracle的STARTUP命令启动的(该命令将在后面的章节中详细介绍)。它的启动就意味着SGA的所有内存结构都已生成,所有必需的后台进程都已在内存中运行。那么此时用户又是如何使用Oracle数据库呢?用户在向Oracle数据库发出SQL命令之前必须与实例(instance)建立连接。用户启动一个工具如SQL*Plus,或运行一个利用Oracle工具开发的应用程序,如用OracleForms开发的应用程序时,这个工具或应用程序就被作为一个用户进程来执行。用户进程是不能直接访问数据库的。在专用连接的情况下(也是默认),当一个用户登录Oracle服务器时(如在SQL*Plus的提示下输入用户名和密码),如果登录成功(即用户名和密码都准确无误),Oracle就在服务器所运行的计算机上创建一个服务器进程。在这种连接下,该服务器进程只能为这个用户进程提供服务。用户进程与服务器进程是一对一的关系。用户进程向服务器进程发请求,服务器进程对数据库进行实际的操作并把所得的结果返回给用户进程。就好像一个大富豪想炒股票,但又不懂股票市场的运作,于是他请了一位股票经纪人。这位富豪就相当于用户进程,而股票经纪人就相当于服务器进程,股票市场就相当于Oracle数据库。一个用户每次登录Oracle服务器,如果成功,该用户就与Oracle服务器建立了连接,而这种连接又叫做会话。一个会话始于用户成功地登录Oracle服务器,终止于用户退出或非正常终止连接。一个数据库用户可能同时有多个会话存在,即用相同的用户名和密码同时登录多次。1.9各种不同的连接方式连接是用户进程与Oracle服务器之间的通信路径。与Oracle服务器(server)的3种安装方式相对应,一个数据库用户可能用以下3种方式之一与Oracle服务器连接。(1)基于主机方式:此时的用户进程与服务器进程是在同一台计算机的相同的操作系统上的,用户进程与Oracle服务器之间的通信路径是通过操作系统内部进程通信(interprocesscommunication,IPC)机制来建立的。(2)客户端-服务器(client-server)(两层模型)方式:用户进程与Oracle服务器之第1章Oracle的体系结构·15·间的通信是通过网络协议(如TCP/IP)来完成的。(3)客户端-应用服务器-服务器(client-applicationserver-server)(三层模型):用户的个人计算机通过网络与应用服务器或网络服务器通信,而这个应用服务器或网络服务器又是通过网络与运行数据库的计算机相连的。例如,用户使用浏览器通过网络运行NT服务器上的应用程序,而NT服务器又从运行在UNIX主机上的Oracle数据库中提取数据。以上所介绍的连接是用户进程与服务器进程的一对一的连接,也称为专用服务器连接(dedicatedserverconnection)。除了这种连接外,在联机事务处理(onlinetransactionprocessing,OLTP)系统的配置时还有另外的一种连接,它在Oracle9i之前的版本中称为多线程(MTS)连接,在Oracle9i或以后的版本中称为共享服务器(sharedserver)连接。有关这种连接在Oracle的网络和调优的书籍中介绍。1.10服务器进程当Oracle创建一个服务器进程的同时要为该服务器进程分配一个内存区,这个内存区称为程序全局区(programglobalarea,PGA)。与SGA不同,PGA是一个私有的内存区,是不能共享的,是只属于一个进程的。它随着进程的创建而被分配,随着进程的终止而被回收。在专用服务器进程的配置情况下,程序全局区包括了以下结构:(1)排序区(sortarea):用于处理SQL语句所需的排序。(2)游标状态区(cursorstate):用于指示会话当前所使用的SQL语句的处理状态。(3)会话信息区(sessioninformation):