Oracle读取数据

Oracle读取数据

ID:40561719

大小:29.00 KB

页数:11页

时间:2019-08-04

Oracle读取数据_第1页
Oracle读取数据_第2页
Oracle读取数据_第3页
Oracle读取数据_第4页
Oracle读取数据_第5页
资源描述:

《Oracle读取数据》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、下面我们要讲ORACLE服务器进程如可处理用户进程的请求,当一个用户进程发出了一条SQL语名:UPDATETABBLEASETSALARY=SALARY*2;首先,服务器进程把这条语句的字符转换成ASCII等效数字码,接着这个ASCII码被传递给一个HASH函数,并返回一个HASH值,服务器进程将到SHAREDPOOL的共享区去查找是否存在同样的HASH值,如果存在,服务器进程将使用这条语句已高速缓存在SHAREDPOOL中的已分析过的版本来执行,如果不存在,服务器进程将对该语句进行语法分析,首先检查该语句的语法的正确性,接着对语句中涉及的表、索引、视图等对象进行解析,并对照数据字典检查这

2、些对象的名称以及相关结构,并根据ORACLE选用的优化模式以及数据字典中是否存在相应对象的统计数据和是否使用了存储大纲来生成一个执行计划或从存储大纲中选用一个执行计划,然后再用数据字典核对此用户对相应对象的执行权限,最后生成一个编译代码。ORACLE将这条语名的本身实际文本、HASH值、编译代码、与此语名相关联的任何统计数据和该语句的执行计划缓存在SHAREDPOOL共享区。服务器进程通过SHAREDPOOL锁存器来申请在共享区中分配空间缓存这此内容,也就是说被SHAREDPOOL锁存器锁定的块不可被覆盖,因为这些块可能被其它进程所使用。在SQL分析阶段将用到字典CACHE,从数据字典中核

3、对表、视图等结构的时候,需要将数据字典从磁盘读入字典CACHE中,因此,在读入之前也要使用字典CACHE锁存器来申请用于缓存数据字典。生成编译代码之后,接着下一步服务器进程要准备开始更新数据,服务器进程将到DBBUFFER中查找是否有相关对象的缓存数据,下面分两个可能进行解释:如果没有,服务器进程将在表头部请求一些行锁,如果成功加锁,服务器进程将从数据文件中读这些行所在的数据块放入DBBUFFER中空闲的区域或者覆盖已被挤出LRU列表的非脏数据块缓冲区,并且排列在LRU列表的头部,如果这些非脏数据缓冲区写完也不能满足新数据的请求时,会立即触发DBWN进程将脏数据列表中指向的缓冲块写入数据文

4、件,并且清洗掉这些缓冲区,来腾出空间缓冲新读入的数据,也就是在放入DBBUFFER之前也是要先申请DBBUFFER中的锁存器,成功锁定后,再写入DBBUFFER,然后服务器程将该语句影响的被读入DBBUFFER块中的这些行的ROWID及将要更新的原值和新值及SCN等信息逐条的写入REDOLOGBUFFER,在写入REDOLOGBUFFER之前也是先请求REDOLOGBUFFER块的锁存器,成功锁定之后才开始写入,当写入达到REDOLOGBUFFER大小的三分之一或写入量达到1M或超过三秒后或发生检查点时或者DBWN之前发生,LGWR将把REDOLOGBUFFER中的数据写入磁盘上的重做日志

5、文件,已被写入重做日志文件的REDOLOGBUFFER中的块上的锁存器被释放,并可被后来写入的信息所覆盖,REDOLOGBUFFER以循环的方式工作。当一个重做日志文件写满后,LGWR将切换到下一个重做日志文件,如果是归档模式,归档进程还将前一个写满的重做日志进程写入归档日志文件,重做日志文件也是循环工作方式。写完所有的REDOLOGBUFFER之后,服务器进程开始改写这个DBBUFFER块头部的事务列表并写入SCN,然后COPY包含这个块的头部事务列表及SCN信息的数据副本放入回滚段中,我们将回滚段中的副本称为数据块的“前映像”。(回滚段可以存储在专门的回滚表空间中,这个表空间由一个或多

6、个物理文件组成,并专用于回滚表空间,回滚段也可在其它表空间中的数据文件中开辟。)然后改写这个DBBUFFER块的数据,并在其头部写入对应的回滚段地址,如果对一行数据多次UPDATE而不COMMIT则在回滚段中将会有多个“前映像”,除第一个“前映像”含有SCN(Systemchangenumber)信息外,其它的每个“前映像”的头部还含有SCN信息和“前前映像”的回滚段地址。一次UPDATE操作只对应一个SCN。然后服务器进程在脏数据列表中建立一条指向此缓冲块的指针。接着服务器进程会从数据文件读入第二个块重复以上读入,记日志,建立回滚段,修改,放入脏列表的动作,当脏数据列表达到一定长度时,D

7、BWN进程将脏数据列表中指向的缓冲块全部写入数据文件,也就是释放加在这些DBBUFER块上的锁存器。其实ORACLE可以一次从数据文件中读入几个块放入DBBUFFER,可以通过参数DB_FILE_MULTIBLOCK_READ_COUNT来设置一次读入的块的个数。如果要查找的数据已缓存,则根据用户的SQL操作类型决定如何操作,如果是SELECT则查看DBBUFFER块的头部是否有事务,如果有,将从回滚段读取,如果没有则比

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。