你所在的位置: 首页 > Oracle > OCA >
最新开班 班级 报名状态
9月16日 HCNP-R&S(含初级) 热招中
9月18日 RHCSA脱产班 热招中
9月25日 HCNA-Cloud Service 热招中
9月25日 HCNA-Cloud Service 热招中
9月30日 HCNA-R&S周末班 热招中
10月31日 HCNP-storage脱产班 热招中
10月23日 HCNA-storage脱产班 热招中
10月20日 HCNP-R&S脱产班 热招中
10月10日 HCIE-R&S脱产班 热招中
10月9日 HCNA-R&S脱产班 热招中
  • 博赛网络ICT就业班热招中
  • 博赛推出Oracle OCM实战课程

ORACLE数据库SQL语句的执行过程(2)

时间:2013-11-02 15:34 作者:Superthink 点击:

 DEPTNO DNAME LOC

  ------ -------------- -------------

  20 RESEARCH DALLAS

  SQL> SELECT HASH_VALUE , ADDRESS, EXECUTIONS ,SQL_TEXT

  2 FROM V$SQL

  3 WHERE SQL_TEXT LIKE ' SELECT * FROM SCOTT.DEPT WHERE DEPTNO%';

  HASH_VALUE ADDRESS EXECUTIONS SQL_TEXT

  ---------- -------- ---------- --------------------------------------------------------------------------------

  3669302979 27D2BA1C 2 SELECT * FROM SCOTT.DEPT WHERE DEPTNO=:deptno

  Step 2:语法分析,分析SQL语句的语法是否符合规范,衡量语句中各表达式的意义

  Step 3:检查是否存在语义错误和权限。语义分析,检查语句中设计的所有数据库对象是否存在,且用户有相应的权限。

  Step 4:视图转换和表达式转换 将涉及视图的查询语句转换为相应的对基表查询语句。将复杂表达式转化较为简单的等效连接表达式。

  Step 5:决定最佳执行计划。优化器会生成多个执行计划,在按统计信息带入,找出执行成本最小的执行计划,作为执行此SQL语句的执行计划

  Step 6:将SQL文本、解析树、执行计划缓存到库缓存,存放地址以及SQL语句的哈希值。

  绑定

  如果SQL语句中使用了绑定变量,扫描绑定变量的声明,给绑定变量赋值。则此时将变量值带入执行计划。

  执行

  此阶段按照执行计划执行SQL,产生执行结果。不同类型的SQL语句,执行过程也不同。

  SELECT查询

  检查所需的数据块是否已经在缓冲区缓存中,如果已经在缓冲区缓存中,直接读取器内容即可。这种读取方式称为逻辑读取。如果所需数据不在缓冲区缓存中,则服务器进程需要先扫描数据块,读取相应数据块到缓冲区缓存,这种读取方式称为物理读。和逻辑读相比较,它更加耗费CPU和IO资源。

  修改操作(INSERT、UPDATE、DELETE)

  Step 1:检查所需的数据库是否已经被读取到缓冲区缓存中。如果已经存在缓冲区缓存,则执行Step 3

  Step 2:若所需的数据库并不在缓冲区缓存中,则服务器将数据块从数据文件读取到缓冲区缓存中

  Step 3:对想要修改的表取得的数据行锁定(Row Exclusive Lock),之后对所需要修改的数据行取得独占锁

  Step 4:将撤销数据的Redo记录复制到日志缓冲区,产生数据行的撤销数据,将数据行修改的Redo记录复制到日志缓冲区,修改数据行。

  Step 5: 产生数据修改的撤销数据

  Step 6:复制数据修改的Redo记录到日志缓冲区

  Step 7:修改数据行的内容,如果之前的缓冲为干净缓冲,则此时将变为脏缓冲。

  提取

  提取只有SELECT查询语句才有的步骤。获取查询的记录行,必要的时候对查询结果排序。

(责任编辑:Superthink)

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)