试谈ORACLE的工作机制doc82页.docx

  1. 1、本文档共114页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
精品文档 精品文档 PAGE PAGE78 精品文档 PAGE ORACLE 的工作机制 体系结构 实例 Oracle运行的时候,在内存中会要开辟一个区间,这个区间主要是用于从磁盘(数据文件)中读出数据后的一个在内存的缓存和处理。而处理这些数据的操作,需要有一些系统的 后台进程,这些进行在 Oracle数据库启动的时候, 就开始运行,一直在响应前台的操作。 实 际上,这一个区间( SGA)和这些后台进程合在一起,就称为 实例。实例是包括 SGA区和后 台进程两个部分的。 数据库启动执行若干动作,经历三个阶段,分别是未加载、加载和打开。 1、未加载(nomount)可以把数据库启动的这一阶段看作是 Oracle实例的启动。 这种方式启动下可执行: 重建控制文件、重建数据库 。这一启动命令: 读取数据库参数文件。 启动所需的后台进程并按参数文件中的定义分配内存。 将进展情况写入告警日志文件中。 2、加载(mount)在实例启动加载阶段,数据库参数文件中指定的控制文件被读取。记住控制文件将数据库各部分联系在一起。实例从控制文件中找到下列信息,然 后将进展写入告警日志文件。这种方式启动下可执行:数据库日志归档、数据库恢复、重新命名一些数据库文件: 所有数据文件和重做日志文件的名称和位置。 数据库名。 最新系统更改号(SCN)。 3、打开(open)包含在数据库中的每个联机数据文件在数据库打开前必须被同步。在数据库打开阶段: 所有联机数据文件的头与控制文件信息相比较。 所有文件同步后,数据库打开。 当数据库关闭时,取决于它的关闭方式执行不同的任务: ?正常(normal)在所有的用户离线后发生的正常关闭。 ?事务(transactional )事务关闭就是当所有的用户执行完当前的事务后,将用 户从数据库上清除。 ?立即(immediate)立即关闭就是从数据库清除所有当前用户之后,回退所有未 完成的操作。 ?异常(abort)异常关闭没有给数据库任何整理的机会。这种方式关闭后需要实 行崩溃恢复。 实例是数据管理的核心—它做所有的工作,而数据库存储所有的数据。 其他启动方式: ?startuprestrict 约束方式启动 这种方式能够启动数据库,但只允许具有一定特权的用户访问 非特权用户访问时,会出现以下提示: ERROR:ORA-01035:ORACLE只允许具有 RESTRICTEDSESSION权限的用户使用 ?startupforce 强制启动方式 当不能关闭数据库时,可以用 startupforce 先关闭数据库,再执行正常启动数据库命令 ?startuppfile= 参数文件名  来完成数据库的关闭 带初始化参数文件的启动方式 先读取参数文件,再按参数文件中的设置启动数据库 ?startupEXCLUSIVE *************** 一个Delete 1、  操作的流程: 检查语法、语义(V$ROWCACHE:datadictionary cache),计算HASHVALUE, 在session的UGA中进行匹配(session_cached_cursors ),如果UGA中没有, 在librarychache 中匹配(librarychache locklatch 保护library chachelock 对地址堆的访问,而后 librarychache pinlatch 保护 librarycache pin 对librarycache 中sql相关信息的访问) 2、 根据执行计划读取数据: cachebuffer chain latch 保护能定位到buffer header 并pin 住该块(如果没有buffer header,就pin 住某个空块(没 有空块就产生 freebufferwaits ),并到数据文件中读取) 。如果此时有 某个进程想访问该块,将产生 bufferbusywaits 。 3、 在redologbuffer 中记录delete操作的细节。(包括回滚段前后镜像、数 据块前后镜像)。 4、 在相应回滚段段头的事务表中创建一个 undo条目,把将要删除的记录创建 前镜像,存放到UndoBlock中。 5、 在BufferCache 中的相应数据块上删除记录,并且标记相应的数据块为 Dirty  。 提交(COMMIT) 1.Oracle产生一个SCN 2. 在回滚段事务表中标记该事务状态为 commited 3.LGWRFlushLogBuffer 到日志文件 3. 如果此时数据块仍然在 BufferCache 中,那么SCN将被记录到BlockHeader上, 这被称为快速提交(fastcommit) 4. 如果dirtyblock 已经被写回到磁盘,那么下一个访问这个block

文档评论(0)

156****6866 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档