Chinaunix首页 | 论坛 | 博客
  • 博客访问: 237416
  • 博文数量: 50
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 533
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-28 21:56
个人简介

活着,寻找生存。

文章分类

全部博文(50)

文章存档

2017年(1)

2016年(20)

2015年(29)

我的朋友

分类: Oracle

2015-11-23 23:39:30

  oracle 数据库是关系数据库,oracle用sql语言对数据库进行操作。了解sql语句的处理过程,能够更深入的了解oracle的内部运行机制。
 
1.1:sql语句的处理过程
     oracle中,所有的sql语句都分3个阶段进行处理:分析,执行,返回结果。无论工具如何都要将语句传递到oracle进行处理。

1.2:SQL语句分析
    分析是处理sql语句的第一步,sql语句从用户进程送到服务器进程,服务器进程进程开始进行以下工作。
     
    >:语法分析
      oracle采用自底向下的分析方法,检查语句是否符合语法规范,命名是否符合命名规范。如:SQL语句:select ename,sal from emp;
    服务器进程会将其中的关键字select,from,表名emp,列名ename,sal分析出来等待语义分析。

    >:语义分析
       语法分析通过后,说明sql语句格式正常,但还不知道语句中的各个对象在数据中是否存在,当前用户是否有权限读写。语义的功能就是验证这些。它根据语法分析处理的哥数据库对象,分别从数据字典中取出其定义和权限。
      如上例中的表名emp,先从数据字段中看是否存在该表,如果存在,就从数据字典中取出表emp的定义,查看当前用户是否有权限读,如果没有提示出错。

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

  >:  选择优化器:不同的优化器一般产生不同的“执行计划”。

  >:  选择连接方式:oracle有3种连接方式,对多表连接oracle可选择适当的连接方式。

 >:选择连接顺序:多表连接,oracle选择那一对表先连接,并选择源数据表。

 >:选择数据的搜索路径:根据以上条件选择合适的数据搜索路径,如选用全表搜索还是利用索引或是其他的方式搜索。

 >:到SGA中为该sql语句找到一个共享sql区。

如果已有该sql语句的共享sql区,则直接执行共享sql区内容,而不进行以上分析。

1.3:sql语句执行
   执行阶段执行已经分析过的语句。如果sql语句会更新数据库,如UPDATE,DELETE语句,oracle先要将修改的行锁住,以免其他用户修改。如果sql语句不会更新数据库,则执行下一步的读数据库操作。
   
   oracle先从数据库缓冲区中寻找是否存在所要的数据块,如果存在,就直接读或修改;否则从物理文件中读到数据库缓冲区内。

1.4:返回结果
     对select语句等需要返回结果的语句,还有返回结果阶段,将执行结果返回给用户进程。如果查询需要排序,则将排序的结果返回给用户。查询结果总是以表格形式呈现,根据使用的内存大小不同,可以一次取出一行,也可以一次取出一组数据。

1.5:SELECT语句的处理过程
  select语句是数据库最常使用的命令,下图为其处理查询语句的具体步骤:


 。创建游标(curson),游标可以是显式的,也可以是隐式的
 。判断是否有相同sql语句
 。分析语句
 。定义输出,指定位置,类型和结果集的数据类型,转换数据类型
 。绑定变量,如果查询语句中有变量值,需取到变量的值
 。判断是否能并行查询
 。执行查询
 。以行方式取出数据
 。关闭游标

1.6:其他语句的处理步骤
除select外得其他语句执行方式:
  。创建游标(cursor),使用隐式游标
  。判断是否有相同语句
  。分析语句
  。绑定变量,如果查询语句中有变量值,需取到变量的值
  。看是否能并行查询
  。执行语句
  。通知用户执行完成
  。关闭游标
阅读(1190) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~