




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 HYPERLINK 第1章Oracle的的体系结构这一章的内容是是比较枯燥的的,但它是理理解以后章节节的基础。如如果有读者在在开始时有些些内容没有完完全理解也不不用太着急,可可以继续学习习后面的内容容,等使用了了一段时间OOraclee系统之后,一一些概念就变变得容易理解解了。1.1 Orracle引引入复杂的体体系结构的原原因数据库管理系统统引入非常复复杂的内存和和外存体系结结构的主要原原因是有效地地管理稀有的的系统资源。资资源不足不只只是数据库管管理系统所面面对的。其实实,在我们五五千年的人类类发展历史中中,我们的祖祖先们一直在在同资源不足足作斗争。历历史上粮食和和土地等一直直都是稀有资
2、资源,还记得得我们的祖先先们用什么方方法来管理这这些稀有资源源的吗?用战战争,我们的的先民们为粮粮食而战,为为土地而战;我们当代人人类为石油而而战,为市场场而战,为金金钱而战。那么在Oraccle数据库库中什么是稀稀有资源?它它们又是如何何来管理的呢呢?如果读者者接触过数据据库或读过相相关的书,应应该还有印象象,数据库的的数据量和输输入/输出量量都是相当大大的,而这些些数据一般都都存在硬盘(外外存)上,因因此硬盘为数数据库的一类类资源。为了了方便介绍, 图1-1给给出了硬盘的的内部结构示示意图。图 1-1以有据是旋的成旋是表 1-1内 存外存(硬盘)数据访问速度很快很慢存储的数据临时永久价钱很
3、贵相当便宜从表1-1的比比较可知,内内存的数据访访问速度要比比外存(硬盘盘)快得多。这是因为内存的数据访问是电子速度,而硬盘的数据访问主要取决于机械速度。也就是说,如果一个数据库管理系统能够使绝大多数(如90%以上)数据操作在内存中完成,那么这一数据库管理系统的效率将非常高。但是由于内存中的数据在断电或出现系统故障时会消失,所以数据库管理系统还必须保证,所有的数据改动都必须及时写到硬盘上,以保障不会丢失数据;即使数据库崩溃之后,所有提交过的数据都能得到完全恢复。尽管可以通过加大内存来提高数据库管理系统的效率,但在大多数情况下信息系统的开发和维护经费都是有限的。通过以上的讨论论,读者应该该意识到
4、,在在数据库管理理系统中最宝宝贵的稀有资资源是内存。为为了高效地使使用内存这种种稀有资源,同同时保证不会会丢失任何数数据库中的数数据,Oraacle数据据库管理系统统引入了一个个非常复杂的的体系结构。1.2 Orracle数数据库中常用用的术语为了讲解容易,在在详细讨论OOraclee体系结构之之前,先介绍绍一下相关的的名词和术语语。在这里只只给出实用的的解释,并不不追求学术上上的严谨。进程(proccess):一段在内存存中正在运行行的程序。如如果没有学过过计算机操作作系统相关课课程,可以把把进程想象成成能够自动完完成某些特定定任务的任何何东西,如训训练有素的狗狗狗、跑龙套套的等。后台进程(
5、baackgroound pprocesss):进程程的一种,在在内存中运行行时,不占显显示,而且它它的优先级比比前台进程低低。可以只有有一个前台进进程,但可以以有多个后台台进程。缓冲区(bufffer):一段用来临临时存储数据据的内存区。主机(hostt):计算机机系统的另一一个称呼。服务器(serrver):一台在网络络中向其他计计算机系统提提供一项或多多项服务的主主机。客户机(cliient):一台使用由由服务器(sserverr)提供服务务的计算机系系统。1.3 Orracle数数据库管理系系统的体系结结构为了能使Oraacle数据据库管理系统统满足商业用用户的要求,Oracle引入了
6、如图1-2所示的复杂的体系结构。图 1-2以上这个复杂的的体系结构主主要包括Orracle服服务器(seerver)(而而服务器又是是由Oraccle实例(iinstannce)和OOraclee数据库(ddatabaase)组成成),还包括括一些其他的的关键文件、用用户进程和服服务器进程等等。Oracle服服务器(seerver)由由Oraclle实例(iinstannce)和OOraclee数据库(ddatabaase)两大大部分组成。它是一个数据库管理系统,提供了一致、开放和多样的信息管理的方法和途径。服务器中的一些结构并不在处理SQL语句时使用,它们是为了改进数据库系统的效率或数据的恢
7、复等而设计的。1.4 Orracle服服务器(seerver)Oracle服服务器(seerver)可可以有以下33种安装方式式。(1)基于主机机方式:在此此种配置下,用用户直接在安安装了数据库库的计算机上上登录Oraacle数据据库。(2)客户端-服务器(cclientt-servver)(两两层模型)方方式:数据库库和客户终端端分别安装在在不同的计算算机上,用户户通过网络从从个人计算机机(客户端)上上访问数据库库。(3)客户端-应用服务器器-服务器(cclientt- appplicattion sserverr-servver)(三三层模型):用户首先从从自己的个人人计算机登录录应用服务
8、器器,再通过应应用服务器访访问真正的数数据库。1.5 Orracle实实例(insstancee)Oracle实实例(insstancee)是一种访访问数据库的的机制,它是是由内存结构构(SGA)和一些后台进进程(5个进进程)组成的的。它的内存存结构也称为为系统全局区区(systtem gllobal area,SSGA)。系系统全局区是是实例的最基基本的部件之之一。实例的的后台进程中中有5个是必必需的,即这这5个后台进进程中的任何何一个没有启启动,实例将自动关关闭。这5个个后台进程分分别是SMOON、PMOON、DBWWR、LGWWR和CKPPT。在OCCP考题中有有时可能会问问哪些后台进进
9、程是可选的的?除了这55个都是可选选的。实例一一启动就分配配系统全局区区和启动所需需的后台进程程。这里应该该指出的是,每每个实例只能能操作一个数数据库,而且且它不可以操操作其他的数数据库。但是是反过来是不不成立的,因因为一个数据据库可以同时时被几个实例例操作(在OOraclee集群中)。系统全局区(SSGA)中包包含了以下几几个内存结构构:共享池(ssharedd pooll)、数据库库高速缓冲区区(dataabase buffeer cacche)、重重做日志缓冲区区(redoo log buffeer)和其他他的一些结构构(如锁和统统计数据)等等。1.6 Orracle数数据库Oracle
10、数数据库是数据据的一个集合合,Oraccle把这些些数据作为一一个完整的单单位来处理。Oracle数据库也叫做物理(外存)结构,它为数据库信息提供了真正的物理存储,它是由以下3类操作系统文件组成的。(1)控制文件件(conttrol ffiles):包含了维护护和校验数据据库一致性所所需的信息。(2)重做日志志文件(reedo loog filles):包包含了当系统统崩溃后进行行恢复所需记记录的变化信信息。(3)数据文件件(dataa filees):包含含了数据库中中真正的数据据。1.7 Orracle其其他的关键文文件除了以上3类数数据库文件之之外,Oraacle服务务还需要其他他的一些
11、文件件,这些文件件不属于数据据库。其中包包括:初始化参数文件件(paraameterr filees):定义义了实例的特特性,如系统统全局区中一一些内存结构构的大小、DDBWR的个个数。密码文件(paassworrd filles):包包含了数据库库管理员或操操作员用户在在启动和关闭闭实例时所需需的密码。虽虽然Oraccle数据库库提供了相当当完善的安全全管理机制,但但是在Oraacle数据据库没有开启启时如何验证证要启动数据库库的人是真正正的数据库管管理员或操作作员呢?这就就是Oraccle引入密密码文件的原原因。归档重做日志文文件(arcchivedd redoo log filess):
12、是重做做日志文件的的脱机备份。在在系统崩溃后后进行恢复时时可能需要这这些文件。1.8 建立立与Oraccle实例的的连接Oracle实实例(insstancee)是用Orracle的的STARTTUP命令启启动的(该命命令将在后面面的章节中详详细介绍)。它的启动就意味着SGA的所有内存结构都已生成,所有必需的后台进程都已在内存中运行。那么此时用户又是如何使用Oracle数据库呢?用户在向Oraacle数据据库发出SQQL命令之前前必须与实例例(insttance)建建立连接。用用户启动一个个工具如SQQL*Pluus,或运行行一个利用OOraclee工具开发的的应用程序,如如用Oraccle
13、Foorms开发发的应用程序序时,这个工工具或应用程程序就被作为为一个用户进进程来执行。用用户进程是不不能直接访问问数据库的。在专用连接的情情况下(也是是默认),当当一个用户登登录Oraccle服务器器时(如在SSQL*Pllus的提示示下输入用户户名和密码),如如果登录成功功(即用户名名和密码都准准确无误),OOraclee就在服务器器所运行的计计算机上创建建一个服务器器进程。在这这种连接下,该服务务器进程只能能为这个用户户进程提供服服务。用户进进程与服务器器进程是一对对一的关系。用户进程向服务器进程发请求,服务器进程对数据库进行实际的操作并把所得的结果返回给用户进程。就好像一个大富豪想炒股
14、票,但又不懂股票市场的运作,于是他请了一位股票经纪人。这位富豪就相当于用户进程,而股票经纪人就相当于服务器进程,股票市场就相当于Oracle数据库。一个用户每次登登录Oraccle服务器器,如果成功功,该用户就就与Oraccle服务器器建立了连接接,而这种连连接又叫做会会话。一个会会话始于用户户成功地登录录Oraclle服务器,终终止于用户退退出或非正常终止止连接。一个个数据库用户户可能同时有有多个会话存存在,即用相相同的用户名名和密码同时时登录多次。1.9 各种种不同的连接接方式连接是用户进程程与Oraccle服务器器之间的通信信路径。与OOraclee服务器(sserverr)的3种安安装
15、方式相对对应,一个数数据库用户可可能用以下33种方式之一一与Oraccle服务器器连接。(1)基于主机机方式:此时时的用户进程程与服务器进进程是在同一一台计算机的的相同的操作作系统上的,用户进程与Oracle服务器之间的通信路径是通过操作系统内部进程通信(inter process communication,IPC)机制来建立的。(2)客户端-服务器(cclientt-servver)(两两层模型)方方式:用户进进程与Oraacle服务务器之间的通通信是通过网网络协议(如如TCP/IIP)来完成成的。(3)客户端-应用服务器器-服务器(cclientt- appplicattion sser
16、verr- serrver)(三三层模型):用户的个人人计算机通过过网络与应用用服务器或网网络服务器通通信,而这个个应用服务器器或网络服务务器又是通过过网络与运行行数据库的计计算机相连的的。例如,用用户使用浏览览器通过网络络运行NT服服务器上的应应用程序,而而NT服务器器又从运行在在UNIX主主机上的Orracle数数据库中提取取数据。以上所介绍的连连接是用户进进程与服务器器进程的一对对一的连接,也也称为专用服服务器连接(ddedicaated sserverr connnectioon)。除了了这种连接外外,在联机事事务处理(oonlinee trannsactiion prrocesssi
17、ng,OOLTP)系系统的配置时时还有另外的的一种连接,它它在Oraccle9i之前的的版本中称为为多线程(MMTS)连接接,在Oraacle 99i或以后的的版本中称为为共享服务器器(sharred seerver)连连接。有关这这种连接在OOraclee的网络和调调优的书籍中中介绍。1.10 服服务器进程当Oraclee创建一个服服务器进程的的同时要为该该服务器进程程分配一个内内存区,这个个内存区称为为程序全局区区(proggram ggloball areaa,PGA)。与与SGA不同同,PGA是是一个私有的的内存区,是是不能共享的的,是只属于于一个进程的的。它随着进进程的创建而而被分配
18、,随随着进程的终终止而被回收收。在专用服服务器进程的的配置情况下下,程序全局局区包括了以以下结构:(1)排序区(ssort aarea):用于处理SSQL语句所所需的排序。(2)游标状态态区(currsor sstate):用于指示会会话当前所使使用的SQLL语句的处理理状态。(3)会话信息息区(sesssion inforrmatioon):包括括了会话的用用户权限和优优化统计信息息。(4)堆栈区(sstack spacee):包括了了其他的会话话变量。如果是共享服务务器进程或多多线程的配置置,以上这些些结构除了堆堆栈区外大部部分将存在SSGA中。如如果有larrge poool,它们们就会
19、被存在在largee pooll,否则它们们就会被存在在共享池中。1.11 OOraclee执行SQLL查询语句的的步骤Qu了询E Op么l何个?句用服来他程助过语的句如询成返结他语回或息句要3编r执e据c编译(parsse):在进进行编译时,服服务器进程会会将SQL语语句的正文放放入共享池(ssharedd pooll)的库高速缓缓存(libbrary cachee)中并将完成成以下处理:首先在共享池中中搜索是否有有相同的SQQL语句(正文),如如果没有就进进行后续的处处理。检查该SQL语语句的语法是是否正确。通过查看数据字字典来检查表表和列的定义义。对所操作的对象象加编译锁(pparse
20、lockss)以便在编译译语句期间这这些对象的定定义不能被改改变。检查所引用对象象的用户权限限。生成执行该SQQL语句所需需的优化的执执行计划(执执行步骤)。将SQL语句和和执行计划装装入共享的SSQL区。以上的每一步操操作都是在处处理正确时才才进行后续的的处理。如果果不正确,就就返回错误。执行(execcute):Oraccle服务器器进程开始执执行SQL语语句是因为它它已获得了执执行SQL语语句所需的全全部资源和信信息。提取数据(feetch):Oraccle服务器器进程选择所所需的数据行行,并在需要要时将其排序序,最后将结结果返回给用用户(进程)。1.12 共共享池(shhared po
21、ol)SGA中的共享享池(shaared ppool)是由库高速速缓存(liibraryy cachhe)和数据字典典高速缓存(ddata ddictioonary cachee)两部分所组组成。服务器器进程将SQQL(也可能能是PL/SSQL)语句的正文文和编译后的的代码(paarsed code)以及执行计计划都放在共共享池(shhared pool)的库高速缓缓存中。在进进行编译时,服务器进进程首先会在在共享池中搜搜索是否有相相同的SQLL或PL/SSQL语句(正正文),如果果有就不进行行任何后续的的编译处理,而而是直接使用用已存在的编编译后的代码码和执行计划划。提示:库高速缓存包含含了
22、共享SQQL区和共享享PL/SQQL区两部分分,它们分别别存放SQLL和PL/SSQL语句以以及相关的信信息。要想共享SQLL或PL/SSQL语句,第第一,库高速缓存存(librrary ccache)要足够大,因因为只有这样样要共享的SSQL或PLL/SQL语语句才不会很很快地淘汰出出内存。第二二,SQL或或PL/SQQL语句要是是能共享的通通用代码(ggeneriic codde),因为Orracle是是通过比较SSQL或PLL/SQL语语句的正文来来决定两个语语句是否相同同的,只有当当两个语句的的正文完全相相同时Oraacle才重重用已存在的的编译后的代代码和执行计计划。这里通通过以下的
23、实实例来进一步步解释这一点点。读者猜如如下的两个SSQL语句是是否相同?select * froom empp wherre sall = 11500; 和seleect * from emp wwhere sal = 15001;答案是不相同的的(在Oraacle默认认的配置下,OOraclee 8i和OOraclee 9i以及及更高的版本本可以通过重重新设置CUURSOR_SHARIING参数来来修改默认配配置,有兴趣趣的读者可参参阅Oraccle调优方方面的书籍)。可以通过使用绑绑定变量的方方式来重写以以上的SQLL语句,如下下:select * froom empp wherre sa
24、ll = &v_sall;这个语句就是可可以共享的通通用代码,因因为变量不是是在编译阶段段而是在运行行阶段赋值的的。引入库高高速缓存(llibrarry cacche)的目的是共共享SQL或或PL/SQQL代码。那那么Oraccle又是怎怎样有效地管管理库高速缓缓存(libbrary cachee)的呢?Orracle是是使用一个称称为LRU(lleast recenntly uused)的的队列(liist)或算算法(alggorithhm)来实现现对库高速缓缓存的管理的的。LRU队队列的算法大大致如下:刚刚使用的内存存块(的地址址)放在LRRU队列的头头上(最前面面),当一个个服务器进程速
25、存没内该L的后所块存使的立R最样间的自L的最从以上的讨论可可知,为了能能够共享SQQL或PL/SQL的代代码,库高速缓存要要足够大,因因为这样那些些可以共享的的SQL或PPL/SQLL代码才不会会被很快地淘淘汰出内存。不不过Oraccle并没有有给出直接设设置库高速缓缓存大小的方方法,只能通通过设置共享享池的大小来来间接地设置置库高速缓存存的大小。介绍完了库高速速缓存,接下下来将介绍数数据字典高速速缓存(daata diictionnary ccache)。当Oraccle在执行行SQL语句句时,服务器器进程将把数数据文件、表表、索引、列列、用户和其其他的数据对对象的定义和和权限的信息息放入数
26、据字字典高速缓存存。如果在这这之后,有进进程(用户)需需要同样的信信息,如表和和列的定义,那那么所有的这这些信息将从从数据字典高高速缓存中获获得。因为以以上所说的这这些信息都是是存在Oraacle数据据库的数据字字典中,这也也可能就是该该部分内存叫叫做数据字典典高速缓存的的原因。表和列的定义等等重用的机会会要比SQLL语句大,因因此为了能达达到共享这些些信息的目的的,数据字典典高速缓存应应该尽可能设设置得大一些些。不过与库库高速缓存一一样,Oraacle并没没有给出直接接设置数据字字典高速缓存存大小的方法法,只能通过过设置共享池池的大小来间间接地设置数数据字典高速速缓存的大小小。在Oraacl
27、e9i之前的的版本,可以以通过修改参参数文件中的的SHAREED_POOOL_ SIIZE的值来来改变共享池池的大小,但但一定要重新启启动Oraccle数据库库。在Oraacle 99i或以后的的版本中,也也可以使用类类似于例1-1的命令来来改变共享池池的大小:例1-1SQL ALLTER SSYSTEMM SET SHAREED_POOOL_SIZZE = 332M;系统已更改。但是所改变共享享池的大小受受限于SGAA_MAX_SIZE参参数。这个参参数将在以后后的章节中详详细地介绍。注意:在本书中采用如如下的约定:SQL为SQQL*Pluus的提示符符。没有阴影的内容容为要输入的的SQL语
28、句句或SQL*Plus命命令等。如在在例1-1中中要输入ALLTER SSYSTEMM SET SSHAREDD_POOLL_SIZEE = 322M;。阴影中的内容为为系统显示(输输出)的结果果。如在例11-1中的“系统已更改改。”。提示:即使把共享池设设置得足够大大并且所使用用的SQL或或PL/SQQL语句也是是能共享的代代码,Oraacle也并并不能一定使使用内存(共共享池)中的的代码。例如如当有用户修修改了某个对对象的定义之之后,所有使使用这个对象象的内存(共共享池)中的的代码全部被被Oraclle设置为无无效,因此在在使用时必须须重新编译。1.13 数数据库高速缓缓冲区(daatab
29、asse bufffer ccache)-和库高速速缓存(liibararry cacche)不一一样如果用户发出了了以下的SQQL语句:SSELECTT * FRROM emmp,Oraacle又是是怎样提取数数据库中的数数据呢?服务务器进程将首首先在数据库库高速缓冲区区(dataabase buffeer cacche)中搜搜寻所需的数数据,如果找找到了就直接接使用而不进进行磁盘操作作,如果没找找到就将进行行磁盘操作把把数据文件中中的数据读入入到数据库高高速缓冲区中中。从以上的讨论可可知,为了能能够共享数据据库中的数据据,数据库高高速缓冲区要要足够的大,因因为这样那些些可以共享的的数据才不
30、会会被很快地淘淘汰出内存。OOraclee也是使用一一个叫做LRRU(leastt receently used)的的队列(liist)或算算法(alggorithhm)来实现现对数据库高高速缓冲区的的管理。可以以使用参数文文件中的DBB_BLOCCK_SIZZE和DB_BLLOCK_BBUFFERRS两个参数数来设置数据据库高速缓冲冲区的大小。其中DB_BLOCK_SIZE为Oracle数据块(内存缓冲区)的大小,在Oracle数据库中内存和外存的数据块的大小是相同的。DB_BLOCK_BUFFERS为内存缓冲区的个数。数据库高速缓冲区大小为这两个参数的乘积。但是DB_BLOCK_SIZE的
31、值是在创建数据库时设定的,如果要改变该参数的值一般需要重建数据库。因此多数情况下只能通过改变DB_BLOCK_BUFFERS的值来调整数据库高速缓冲区大小。但一定得重新启动Oracle数据库。在Oracle 9i或以后的版本中,Oracle引入了另一个参数DB_CACHE_SIZE,这个参数是一个动态参数,即可以在数据库运行时动态地改变该参数。可以使用类似于 例1-2的命令来改变数据库高速缓冲区的大小:例1-2SQL ALLTER SSYSTEMM SET DB_CAACHE_SSIZE = 48M;系统已更改。1.14 内内存缓冲区顾顾问(v$ddb_cacche_addvice)Oracl
32、e 9i或以后后的版本还提提供了一个称称为内存缓冲冲区顾问(vv$db_ccache_advicce)的工具具来帮助获得得调整数据库库高速缓冲区区的统计信息息。内存缓冲冲区顾问一共共有3种状态态:(1)ON:该该工具打开,为为该工具分配配内存并进行行统计信息的的收集。要有有一定的内存存和CPU开开销。(2)READDY:该工具具关闭,为该该工具分配内内存但不进行行统计信息的的收集,因此此没有CPUU的开销。(3)OFF:该工具关闭闭,不为该工工具分配内存存也不进行统统计信息的收收集,因此既既没有内存的的开销也没有有CPU开销销。可以通过修改初初始化参数DDB_CACCHE_ADDVICE的的值
33、来改变该该工具的状态态。这一参数数是一个动态态参数,因此此可以使用AALTER SYSTEEM命令来修修改。例如可可以利用类似似于例1-33的SQL语语句来查看它它的状态:例1-3SQL seelect id, nname, blockk_sizee, advvice_sstatuss 2 ffrom vv$db_ccache_advicce; ID NNAME BBLOCK_SIZE ADV - - - - 3 DDEFAULLT 40996 ON 3 DDEFAULLT 40996 ON 3 DDEFAULLT 40996 ON 3 DDEFAULLT 40996 ON 3 DDEFAUL
34、LT 40996 ON 已选择20行。 此时,例1-33的显示结果果表明了内存存缓冲区顾问问是在开启状状态。提示:显示结果中的表示省略了了一些行的显显示。之后可以使用类类似于例1-4的命令将将内存缓冲区区顾问(v$db_caache_aadvicee)工具关闭闭:例1-4SQL allter ssystemm set db_caache_aadvicee = offf;系统已更改。这时可以再使用用类似于例11-5的SQQL语句来查查看它的状态态:例1-5SQL seelect id, nname, blockk_sizee, advvice_sstatuss 2 ffrom vv$db_cca
35、che_advicce; ID NNAME BLOCKK_SIZEE ADV- - - - 3 DDEFAULLT 40996 OFFF 3 DDEFAULLT 40996 OFFF 3 DDEFAULLT 40996 OFFF 3 DDEFAULLT 40996 OFFF 3 DDEFAULLT 40996 OFFF 已选择20行。 此时,例1-55的显示结果果表明已成功功地关闭了内内存缓冲区顾顾问(详细地地介绍该工具具的使用已超超出了本书的的范围,有兴兴趣的读者可可参阅Oraacle 99i/10gg调优方面的的书籍)。1.15 重重做日志缓冲冲区(reddo logg bufffer)从
36、理论上来讲,如如果数据库不不会崩溃,根根本没有必要要引入重做日日志缓冲区(rredo llog buuffer)。引入重做日志缓冲区的主要目的(在Oracle 8i之前的版本中也是惟一的目的)就是数据的恢复。Oracle在使用任何DML或DDL操作改变数据之前都将恢复所需的信息,即在写数据库高速缓冲区之前,先写入重做日志缓冲区。与执行查询语句句有所不同,OOraclee在执行DMML语句时只只有编译(pparse)和和执行(exxecutee)两个阶段(PP15页DQQL)。以下是Orracle执执行UPDAATE语句的的步骤:(1)如果数据据和回滚数据据不在数据库库高速缓冲区区中,Oraac
37、le服务务器进程将把把它们从数据据文件中读到到数据库高速速缓冲区中。(2)Oraccle服务器器进程在要修修改的数据行行上加锁(行行一级的锁)。(3)Oraccle服务器器进程将数据据的变化信息息和回滚所需需的信息都记记录在重做日日志缓冲 区区中。(4)Oraccle服务器器进程将回滚滚所需的原始始值和对数据据所做的修改改都写入数据据库高速 缓缓冲区(daatabasse bufffer ccache)。之后在数据库高速缓冲区中所有的这些数据块都将被标为脏缓冲区,因为此时内外存的数据是不同的(不一致的)。Oracle处处理INSEERT或DEELETE语语句的步骤与与处理UPDDATE语句句的
38、步骤大体体相同。注意:有关回滚数据在在本书的后面面章节中还要要介绍,读者者也可以参阅阅笔者的另一一本书从实实践中学习OOraclee/SQL一一书12.220节的25582599页。1.16 大大型池(larrge poool)和JJava池(JJava ppool)除了以上所介绍绍的内存结构构之外,SGGA中还有可可能包含laarge ppool和JJava ppool两个个可选的内存存结构。引入largee pooll的主要目的的应该是提高高效率。laarge ppool是一一个相对比较较简单的内存存结构,与ssharedd pooll不同的是它它没有LRUU队列。在多多线程(MTTS)或
39、共享享服务器(ssharedd servver)连接接时,Oraacle服务务器进程的PPGA的大部部分区域(也也叫UGA)将将放入larrge poool(sttack sspace 除外)。另另外在大规模模I/O及备备份和恢复操操作时可能使使用该区。可可以通过设置置参数LARRGE_POOOL_SIIZE的值来来配置larrge poool的大小小。该参数也也是一个动态态参数。引入Java pool的的目的是能够够编译Javva语言的命命令。如果要要使用Javva语言就必必须设置Jaava poool。Jaava语言在在Oraclle数据库中中的存储与PPL/SQLL语言几乎完完全相同。可
40、可以通过设置置参数JAVVA_POOOL_SIZZE的值来配配置Javaa pooll的大小。其其数字的单位位是字节(bbytes)。在在Oraclle 9i中中Java pool的的默认大小为为24MB。1.17 内内存缓冲区大大小的设定在Oraclee 9i之前前的版本中,只能通过设置初始化参数文件中的一些参数来间接地设置SGA的大小,如DB_BLOCK_BUFFERS、LOG_BUFFER、SHARED_POOL_SIZE等。而且所有的这些参数都是静态的,即当修改完初始化参数文件中这些参数的值之后必须重新启动Oracle数据库。在Oraclee9i以后的的版本中,SSGA为动态态的。SG
41、AA中的内存缓缓冲区,如数数据库高速缓缓冲区(daatabasse bufffer ccache)和和共享池(ssharedd pooll)等都可以动动态地增加和和减少。Orracle是是利用所谓的的区组(grranulee)来管理SGAA的内存的。区组(granule)就是一片连续的虚拟内存区。区组是Oracle分配和回收内存区的基本单位。决的大S寸8组是如的或8组为Oe旦G个区所Oracle数数据库管理员员可通过ALLTER SSYSTEMM SET命命令来分配和和回收区组。但但总的内存大大小不能超过过参数SGAA_MAX_SIZE所所设定的值。该该参数的单位位是字节。动态分配和回收收内存
42、的最大大好处是在调调整内存缓冲冲区大小时不不需要重新启启动数据库。这这一点对那些些24小时运运营7天营业业的商业数据库是是至关重要的的。1.18 内内存缓冲区信信息的获取可以使用例1-6的命令来来获得参数SSGA_MAAX_SIZZE的值:例1-6SQL shhow paarametter该命令将显示出出参数文件中中可以设置的的全部参数。另外也也可以使用例例1-7的命命令来获得SSGA的相关关信息:例1-7SQL shhow sggaTotal SSystemm Globbal Arrea 1227555896bytessFixed SSize 4553432 bytessVariablle
43、Sizze 713003168 bytessDatabasse Bufffers 503331648 bytessRedo Buufferss 6667648 bytess也可以先使用例例1-8和例例1-9的SSQL*Pllus命令来来格式化显示示输出:例1-8SQL cool namme forr a20例1-9SQL cool vallue foor a255之后,利用数据据字典v$pparameeter使用例1-10的SQQL查询语句句来获得参数数SGA_MMAX_SIIZE的值:例1-10SQL sselectt namee, typpe, vaalue 2ffrom vv$paraa
44、meterr 3wwhere name = sgga_maxx_sizee;NAME TTYPE VVALUE - - -sga_maxx_sizee 6 11227555896 介绍完了SGAA的各个部分分内存缓冲区区之后,下面面开始详细地地讨论Oraacle的主主要后台进程程。1.19 重重做日志写进进程(LGWWR)及快速速提交(faast coommit)重做日志写进程程(LOG writeer,LGWWR)负责将重做做日志缓冲区区的记录顺序序地写到重做做日志文件中中。为了更好好地理解LOOG wriiter的操操作原理,在在这里先介绍绍一下Oraacle提交交(commmit)语句是
45、如何何工作的。Oracle服服务器是使用用了一种称为为快速提交(ffast ccommitt)的技术,该该技术既能保保证Oraccle系统的的效率又能保保证在系统崩崩溃的情况下下所有提交的的数据可以得得到恢复。为为此Oraccle系统引引入了系统变变化数(syystem changge nummber,SSCN)。无论任何时时候只要某个个事务(trransacction)被提交,OOraclee服务器都将将产生一个SSCN(号码码)并将其赋赋予该事务的的所有数据行行。在同一个个数据库中SSCN是单调调递增的并且且是惟一的。为为了避免在进进行一致性检检验时操作系系统时钟可能能引发的问题题,Ora
46、ccle服务器器将SCN作作为Oraccle的内部部时间戳来保保证数据文件件中的数据的的同步和数据据的读一致性性。当在SQL*PPlus中发发了commmit语句之之后,Oraacle的内内部操作步骤骤如下:(1)服务器进进程将把提交交的记录连同同所产生的SSCN(号码码)一起写入入重做日志缓缓冲区中。(2)重做日志志写进程(LLGWR)将把重做日日志缓冲区中中一直到所提提交的记录(包包括该记录)的的所有记录连连续地写到重重做日志文件件中。在此之之后,Oraacle服务务器就可以保保证即使在系系统崩溃的情情况下所有提提交的数据也也可以得到恢恢复。(3)Oraccle通知用用户(进程)提提交已经
47、完成成。(4)服务器进进程将修改数数据库高速缓缓冲区中的相相关数据的状状态并释放资资源和打开 锁等。此时可能这些数数据并未被写写到数据文件件中,这时这这些数据缓冲冲区被标为脏脏缓冲区,因因为相同的数数据在内外存存中为不同的的版本。数据据库高速缓冲冲区中的数据据是由DBWWR写到数据据文件中的。曾有不少学生问问过这样一个个问题:“为什么不同同时写两个数数据文件呢?”Oraclle的这种解解决方案的最最大好处是在在保证不丢失失数据的同时时数据库的效效率不会受到到很大影响。因为重做日志文件中的记录是以最紧凑的格式存放的,所以它的I/O量要比对数据文件的操作少得多。另外LGWR是顺序地将重做日志缓冲区
48、中的记录写到重做日志文件中的,这样其I/O速度要比将数据块写到数据文件中快得多。重做日志写进程程(LGWRR)要在下列情情况下将重做做日志缓冲区区的记录(内内存)顺序地地写到重做日日志文件(外外存)中:当某个事务被提提交时。当重做日志缓冲冲区中变化的的记录超过一一兆字节(11MB)时。当重做日志缓冲冲区中所存的的记录已超过过缓冲区容量量的1/3。在DBWR将数数据库高速缓缓冲区中修改改过的数据块块写到数据文文件之前。每3秒钟。因为在进行数据据库恢复时需需要重做日志志数据,所以以重做日志写写进程(LGGWR)只有在重做做日志数据写写到重做日志志文件(磁盘盘)上时才能能确定提交已已经完成。在在Or
49、aclle 8i之之前的版本中中,重做日志志数据的惟一一目的和用处处就是数据库库恢复。Orracle在在Oraclle 8i的的版本中引入入了一个叫做做重做日志挖挖掘器(loogmineer)的工具具。该工具可可以将重做日日志文件或归归档重做日志志文件中的数数据转换成用用户能理解的的正文信息。在在Oraclle 8i中中,该工具只只有命令行操操作方式。OOraclee 9i加强强了此工具的的功能并引入入了一个称为为日志挖掘浏浏览器(loogmineer vieewer)的的图形界面。1.20 数数据库写进程程(DBWRR/DBWnn)在本章开始时曾曾介绍过数据据库的典型操操作就是大规规模的输入
50、/输出(I/O)。因此此为了提高OOraclee系统的效率率,一要减少少I/O量,这这可能是Orracle引引入LGWRR的原因之一一;二要减少少I/O次数数,这可能是是Oraclle引入数据据库写进程(DDBWR/DDBWn)的的主要原因。提示:在Oraclee的英文书中中有些将“数据库写进进程”用DBWRR表示,有些些将它用DBBWn表示。这这是因为在一一个Oraccle实例中中可以启动多多个数据库写写进程,特别别是在要进行行大规模输入入/输出并且且运行在多CCPU计算机机上的Oraacle数据据库系统。OOraclee允许在一个个实例上最多多启动10个个数据库写进进程,它们分分别是DBW
51、W0DBW9。数据库写进程负负责将数据库库高速缓冲区区中的脏缓冲冲区中的数据据写到数据文文件上。为了了提高效率,数数据库写进程程并不是数据据库高速缓冲冲区中的数据据一有变化就就写数据文件件,而是积累累了足够多的的数据一次写写一大批内存存数据块到数数据文件上。数据库写进程将将在下列事件件之一发生时时把数据库高高速缓冲区中中的数据写到到数据文 件上:当脏缓冲区的数数量超过了所所设定的限额额。当所设定的时间间间隔已到。当有进程需要数数据库高速缓缓冲区而却找找不到空闲的的缓冲区时。当校验点发生时时。当某个表被删除除(dropp)或被截断断(trunncate)时时。当某个表空间被被设置为只读读状态(r
52、eead onnly)时。当使用类似于AALTER TABLEESPACEE userrs BEGGIN BAACKUP的的命令对某个个表空间进行行联机备份时时。当某个临时表空空间被设置为为只脱机状态态(offlline)或或正常状态(nnormall)时等。1.21 系系统监督进程程(SMONN)从前面的论述中中可以知道,由由于某种原因因Oraclle系统崩溃溃了(如断电电),SGAA中任何没有有来得及写到到磁盘中的信信息都将丢失失,如有些已已经提交的数数据还没有真真正地被写到到数据文件中中时就会丢失失。在这种情情况下,当数数据库重新开开启时,系统统监督进程(SSMON)将将自动地执行行Or
53、aclle实例的恢恢复工作。其其步骤如下:(1)执行前滚滚(rolll forwward),即将已经经写到重做日日志文件中但但还没写到数数据文件中的的提交数据写写到数据文件件中(Oraacle是用用SCN号码码来识别提交交记录的)。(2)在前滚完完成后立即打打开数据库,此此时用户就可可以登录并使使用数据库了了。这时在数数据文件中可可能还有一些些没有提交的的数据。之所所以这样安排排主要是为了了提高系统的的效率。(3)回滚没有有提交的事务务(数据)。除除了SMONN进程之外,服服务器(seerver)进进程也可能进进行回滚没有有提交的事务务,但该进程程只回滚它所所用到的加锁锁的数据行。除此之外,S
54、MMON进程还还要执行如下下的磁盘空间间的维护工作作:回收或组合数据据文件中相连连的空闲区。释放临时段(在在执行SQLL语句时用作作排序的磁盘盘区),将它它们还给数据据文件以作为为空闲区使用用。1.22 进进程监督进程程(PMONN)当某个进程崩溃溃时(如在没没有正常退出出Oraclle的情况下下重新启动了了所用的PCC),进程监督督进程(PMMON)将负责它的的清理工作。PPMON进程程将负责进行行如下的清理理工作:回滚用户当前的的事务。释放用户所加的的所有表一级级和行一级的的锁。释放用户所有的的其他资源等等。1.23 校校验点(chheckpooint)和和校验点进程程Oracle系系统为
55、了提高高系统的效率率和数据库的的一致性,引引入了一个称称为校验点的的事件。该事事件是在当DDBWR进程程把在SGAA中所有已经经改变了的数数据库高速缓缓冲区中的数数据(包括提提交的和没提提交的数据)写写到数据文件件上时产生。从理论上讲校验点(checkpoint)和校验点进程可以完全不需要,因为Oracle系统利用重做日志数据和SCN号是能够保证数据库的完全恢复的。引入校验点可能是为了提高系统的效率。因为所有到校验点为止的变化了的数据都已写到了数据文件中,在实例恢复时校验点之前的重做日志记录已经不再需要,这样实例恢复速度就加快了。在校验点事件发发生时,Orracle要要将校验点号号码(Oraa
56、cle系统统自动产生的的)写入所有有相关的数据据文件的文件件头中。还要要将校验点号号码、重做日日志序列号、归归档日志名字字和SCN号号都写入控制制文件中。尽管经常产生校校验点可以加加快实例恢复复的速度,但但是由于在产产生校验点时时Oraclle系统要进进行大量的II/O操作,所以过于频频繁地产生校校验点会使数数据库正常的的联机操作受受到冲击。最最后数据库管管理员要在实实例恢复的速速度和联机操操作之间进行行折衷。一般般的生产或商商业数据库的的校验点间隔隔是在半小时时以上。1.24 归归档日志(AARCH/AARCn)进进程以上5个后台进进程都是必需需的,即它们们中的任何一一个停止后实实例自动关闭
57、闭。在可选后后台进程中,归档日志(ARCH/ARCn)进程可能是最重要的一个可选后台进程,因为如果Oracle数据库的数据文件丢失或损坏,一般数据库要进行完全恢复,Oracle数据库应运行在归档方式。在Oraclee数据库中,重重做日志文件件被划分为若若干个组。当当一组重做日日志的文件被被写满后,OOraclee就开始写下下一组重做日日志,这被称称为日志切换换。切换是以以循环的方式式进行的,即即当最后一组组写满后,又又开始写第一一组。因此如如果只有重做做日志文件,即即Oraclle数据库运运行在非归档档方式下,当当遇到数据文文件丢失或损损坏时,Orracle系系统很难保证证完全恢复数数据库中的数数据。因为此此时所需的重重做记录可能能因重做日志志循环使用而而被覆盖掉了了。在归档方式下,AARCn进程程将把切换后后的重做日志志文件复制到到归档日志文文件。可以把把归档日志文文件看成是重重做日志文件件的备份,但但归档日志文文件是脱机的的,即除了在在进行(复制制)时,Orracl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人社所实习报告范文
- 请示奖金报告范文
- 情绪察觉报告范文
- 浙江国企招聘2024湖州长兴县内审造价咨询有限公司招聘5人笔试参考题库附带答案详解
- 二零二五年度健身俱乐部品牌推广与市场合作框架协议
- 医院与公共卫生专业人才2025年度聘用合同
- 2025年度新能源车辆劳务输送与充电基础设施建设协议
- 二零二五年度农业机械司机劳务服务合同
- 2025年度砖厂绿色生产技术引进与推广合同
- 二零二五年度赠与子女创业项目投资及收益分配协议
- 有机化学完整版本
- 银行存管三方协议书
- 2024-2030年中国妇幼保健行业发展分析及发展前景与趋势预测研究报告
- 2024年新人教版化学九年级上册全册课件(新版教材)
- 教科版 二年级科学上册第一单元第6课《不同的季节》同步练习(附答案解析)
- 山东省东营市2024年中考英语真题【附真题答案】
- 平安产险产品定价模型优化研究
- GB/T 12279.2-2024心血管植入器械人工心脏瓣膜第2部分:外科植入式人工心脏瓣膜
- JTG-3830-2018公路工程建设项目概算预算编制办法
- 设备维护服务方案(2篇)
- GB/T 10781.4-2024白酒质量要求第4部分:酱香型白酒
评论
0/150
提交评论