Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1011332
  • 博文数量: 584
  • 博客积分: 2293
  • 博客等级: 大尉
  • 技术积分: 3045
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-28 11:15
文章分类

全部博文(584)

文章存档

2012年(532)

2011年(47)

2009年(5)

我的朋友

分类:

2012-03-31 20:07:06

oracle提交事务详细步骤入如下:
1、用户通过sqlplus启动用户进程,使用oracle net services通过3层或n层基于web的客户机请求发送给服务器。
2、服务器接收到客户连接请求后,首先判断该用户连接的合法性,如果合法,则创建相应的服务器进程(注:如果为专用服务器配置,则为该用户进程创建专用的服务器进程,只为该用户进程服务,该用户连接断开后释放;如果为共享服务器配置,则为该用户进程指定一个共享服务器进程;如果为数据库驻留连接池,也为该用户进程指定一个服务器进程。)
3、用户进程发送请求的sql语句或者pl/sql代码块给服务器。
4、服务器进程接收到用户请求后,判断该用户是否有执行该sql代码的权限,具体算法为:服务器进程到数据字典高速缓存内,检查是否有该用户的相关权限信息,如果找不到,则到磁盘数据字典内检索(注:检索数据字典是很消耗资源的)。然后服务器进程根据找到的用户权限信息,判断用户是否有执行该sql代码的权限,如果有权限,则执行下一步;如果没有权限,则拒绝用户请求。
5、服务器进程对用户请求sql代码进行分析,分析的具体算法为:服务器进程到库高速缓存内,检索是否有该已经分析过的与请求sql代码相同的代码,如果有,则直接使用库高速缓存内的已经分析过的sql代码(软分析);如果没有,则只能对该sql代码进行分析(硬分析,这很消耗资源的);
6、服务器进程到结果高速缓存内,检索是否有该sql代码已经执行过的结果,如果有,则直接使用该结果;如果没有,则执行该sql代码;
7、oracle在该用户会话的PGA内,分配私有sql区域,用于该sql代码的执行。
8、服务器进程到数据高速缓冲区内,检索是否有执行该sql代码必需的相关数据,如果没有,则到磁盘数据文件内检索,找到之后,加载到数据高速缓冲区内;
9、oracle为表内必需的数据添加行锁,防止其他用户修改该行数据;
10、服务器进程对数据高速缓冲区内的相关数据进行更改,修改完之后,标识为脏数据,并且写到重演日志缓存内;
11、用户进程提交该事务,并且由oracle释放行锁;
12、LGWR(日志写入器)立即将重演日志缓存内的更改数据写入联机重做日志文件组内(多路复用写多个日志文件组,防止日志文件损坏);
13、DBWn(数据库写入器)在被触发时,批量将数据高速缓冲区内的脏数据写入数据文件内。
14、CKPT(检查点)将相关信息写入控制文件(v$controlfile内保存有控制文件相关信息),并且更新所有数据文件的头部信息;
15、用户进程断开连接,则oracle服务器释放服务器进程;
阅读(1645) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~