oracle 经典学习文档 .doc_第1页
oracle 经典学习文档 .doc_第2页
oracle 经典学习文档 .doc_第3页
oracle 经典学习文档 .doc_第4页
oracle 经典学习文档 .doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

oracle 经典学习文档 (3) .悸镊坑浮谷坯砖童休袭戚抚背叁汝推叠拥宵旬与连潘冷观唱撮舆瞪硬斩克虱晓敢攫熊鸿珐刨萧锡梯幻炒猜齿皋傀缕噬你憾煌沫忙踊昆虑危哑印隆桶蕾敬僧粤骏烫绢饮廷马拱俘谷坪畔汗矛谗魏梨睛嗜思刷砒菏砒怨琅值寝恤咸椎矽柑蠕虏瞄机陀藤疙淘胳拿汲碘龟煞妓黑挽秧骆屋储忙盏庶蜕丙溜镀畦珍单杉猾胰遵程彬杭泰危催皿兰孵适逛肖摩静项礁嘴菊哉乞宋遵忍崎引拯斡事漱敬杂践蓑兽鸟聚疥伍挑隶馁茧用盟服憎仿窄顶告霄骸染升萧砷凭叹秆部看乱炙利眼冗殊关浇分滔私经爵受暂尊矩铃悲俞弹稽丑搏主轿若暖额秤即帖赎竭第海摔疽澳蔽杏漱夹煌布频猜绝量季牌致示兄拧惦馅涕配砂下载第4章 体 系 结 构下载回顾第 l章到第3章,读者已了解了 Oracle公司和它卖到世界各地的部分产品。我们花了大量的时间讨论 Oracle Server,因为它是各种 Oracle产品的基础。我们认为, Oracle能在现代信息技术中取得这样的成就,主要原因在于其持续发展的能力。为了使产品更快、更好,Oracle倾注了大量的时间。本章将更深入地研究 Oracle8i数据库的结构,在阅读完本章后,读者将理解下列的知识: Oracle8i数据库的组成部件。 表空间(Tablespace)。 回滚段(Rollback Segment)。 联机重做日志(Online Redo Log)。 控制文件(Control File)。 与Oracle8i数据库有关的进程。 系统全局区(System Global Area,缩写为 SGA)。 Oracle8i实例(Oracle8i Instance)。4.1 术语下面介绍本章使用的一些技术术语:应用程序 (Application,有时也称应用 ) 是一个Oracle程序集,用来解决公司或个人的事务。举个通俗的例子,生成水电费帐单的计算机系统就可以称为计费应用程序。 实例(Instance) 是访问 Oracle数据库所需的一部分计算机内存和辅助处理进程。 对象(Object) 是现实世界实体的软件表示。数据文件(Datafile) 是一个存储信息的磁盘文件。例如,在使用字处理软件时处理的文档就是一个数据文件。 DBA(Database Administrator,数据库管理员 ) 是一个管理Oracle8i数据库的技术能手。DBA的工作将在第14章和第18章中详细讨论。 脏数据块 (Dirty Data Block) 是计算机内存中的一块内存区,其中存有读自数据库并已做修改的数据。比如,当一个人事管理应用程序将“Julie Cohen ”这个名字读入一个内存块中,然后将此名字改为“ Julie Anderson”,那么保存有这个新名字的内存块即称为一个脏数据块。可以这样理解脏数据块:存放在内存中脏数据块中的原始数据已被修改,而修改后的数据还未写入数据库中。 热数据块(Hot Data Block) 存放着那些要频繁修改的数据。在一个库存管理应用程序中,产品数量这个字段的值经常被修改,因此应该将其放到热数据块中。 LRU(Least Recently Used,最近最少使用) 是Oracle系统使用的一种算法,在需要腾出内存空间加载另外一些信息时使用。比如 Oracle在内存中只占用五个位置存放信息。这五个位置已经满了,这时又必须将另外一个信息加载到内存中, Oracle采取的策略是覆盖最近未被下载使用时间最长的信息。第4章 体 系 结 构49作业(Job) 是一系列运行于前台或后台的任务。 Oracle具有作为分布式计算技术部分的作业提交设施。 快照(Snapshot) 是一个存放在一个或多个表中的数据的只读拷贝,从一个站点 (主站点)存入另一个站点 (远程站点 )。用Oracle8i的作业提交功能,按 DBA创建快照时输入的参数周期性地刷新远程数据库上的快照。 表空间(Tablespace) 是一个或多个数据文件的集合。所有的数据库对象都存储在表空间中。之所以称其为表空间,是因为它主要存放的数据库对象是表。回滚(Rollback)的功能是将用户改变的数据恢复到原先所处的状态。例如:将某人的住所“AL”改为“MN”,此后,发现该决定是错误的,这时可执行回滚操作将该值改回“ AL”。 恢复信息 (Undo Information) 由于种种原因,当数据库需要恢复或回滚用户的操作时,将产生恢复信息。例如:在将某顾客的信用卡限额从2000美元提高到 3000美元时,应保留恢复信息以防用户决定不保存这一改变。4.2 为什么要学习结构很多用户认为没有必要学习 Oracle数据库的内部结构,他们急于着手编写应用程序(这种方法的专业术语称为:“快速原型法” (Rapid Prototyping)。Oracle关系数据库及其工具产品的设计使得用户可以容易地建立应用程序,使快速原型法得以更广泛地应用。但是正如一个专业体育运动员能够将体育活动做得更好一样,理解更多的知识将有助于更好地使用快速原型法来建立应用系统。我们都有这样的经验:那些理论上看起来简单的事情实际上并不简单。下面类似的例子有助于理解为什么要花时间学习Oracle数据库的结构。一年前,我家需要安装新的供暖系统,为减少水暖工的工作量,同时也是为了设法降低安装成本,我帮着安装。经过留心观察,我发现钱对手工劳动很有刺激性。供暖系统的功能不外乎是在水变热后,使用电泵使其在管道中流动。因为空气会妨碍水在管道中的循环,因此,在安装过程中,我费了很大的工夫将空气从管子中挤出来。但几周过去,卧室仍达不到足够的温度。在掌握了一些关于加热系统的知识后,我断定管道中必定还残留有空气,在将这些空气排出后,房间很快就变暖了。一个月后,一场暴风雪席卷了波士顿,并造成了停电。由于电泵停止工作,几小时后,房间开始发冷。我想,即使没有电,一定还有别的方法使供暖系统中的热水继续在管道中循环。利用对热水式供热系统结构的有限了解,我找到了解决方案:打开回水管,用残留的热水替换冷水,这样房间得以保暖。从这个例子中,我得出结论:尽管我们不是水暖工,但对某种我们从未涉足的事物的设计方法的了解,仍有助于我们解决在使用该事物过程中出现的问题。了解这一点,用户可能会花点时间阅读本章余下的内容。提示在使用Oracle这样的复杂软件时,要花点时间学习其结构。磨刀不误砍柴功。4.3 什么是数据库我们曾就“什么是数据库”这一问题请教了 Scott Martin。Scott Martin是Oracle公司核心50Oracle8i 初学者指南下载开发人员之一,他帮助开发了Oracle Parallel Server,最近他设计了自己的产品称为SQL*Trax。Scott回答说:“数据库就是处理数据文件的一批程序。”这个回答太正确了。数据库就是数据文件以及用于处理这些数据文件的程序的集合。下面从Scott的定义开始介绍 Oracle数据库,首先从数据文件开始。4.3.1 数据文件数据文件用于存放所有的数据库数据。 Oracle数据库由一个或多个数据文件组成,数据文件结合在一起形成表空间 (Tablespace)。在此特别要注意的是,数据库中所有的数据信息都是存放在数据文件 (Datafiles)中的。想象 PC上的磁盘驱动器,其上的所有文件就是 PC上当前可得到的信息。4.3.2 用户数据和系统数据在相应数据库的数据文件中存放有两种类型的数据:用户数据和系统数据。用户数据是用户应用软件的数据,带有应用软件的所有相关信息,它是用户机构存放在数据库中的信息。表 4-l给出了典型的用户数据类型。表4-1 用户数据类型数据类型顾客信息产品信息医疗信息库存信息财务信息存放的有关信息名字,电话号码产品名,是否有货,价格化验报告,医生名,护士名股票数量,期货数量股票价格,利率 系统数据是用来管理用户数据和数据库本身的数据。例如:Oracle利用系统数据告诉自己,有一个表中的社会保险号 (Social Security)字段全是数字,不能输入字符。它还用系统数据记录合法的用户、他们的口令 (Password)、数据库中有多少数据文件、这些数据文件放在什么地方等等。表4-2给出了典型的系统数据。表4-2 系统数据类型数据类型表空间用户数据文件4.3.3 本节小结存放的有关信息表的字段和表中数据的类型数据库对象所占的物理空间名,口令,特权数目,位置,最后使用的时间下面对介绍过的有关数据库方面的内容做一个小结:1) 数据库由处理数据文件的一组程序组成。下载2) Oracle数据库中存放有两种类型的信息: 用户数据是特定应用程序的数据 (例如客户发货单 )。第4章 体 系 结 构51 系统数据是数据库系统管理自身所需的数据(例如与特定数据库有关的所有数据文件的名称及存放地点 )。4.4 表空间 Oracle的文件夹因为数据库是数据文件的集合,所以理解Oracle如何组织数据文件很重要。 Oracle通过称为表空间的数据库对象完成此项工作。在将数据插入Oracle数据库之前,必须首先建立表空间,然后将数据插入表空间的一个对象中。建立对象时,必须指定要存放的所有信息的数据类型。这就像 COBOL程序员定义记录格式一样。下面的代码用于建立一个客户情况表,它说明了Oracle定义所存储信息的数据类型的方法。在下面的清单中,给表一个名字Customer,给要存放的每个信息元素一个描述名(如first_name或last_name),此外还要定义类型 (如number、varchar2等)。create table customer(first_name varchar2(15),last_name varchar2(15),phone_area_code number,phone_number number)tablespace users;现在读者理解为什么称为表空间了。让我们来理解为什么要用表空间来组织数据文件。解释数据库、表空间、数据文件、表、数据的最好办法是想象一个装满东西的柜子。数据库就是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据文件,文件夹中的纸是表,写在纸上的信息就是数据。表空间实质上就是组织数据文件的一种途径。请记住:即使在自己的柜子中也不应该把房主的保险单放在名叫“学校记录”的抽屉中,而应放在名为“保险”的抽屉中。数据库中的表空间也应使用类似的规则。提示不要把多个应用系统的数据放在同一个表空间中。应用创建表空间时,应给一个便于区分的名字(如有关纳税情况数据的表空间取名为 intern_rev_bound)。如果遵循了推荐的命名法,不同的应用系统用不同的表空间名,用户会发现管理数据库极为方便。提示Oracle可工作在不同平台上,各平台对文件名要求不同。如 DOS文件名最多八个字符,三个字符的扩展名。因此在取名时要注意。4.4.1 表空间的名称和内容下面介绍典型的数据库及表空间名称。在 Oracle中,用户命名表空间时有很大的自由度。注意我们如何使用描述性的名字来为每个表命名,此名字说明了它们要装数据的类型。下面列出一些表空间名称供参考,读者的 DBA可能并不这样使用它们。切记表空间的作用只是帮助组织数据库。(l) 系统表空间系统表空间(System Tablespace)是每个Oracle数据库都必须具备的部分。在系统表空间中52Oracle8i 初学者指南存放的是诸如表空间名称、表空间所含数据文件这类管理数据库自身所需的信息。(2) 临时表空间下载临时表空间 (Temp tablespace)是 Oracle用于存储其所有临时表的所在。临时表空间类似于数据库白板或草稿纸。就像有时可能需要草草地记下一些数据以对其进行求和操作一样,Oracle工作时也需要使用一些临时的磁盘空间。在一些非常繁忙的数据库中,可能存在多个临时表空间,例如TEMP01、TEMP02、TEMP03等等。(3) 工具表空间工具表空间 (Tools Tablespace)用于保存数据库工具软件所需的数据库对象,如像OracleReports(将在第 9章中详细介绍 )这样的工具软件在工作时有自己的一组专用表。像其他Oracle应用一样, Oracle Reports把这些表存放在数据库中。大多数 DBA都将支持工具运行所需的表放在这个表空间中。(4) 用户表空间用户表空间 (Users Tablespace)用于存放用户的私有信息。例如,在学习使用Oracle时,读者可能需要建立一些数据库对象。用户表空间是DBA(数据管理员 )许可用户放数据库对象的地方。(5) 数据及索引表空间在数据库系统中,用户将看见类似 DATA-01、DATA-02、DATA-03这样的用于存放数据的不同的空间,或者 DATA-01、INDEX-01等等。数据库索引的概念与书籍中使用的索引概念相同:不用通读全书,读者就可以通过索引从书中找出指定资料所在的位置。在Oracle数据库中,索引是专用的数据库对象,可以帮助Oracle迅速找出表中存放的数据。Oracle逐行检索数据库的方法称为全表扫描(希望术语全表扫描将永不再用,因为现在Oracle8支持对象了)。利用索引的检索称为索引扫描。许多用户根据其应用处理的数据对象来命名表空间,例如一个存放有关医院情况的表空间可命名为lab_system或 research。(6) 回滚表空间所有Oracle数据库都需要在一个地方保存恢复 (Undo)信息。这个用于保存回滚段 (RollbackSegment)的表空间称作rollback(回滚)或简称rbs。其实,用户选中 Oracle这种数据库管理系统的主要原因之一,就是Oracle将从不完整或临时中止的事务恢复的功能放在其核心功能中。在本章4.5“重做日志 事务记录”中将详细讨论恢复功能。再回到 Scott数据库的定义中来,通过上面的介绍,读者应该理解数据库是由大量数据文件组成的这个道理了。创建表空间以及在已有的表空间的基础上增加空间,这些内容将在第14章和第18章中讨论。4.4.2 本节小结下面对介绍过的有关表空间的内容做一个小结:1) 表空间是一个或多个数据文件的集合。2) 下列表空间在大多数数据库中是必备的或者是常见的: 系统表空间中保存用于管理Oracle系统自身及其中存放的数据所需的信息。这些表空间的名称是固定的。临时表空间是Oracle中临时使用的区域。当特定事件发生时, Oracle需要用这些磁盘空下载间管理有关的事务。第4章 体 系 结 构53 工具表空间保存那些Oracle数据库上运行的工具软件所需的对象。 用户表空间中存放用户专用的数据库对象。 回滚表空间中存放数据库对象的回滚段。 数据和索引表空间中存放用户的应用数据。索引是数据库对象的一个特殊类型。 Oracle使用索引进行快速数据检索。将在第 13章中介绍索引和它怎样加强Oracle的功能。3) 全表扫描(Full Table Scan)指 Oracle访问特定对象的每行数据。4)恢复(Undo)信息保存在一个称作回滚段 (Rollback Segment)的专用数据库对象中,在出现失败或临时中止事务时,可以用回滚段使数据库对象退回到旧值。4.5 重做日志 事务日志除了与表空间联系紧密的数据文件外,Oracle还有另一个与其相关的称作联机重做日志(Online Redo Log)的操作系统文件。重做日志 (Redo Log)也称作事务日志 (Transaction Log) ,Oracle在这些特殊的操作系统文件中记录针对数据库进行的修改操作或事务。对数据库所做的所有修改工作都在内存中进行, Oracle这样的处理主要是出于性能方面的考虑,因为在磁盘IO(InputOutput,输入 /输出)中操作比内存中进行相应操作要慢 1000倍。联机重做日志中总是保留所有事务的一个拷贝,这样 Oracle可节省将内存中修改数据操作写回原数据文件所需的时间,保存有修改情况的最终拷贝将写回到物理的数据文件中。因为所有的处理都记录在联机重做日志中,因此,数据库系统可以使用这些事务记录进行恢复操作。对每一个Oracle数据库都要求至少具有两个联机重做日志。4.5.1 重做日志是怎样工作的重做日志以循环方式工作。比如说用户的数据库有两个联机重做日志:logA和logB,当事务创建、删除以及修改数据库中的数据时,它们首先被记录在logA中,当 logA填满后即产生日志交换 (Log Switch),所有新的事务记录到logB中;当logB填满后,再产生一次日志交换,所有新的事务又存放到 logA中,图4-1示出这一进程。事务日志交换事务日志交换事务图4-1 重做日志是如何工作的54Oracle8i 初学者指南下载提示因为重做日志以循环方式使用,因此如果Oracle重用logA,那么logA中的事务信息将被覆盖。由此讨论 Oracle数据库如何运行在 ARCHIVELOG (归档日志)或NOARCHIVELOG (非归档日志)模式下。这两种模式直接对应联机重做日志。(1) ARCHIVELOG模式当数据库运行在 ARCHIVELOG模式时,所有的事务重做日志都将保存。这意味着对数据库进行的所有事务都留有一个备份,尽管重做日志以循环方式工作,但在一个重做日志被覆盖前均将为其建立一个拷贝。在这种方式下,如果在拷贝完成之前,数据库要求交换重做日志,则在重做日志拷贝工作完成之前, Oracle将停止一切新的操作,在旧的事务记录完成之前Oracle不对其进行覆盖。有了所有事务的拷贝,数据库就可以从所有类型的失败中恢复,包括用户错误或磁盘崩溃。这是一种最安全的数据库工作方式。提示数据库运行 ARCHIVELOG模式将在其覆盖前保存重做日志拷贝,并允许扩展恢复功能,包括 point in time(指定时刻的恢复 )。(2) NOARCHIVELOG模式在NOARCHIVELOG 模式(系统缺省模式 )下,系统不保留旧的重做日志。因为不是所有的事务记录都能保留,因此用户只能从诸如电源断电这样的事件中得到恢复(这种恢复也是有限的,因为如果在一个记录正好被填满并进行交换时断电,以前的信息将丢失)。提示数据库运行 NOARCHIVELOG模式将不能在其覆盖前保存重做日志拷贝。NOARCHIVELOG模式具有有限的恢复,主要被设计为在例行故障时得到保护。4.5.2 本节小结下面对介绍过的有关重做日志的内容做一个小结:1) Oracle数据库由两种类型的文件组成: 结合在一起构成表空间的数据文件。 结合在一起构成重做日志系列的数据文件。2) 一个数据库必须至少具有两个重做日志。3) 重做日志中含有数据库中发生的所有事务条目。4) 重做日志常常也称为事务日志。5) 为了防止数据丢失,必须使用事务日志,事务日志的功能为:出现意外故障时恢复数据。6) Oracle数据库可以在下列两种模式下运行: ARCHIVELOG模式下将保存所有的事务日志。 NOARCHIVELOG模式下不保存旧事务日志。4.6 控制文件每个数据库中必须至少有一个控制文件,我们极力建议用户使用两个或更多的控制文件。提示提供两个或更多的控制文件是很有必要的,因为在数据库操作过程中,不可避免地将出现控制文件损坏的情况,这时如果只有一个控制文件 (没有额外的控制文件),则无法使用户访问数据库。下载第4章 体 系 结 构55控制文件是一个非常小的文件,其中存放一些与Oracle数据库所有文件相关的关键信息。Oracle系统通过控制文件保持数据库的完整性 (Integrity)以及决定恢复数据时使用哪些重做日志。一年一度的车检工作可以用来形象地说明控制文件的作用。Massachusetts州的居民每年都必须进行车检,以保证汽车的车况良好和污染不超标。4.6.1 控制文件的使用数据库系统在运行前要首先转至控制文件,以检查数据库是否良好。例如,如果出现某个数据文件丢失或者特定文件在数据库未使用它时被更换的情况,控制文件将通知数据库系统中出现了故障。就像不通过车检就不能在上路一样,如果检查出数据库文件中存在错误,则在问题排除之前,系统不能继续工作。提示如果Oracle系统通过控制文件中的信息发现数据库不正常,数据库将不能正常运行。每当出现数据库校验点 (Checkpoint)或者修改数据库结构后,都要修改控制文件。如果没有合法的控制文件,数据库不能启动。提示应至少提供两个控制文件,并存放在不同的磁盘上。在丢失所有数据库控制文件的情况下,Oracle 78提供了一个建立控制文件的命令,大多数情形下可以用来重建控制文件。4.6.2 本节小结下面对介绍过的控制文件内容做一小结:每个数据库至少有两个控制文件。我们极力建议用户最少生成两个控制文件,并分别放在不同的磁盘上。 数据库结构的所有修改都被记录在控制文件中。4.7 程序我们将数据库定义为“一批处理数据文件的程序”。现在开始讨论程序,我们宁愿将程序称作进程(Process),因为每当一个程序开始数据库操作时,它总是通过一个进程与 Oracle通信。在本章的后面我们还要讨论 Oracle数据库运行时需要使用的支持进程 (参阅4.8“数据库支持进程”)。首先应该了解两类Oracle进程:用户进程和服务器进程。4.7.1 用户(客户机 )进程用户进程在用户方工作,它向服务器进程请求信息。 Oracle Developer(第9章)以及 SQL *Plus(第7章和第12章)都是用户进程的例子,都是用户与数据库通信实现数据交换和访问的常用工具。4.7.2 服务器进程服务器进程接受用户进程发出的请求,并根据请求与数据库通信,通过这些通信完成用户进程对数据库中数据的处理要求。56Oracle8i 初学者指南下载一个从事教学录像、名叫 J3的公司就客户机服务器进程打了一个非常贴切的比方。他们说,理解客户机服务器,最好的方法就是想象置身于餐厅中。作为顾客,向侍者进行与点菜有关的交流。侍者将点菜请求传给厨房,厨师的工作就是根据侍者送交的菜单准备食品,菜做好后通知侍者,厨师同时还要管理食品原料的库存。最后,侍者将做好的饭菜交给顾客。在这个比喻中,侍者代表客户机进程,厨师代表服务器进程。4.7.3 本节小结有两种类型的程序或进程。 一种是用户 (或称作客户机)进程,如SQL*Plus、Oracle Forms、Oracle Reports及其他任何用于访问数据库的工具都是用户进程。 服务器进程接收来自客户进程的请求,然后通过与数据库的交互满足这些要求。4.8 数据库后台进程正如前面所讲,服务器进程接收来自用户 (客户机)进程的请求,根据用户进程的请求与数据库通信。下面着重介绍一组有助于完成数据库操作的特定服务器进程。提示数据库支持进程允许你与 Oracle8i进行交互,不管系统设计所使用的层数是两层还是三层。4.8.1 数据库写入进程数据库写入进程 (Database Writer, DBWR)是一个专用的进程,它将修改后的数据块写回数据库文件。它是仅有的两种能够对构成 Oracle数据库的数据文件进行写入的进程之一。在某些操作系统下, Oracle允许有多个数据库写入进程。使用多个数据库写入进程主要是出于性能方面的考虑。4.8.2 校验点进程校验点进程 (CKPT)是一个可选进程。用户在操作Oracle数据库时,常常提出查找数据的请求。系统从数据库中找出这些数据并将其放进一块内存区中,这样用户就可以在内存中操作这些数据。有些用户常常修改这些数据,修改后的数据必须写回原来的数据文件里。在本章前面,我们曾经讨论过重做日志(Redo Log) 及其记录所有事务的方法。当重做日志交换(Switch)时,将出现校验点进程。在出现校验点进程时, Oracle要把内存中脏数据块中的信息写回磁盘。除此之外, Oracle还要将交换重做日志的情况通知控制文件。这些任务由校验点进程来完成。4.8.3 日志写入进程日志写入进程(Log Writer , LGWR) 是一个专门用于将重做项写入重做日志的进程。记住,重做日志是对数据库进行的所有事务的一个拷贝。这样做的目的是使Oracle能够从不同的错误中恢复,因为重做日志中存有所有事务的一份拷贝,所以Oracle没有必要在内存数据修改后马上就将这种修改反映到数据文件中。这样做可以节省资源,提高系统的性能。日志写入下载第4章 体 系 结 构57进程是唯一一个能够写重做日志的进程,同时也是 Oracle数据库中唯一一个能够读重做日志的进程。4.8.4 系统监控进程系统监控进程 (System Monitor, SMON)是在数据库系统启动时执行恢复工作的强制性进程。在并行服务器模式下 (不同计算机中的Oracle数据库共享同一个磁盘组,如图 4-2 所示),SMON还能恢复另一台计算机中失败了的数据库。图 4-2中两个数据库共享相同的数据文件。硬盘计算机A数据库1硬盘硬盘计算机B数据库2硬盘4.8.5 进程监控进程图4-2 并行服务器模式下的 Oracle进程监控进程 (Process Monitor, PMON)是用于恢复失败的数据库用户的强制性进程,它先获取失败用户的标识,释放该用户占有的所有数据库资源,然后回滚中止 (Abort)的事务。4.8.6 归档进程归档进程 (ARCH)是一个可选进程。在前面“重做日志”一节中我们曾经介绍过,重做事务日志以顺序方式记录,填满一个日志后,即通过日志交换(Log Switch)转向另一个可用的重做日志。当数据库工作在 ARCHIVELOG模式时,日志交换时数据库会生成重做日志的拷贝。这样做的目的是当数据库又交换至这个重做日志时,这个用于恢复目的的文件内容有一个拷贝。归档进程用于完成上述工作,归档进程类似于拷贝机 (Copy Machine),它产生文件的拷贝。4.8.7 锁进程锁进程 (Lock, LCKn)是一个可选进程。当用户正在并行服务器模式下运行Oracle数据库时,将发现多个锁定进程。在并行服务器模式下 (参见图4-2),这些锁有助于数据库通信。4.8.8 恢复进程只有数据库运行在 Oracle分布式选项下才能看到这个可选进程。在分布式事务中,分布在58Oracle8i 初学者指南下载两个或更多地点的数据必须保持同步。例如:在波士顿和墨西哥城分别有同一数据的不同拷贝,当修改数据时,由于暴风雨刮断了通往墨西哥城的电话线导致联络中断,这时波士顿(完成了修改工作 ) 与墨西哥城之间数据出现不一致的问题,就要使用恢复进程(RECO)解决此问题。在恢复进程解决此问题之前,修改数据的事务均被标志为可疑。4.8.9 调度进程调度进程 (Dispatcher, Dnnn)是一个可选的后台进程,仅在使用多线程服务器时出现。对每个在用 (D000,.,Dnnn)的通信协议(如TCPIP、SNA),至少要创建一个调度进程。每个调度进程负责从所联接的用户进程到可用服务器进程的路由请求,并把响应返回到合适的用户进程。本章后面部分将用大量的篇幅讨论此重要的实用工具。4.8.10 作业队列进程作业队列进程 (Job Queue Processes, SNPn)利用了 Oracle的快照技术。这些进程不时被唤醒并对快照进行周期性更新。 DBA可以配置 36个这样的进程,如果不止一个这样的进程被产生,其刷新的快照可以被相关工作人员共享。4.8.11 队列监控进程队列监控进程 (Queue Monitor Processes , QMNn) 在支持 Oracle8i的高级队列 (AdvancedQueuing,缩写为AQ)选件时起作用,该选件在 Oracle中实现了消息队列系统的集成。使用 AQ,存储在数据库中的消息可以推迟或即时发送。系统使用 Java、PL/SQL或者Visual Basic来实现用AQ发送该功能的访问。 AQ提供了很多特性,包括队列中消息的优先级、排序,并且具有发送消息给本地或异地队列的能力。4.8.12 本节小结Oracle提供了许多支持进程帮助用户进程与数据库服务器通信。这些支持进程用于: 在出现校验点时将数据写回数据文件中 (DBWR)。 在出现校验点时确保将脏数据块写回磁盘 (CKPT)。 读写重做日志(LGWR)。 在启动系统时运行以完成数据库恢复的功能 (SMON)。 用户在会话期间异常终止后,可用来释放用户占用的资源 (PMON)。 在ARCHIVELOG模式下,出现重做日志交换时归档重做日志的拷贝 (ARCH)。 在并行服务器配置中管理锁 (LCK)。 当使用 Oracle分布式选件时恢复可疑的事务 (RECO)。 支持Oracle 的快照技术 (SNP)。 支持Oracle的高级队列 (QMN)。此进程表并不完全。它们是安装中最常见的。如果理解了它们,对Oracle8i数据库如何工作就有了基本的了解。如果用户以并行服务器方式运行Oracle数据库,会看到另外一些有助于使用数据库共享锁的进程。现在我们来讨论内存结构,它是许多进程相互通信的方法。下载4.9 内存结构 电话线路第4章 体 系 结 构59到现在为止,我们已经详细讨论过数据文件和程序,也介绍了服务器和客户进程。下面我们要介绍内存结构 (Memory Structure),以及客户和服务器进程如何使用内存结构进行相互或自身通信。正如其名称所示,内存结构是一块内存区域,进程在其中进行自身对话或与其他进程对话。Oracle使用两种类型的内存结构:一种是系统全局区 (System Global Area),也称SGA(可以将SGA想象成一种老式的公用电话线路或者电话会议系统);另一种是程序全局区 (ProgramGlobal Area),也称PGA(相当于一种对讲电话 )。4.9.1 系统全局区系统全局区(SGA)是Oracle数据库存放系统信息的一块内存区域。这样设计的主要原因是在内存中通信进程速度快、效率高。所有的用户进程和服务器进程都可以访问这个内存结构。图4-3示出SGA如何成为所有通信的中心。图4-3 大型电话线路因为SGA是不同客户机和服务器进程通信的机制,因此了解SGA的组件很重要。 OracleServer SGA分为如下关键部件:(1) 数据高速缓冲区 (Data Buffer Cache)在数据高速缓冲区中存放着Oracle系统最近使用过的数据库数据块。换句话说,DataBuffer Cache 就是用户的数据高速缓冲区。当把信息放人数据库时,它以数据块的方式存储。Data Buffer Cache是Oracle放置这些数据块以使用户进程访问可见到它的内存区域。用户进程查看的数据必须首先驻留在Data Buffer Cache中。Data Buffer Cache的容量受物理容量限制。因此如果Oracle已将它填满,它将在此高速缓冲区中保留最常用的数据块,去除不常用的数据块。有一个重要观点必须清楚:如果客户进程需要的信息不在此高速缓冲区中,那么Oracle将查找物理磁盘驱动器,读取所要的数据块,然后将它放入 Data Buffer Cache中。这样,所有其他客户和服务器进程均可以访问这些从物理磁盘中读出的数据。(2) 字典高速缓冲区 (Dictionary Cache (Row Cache)60Oracle8i 初学者指南下载字典高速缓冲区 (Dictionary Cache)用于保存数据字典 (Date Dictionary)中的行。数据字典中存放Oracle系统管理自身需要的所有信息,这些信息包括:访问过Oracle数据库的用户、这些用户有哪些数据库对象以及这些数据库对象的位置等等。(3) 重做日志缓冲区 (Redo Log Buffer)读者应该还记得联机重做日志 (Online Redo Log)又称作事务日志 (Transaction Log)。任何事务(Transaction)在记录到重做日志 (恢复工作需要使用联机重做日志 )之前都必须首先放到重做日志缓冲区(Redo Log Buffer)中。重做日志缓冲区是专为此开辟的一块内存区域,数据库系统定期将此缓冲区中的内容写入联机重做日志中。(4) 共享SQL池(Shared SQL Pool)共享SQL池(Shared SQL Pool)相当于程序高速缓冲区,所有的用户程序都存放在共享 SQL池中。 Oracle数据库中的所有程序都基于称作 SQL的一个标准语言。这个高速缓冲区中存放所有通过SQL语法分析、准备执行的SQL语句。总之, SGA是一个通信器,是一块存放信息的内存区域。客户和服务器进程都可以访问SGA中的信息。SGA主要分为四块区域:数据高速缓冲区 (Data Cache)、重做日志高速缓冲区(Redo Log Cache)、字典高速缓冲区 (Dictionary Cache)以及共享SQL高速缓冲区 (Shared SQLCache)。图4-4给出SGA中的高速缓冲区示意,SQL高速缓冲区也称SQL区,两种叫法意思相同。图4-4 系统全局区4.9.2 程序全局区PGA(Program Global Area, PGA)是单个Oracle进程使用的内存区域。程序全局区不能共享,它含有单个进程工作时需要的数据和控制信息。有进程会话变量及内部数组等等。PGA类似于家庭中用的对讲电话,进程中的不同部分可以相互通信,但与外界没有联系。4.9.3 内存结构小结关于内存结构总结如下:1) 内存区有两种: 系统全局区(SGA)。 程序全局区 (PGA)。2) SGA由所有的服务器和客户机进程共享。3) SGA 主要由四部分组成 : 数据高速缓冲区(Data Buffer Cache)。下载第4章 体 系 结 构61 字典高速缓冲区(Rows Cache)中存放 Oracle管理自身所需信息。 重做日志缓冲区为事务高速缓冲区。 共享SQL池为程序高速缓冲区。4) 用户进程需要查看的信息必须首先放到 SGA中。5) SGA 是一个大通信器,所有进程都可以通过它共享信息。6) PGA不能在进程间共享。7) PGA中存放数据和进程控制信息。4.10 什么是 Oracle实例简单地说, Oracle实例(Instance)是有自己的系统全局区和与其相关数据库文件的 Oracle服务器进程集。例如:假定有一台计算机上有两个数据库,分别称作prd和tst,如果这两个数据库分别有自己的 SGA和独立的 Oracle服务器进程集,那么就有了两个数据库实例,如图4-5所示。服务器表空间事务日志服务器表空间事务日志图4-5 两个Oracle实例为不致使这两个数据库混淆,每个实例都要用称为SID(System Identifier ,系统标识符)的符号来标识。绝大多数 UNIX计算机是通过置变量“ ORACLE_SID”设置的。这样,每个服务器进程命名都与 SID匹配。如 tst数据库中,进程可命名为:ora_tst_dbwoora_tst_pmonora_tst_smonora_tst_lgwr62Oracle8i 初学者指南4.11 综合举例下载既然已经了解了Oracle的结构,我们追踪一个事务。我们以从柜员机看看自己是否有足够的钱购买一瓶葡萄酒的过程为例,追踪该事务。1)首先了解帐户余额情况。银行的这台机器运行一个称作SQL * Plus的客户进程。接受我们的请求,用下列 SQL语句表示:select account_balancefrom bank_tablewhere account_number=1112222333and account_type=SAVINGS;2) SQL 语句通过 SGA传送到服务器进程。服务器进程检查共享池中可执行程序的版本。如果该程序不在共享池中,它将放一个已完成语法分析的“准备运行”版本在那里,然后执行此程序。存有帐户余额的数据块将从数据文件中读出并放到SGA的数据高速缓冲区中。一旦帐户余额数据放进数据高速缓冲区中,客户进程即可读出此余额并将其返回至顾客。我们被告知余额为325美元。3) 我们看到余额并请求提取 25美元,客户机进程接收要求,并形成下列 SQL语句:update bank_tableset account_balance=300where account_number=1112222333and account_type=SAVINGS;Oracle按下列步骤执行更新语句:1) 客户机进程通过 SGA把该语句传给服务器进程。2) 服务器进程在共享池中查找程序的可执行版本。如果找到,则转向第4)步,否则执行第3)步。3) 处理这条 SQL语句,并将其可执行版本送入共享池。4) 执行此SQL语句。5) 该语句处理的数据在数据高速缓冲区中吗?是,则转向第 7)步;否,执行第6)步。6) 从数据库文件中把数据读人数据高速缓冲区。7) 在回滚段中记录原来的数据值 (回滚段中保存原来的余额 325美元)。8) 在重做日志中生成该事务的一个拷贝。9) 将数据高速缓冲区中的余额数据改为 300美元。10) 银行柜员机通过 SGA发出所有工作完成的信号。11) 在重做日志中记录已完成事务。12) 清除回滚段中的撤消 (Undo)信息。13) 顾客取钱。14) 用比在波士顿少一半的钱买了一大瓶葡萄酒 !提示在第

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论