`
junli0411
  • 浏览: 136144 次
  • 来自: ...
社区版块
存档分类
最新评论
阅读更多

第二篇 一次事务过程

对于开发人员来说,我们经常做的是启动一个事务,执行SQL,提交事务。这就完成了我们的工作。但是,就在这些简单的动作背后,网络和数据库都做了些什么呢。我们都想知道。

下面以一个实例来说明。
背景:用户正运行一个连接到Oracle数据库的客户端应用程序,是一个员工档案管理程序。
过程:
1.用户修改了一笔员工档案记录的姓名,并单击了“保存”,这时客户端应用程序通过网络向Oracle服务器进程发送了一条SQL UPDATE语句;
(注:关于客户与服务器的如何连接的过程,将另起篇幅说明。将会涉及到:Oracle Net组件、MTS、监听器、Dispatcher等概念)
2.服务器进程收到UPDATE语句请求以后,在SGA的SQL区中查找同样的语句,如果找到了则执行。否则,服务器进程就检查语句的语法,并对它进行分析,从而以最优的方法执行(这个过程叫做parsing and optimizing)。一旦这个处理完成了以后,这条语句就缓存在SGA的SQL共享区中;
3.服务器进程将原来的员工的、数据拷贝到回滚段(或重做表空间,即undo tablespace,oracle后来的版本增加了Undo tablespace功能,以取待原有的system表空间中的回滚段的功能)。将原来的员工数据拷贝到回滚段中是为了将来用户取消事务而备用的。在这个过程完成之后,服务器进程修改数据库的数据块以改变员工的姓名。修改后的数据库的数据块此时保存在SGA的数据库缓冲区中。
4.服务器进程在SGA日志缓冲区内记录加滚段和数据库块的改变信息。(注意:回滚段的改变也同样要写入日志,因为它也是事务的一部分);
5.客户端的用户提交事务;
6.LGWR(log writer)进程将这个事务的日志信息从日志缓冲区中写入当前的磁盘日志文件中。当操作系统确定写日志文件已经正确完成时,事务才算是提交了。
7.服务器进程向客户发送信息以确认提交。

在这整个过程中有个疑问:只是将事务的日志写入日志文件,但数据库块,也就是员工姓名改变后的数据并未写入磁盘文件,这是为什么呢?进而我又会想到,如果有多个事务同时作用于相同的数据呢。这时,Oracle是怎么处理这些问题的呢?带着这些问题,继续学习,弄懂后再贴出来。:)

 

分享到:
评论

相关推荐

    SQL+Server的事务、游标、存储过程及触发器.doc

    对数据库的任何一次读或写都是在某次事务内完成的。游标类似一个指针,指向某一个特定的行,根据游标的当前位置,获取和修改数据库表中的当前行。存储过程是保存起来的可以接受和返回用户提供的参数的SQL语句的集合...

    分布式事务实践 解决数据一致性

    最大努力一次提交 6-8 分布式事务实现模式与技术 6-9 全局一致性ID和分布式对象_ 第7章 分布式事务实现:消息驱动模式 详细介绍3种分布式事务实现的模式中的消息驱动模式并通过完整实例演示了消息驱动模式下,实现...

    MySQL数据库存储过程和事务的区别讲解

    事务是保证多个SQL语句的原子型的...尤其对于较为复杂的逻辑,减少了网络流量之间的消耗,另外比较重要的一点是存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一

    基于框架的Web开发-spring事务入门一个转账的例子.doc

    隔离性:一个事务执行的过程中,不应该受到其他事务的干扰。 持久性:事务一旦结束,数据就持久到数据库。 1.2 如果不考虑隔离性引发安全性问题 脏读:一个事务读到了另一个事务的未提交的数据 不可重复读:一个事务读到了...

    redis事务常用操作详解

    事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务是一个原子...

    SQL Server中存储过程比直接运行SQL语句慢的原因

    1. 存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2. 经常会遇到复杂的业务逻辑和对数据库的...

    redis_事务_.mp4

    Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令

    redis_事务_.pptx

    Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令

    redis事务.pdf

    Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行...

    第六章__MySQL存储过程.ppt

    1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、...

    Redis学习笔记—Redis事务

    Redis事务可以一次执行多个命令(按顺序地串行执行,执行中不会被其他命令插入,不许加塞) 1.简介 Redis事务可以一次执行多个命令(允许在一次单独的步骤中执行一组命令)。 特征: [1]批量操作在发送EXEC命令前被放入...

    MavLink协议+谷歌推送协议+推送自定义事务

    MavLink协议+谷歌推送协议+推送自定义事务飞行轨迹硬件协议推送...该重传过程会重复数次,如果在最后一次的重传超时后仍然没有收到相应,则认定该项事务失败。该重传机制意味着所有的部件必须能够处理重复的消息。

    10分钟解决Hibernate的事务管理,Hibernate当中要设置事务的隔离级别

    一、事务 1、什么是事务: 事务:事物指的是逻辑上的一组操作,组成这一组操作的逻辑单元要么全成功,要么全...(2)不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致在前一个事务多次查询结果不一

    【分布式事务----LCN】LCN原理及使用方式.docx

    LCN连接重用机制 当模块在同一次事务下被重复执行时,连接资源会被重用,提高连接的使用率。 事务补偿机制 为什么需要事务补偿? 事务补偿是指在执行某个业务方法时,本应该执行成功的操作却因为服务器挂机或者...

    存储过程注意点

    存储过程:当存储过程里开了事务的时候,写在事务里的sql 语句在插入或者更新的时候有时会遇到唯一键的冲突,有一次在使用连接临时表更新的时候,遇到了冲突,但是声明异常的语句并没有检测到,然后没有回滚,事务也...

    Redis之Redis事务

    事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、...

    基于微信的“最多跑一次”小程序(lw).zip

    该小程序的名称源自“最多跑一次”改革理念,旨在减少群众办事过程中的跑腿次数,提高办事效率,方便用户快速、便捷的完成各项事务。政务服务方面,该小程序涵盖了各级政府部门的线上办事服务,用户可以通过小程序...

    Redis 基础教程之事务的使用方法

    Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务是...

    mysql实现事务的提交与回滚的实例详解

    最近要对数据库的数据进行一个定时迁移,为了防止在执行过程sql语句因为某些原因报错而导致数据转移混乱,因此要对我们的脚本加以事务进行控制。 首先我们建一张tran_test表 CREATE TABLE tran_test( f1 VARCHAR(10...

Global site tag (gtag.js) - Google Analytics