ORACLE中一条SQL语句的详细执行过程(初学者)

一条SQL的执行过程:


1.建立连接:

***客户端要访问数据库,则oracle会在客户端和服务器进程之间建立一个会话,并在服务器上建议一个专门处理这个会话的进程,即服务器进程。客户端键入sql命令,通过连接将sql命令传输到服务端(连接的作用就是传递,不做分析)。

2.语法检查

:服务端接受sql命令到共享池,并在共享池的共享sql区域检查此sql的语法,若有错误,则返回错误代码及错误描述(SP2-0734: unknown command beginning “selec * fr…” - rest of line ignored.),至此,并不对sql命令进行解析。

3.分析结果:

若sql语法没有错误,则对sql语句进行分析,from…where…group by…,若没有要查询的表,则返回错误代码及错误描述(ORA-00942: table or view does not exist),若语义正确,但没有匹配到查询结果,不会报错。(ORACLE只检查语法,不检查语义)并产生分析结果,即在哪张表执行什么操作。若语法和语义正确,则对所查询或修改的表加行锁及表锁,以防其他事务修改数据或删除表。

4.权限确认:

确认用户有没有访问sql语句中表的权限,语法正确,语义正确,若没有访问表的权限,依然会返回错误。

5.执行计划:

上述操作都完成且正确之后,同样是在共享sql区域,产生对该sql语句的多个执行计划,oracle会选择最优的执行计划去执行(执行计划最消耗IO),并将sql语句和执行计划存储到库高速缓存中,以便二次访问是直接执行执行计划。

6.查询或者修改:

(1)服务器进程根据执行计划去查找数据,首先要访问的地方时数据库缓冲区高速缓存,若能查询到数据,则直接返回给客户端;若查找不到,则去数据文件中查找,并将查询到的数据放在高速缓存中。返回查询结果给用户。
(2)修改也是同样的,服务器进程先访问高速缓存查找数据,若要修改数据,会先将修改的详细信息记录到redo log buffer中,再修改高速缓存。并将执行结果返回给用户。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值