ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于ORACLE TRANSACTION

关于ORACLE TRANSACTION

原创 Linux操作系统 作者:xxet1034 时间:2012-01-12 10:13:00 0 删除 编辑
通过简单的例子说明一下ORACLE TRANSACTION的执行过程:

1.一个用户使用ORACLE NET SERVICES通过3层或N层基于web的客户机请求连接ORACLE服务器。
2.在检查了该请求的合法性之后,服务器为用户启动一个新的专用服务器进程(PGA)。
3.用户执行一条把新行插入表中的语句。
4.ORACLE检查用户的权限以确认该用户有执行插入操作的必需权限。如果用户的权限信息不在库高速缓存中,必需从磁盘读取到高速缓存中。
5.如果用户有必需的权限,ORACLE检查用户要执行的SQL语句以前是否执行过且是否还在共享池中。若是,ORACLE执行此版本的SQL;否则ORACLE分析并执行该用户的SQL语句/然后ORACLE在用户会话的PGA中创建一个私有SQL区域。
6.ORACLE首先检查必需的数据是否已在数据缓冲区高速缓存中。若不在,则服务器进程从磁盘数据文件中读取必需的表数据。
7.ORACLE立即在必要的地方施加行级锁,防止其他进程同时修改相同的数据。
8.服务器更改矢量写入重做日志缓冲区。
9.服务器在数据缓冲区高速缓存中修改表数据(插入新行)。
10.用户提交该事务,使插入数据永久化。ORCALE在提交完成后释放行锁。
11.日志写入器进程立即将重做日志缓冲区中的更改数据写入联机重做日志文件。
12.服务器进程发送一条消息给客户机进程,说明已完成INSERT操作,在此情况下,此消息为“COMMIT COMPLETE”(如果不能完成请求,它将发送消息说明失败)。
13.插入操作对表所做的更改并不立刻写入磁盘。数据库写入器进程是批量进行写入更改的,因为可能要在批量写入后,要插入的信息才永久地写入磁盘数据文件。

(注:上述例子中,由于是插入新行,因此没有在撤销表空间中记录撤销信息。(新的ROWID进入撤销段,可以在需要时用DELETE...WHERE ROWID=...语句回滚。)如果用户是更新一行,则ORACLE必须将更新以前的行记录在撤销表空间中。在原事务提交此更新前,所有其他的用户看到的都是该行原来的数据。)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25915379/viewspace-714792/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 安装本地yum
请登录后发表评论 登录
全部评论

注册时间:2012-01-12

  • 博文量
    23
  • 访问量
    44318