update语句的执行步骤及commit语句的执行顺序
update语句的执行步骤和其他DML语句的执行步骤是一样的包含insert 、delete语句等,执行步骤如下:
一、如果数据和回滚数据不在数据库高速缓存区中,则oracle服务器进程将把他们从数据文件中读取到数据库高速缓存区中。
二、oracle服务器进程在要修改的数据行上加锁(行一级的锁)
三、oracle服务器进程将数据的变化信息和回滚段所需要的信息都记录在重做日志缓冲区中
四、oracle服务器进程将回滚所需的原始值和对数据所做的修改都写入数据库高速缓冲区。之后在数据库高速缓存区中所有的这些数据块都将被标记为脏缓冲区,因为此时内外存的数据是不一致的。
五、然后由DBWR后台进程负责将数据库高速缓存区中的脏缓存区中的数据写到数据文件中,实现内外存的数据一致。至于DBWR后台进程的执行时间点是有oracle系统的设置所决定的,包含在一下情况时触发DBWR进程执行数据的写入。
(1)缓冲区的数量超过了所设定的限额
(2)所设定的时间间隔已到
(3)当有进程需要高速缓存区,但是此时又没有空闲的高速缓存区时。
(4)当校验点发生时
(5)当某个表被删除drop或者被截断truncate时
(6)当某个表空间被设置为只读状态时
(7)当使用类似alter tablespace users begin backup的命令对表空间进行联机备份时
(8)当某个临时表空间被设置为只脱机状态或正常状态时
commit语句的执行顺序:
一、服务器进程将提交的记录连同产生的SCN码一起写到重做日志缓存区中
二、LGWR进程将把重做日志缓存区中一直到所提交的记录的所有记录连续的写到重做日志文件中。在此之后,oracle服务器就可以保证即使在系统崩溃的情况下所有提交的数据也可以得到恢复
三、oracle通知用户进程提交操作已经完成
四、服务器进程将修改数据库高速缓存区中的相关数据的状态并释放资源和打开锁(实际上就是修改数据库高速缓存区中的脏缓存区)
此时这些数据可能并没有写入数据文件中,这些数据缓存区被标记为脏缓存区。高速缓存区中 的数据由DBWR进程写入数据文件中。
LGWR进程在下列情况下将重做日志缓存区中的数据写入重做日志文件:
(1)当某个事务被提交时
(2)当重做日志缓存区中的变化的记录超过1M时
(3)当缓存区的容量超过1/3时
(4)在DBWR进程将数据库高速缓存去中修改过的数据块写入数据文件之前
(5)每3秒钟
注:从LGWR进程的触发事件看,LGWR进程的执行一定在DBWR进程的执行之前,这样才能保证数据恢复的完整性。
update语句的执行步骤及commit语句的执行顺序的更多相关文章
- sql语句执行步骤详解
目录 一.准备工作 二.SQL逻辑查询语句执行顺序 三.SQL书写习惯 一.准备工作 先来一段伪代码,首先你能看懂么? SELECT DISTINCT <select_list> FROM ...
- Oracle SQL语句执行步骤
转自:http://www.cnblogs.com/quanweiru/archive/2012/11/09/2762345.html Oracle中SQL语句执行过程中,Oracle内部解析原理如下 ...
- ORACLE中查询语句的执行顺及where部分条件执行顺序测试
Oracle中的一些查询语句及其执行顺序 原文地址:https://www.cnblogs.com/likeju/p/5039115.html 查询条件: 1)LIKE:模糊查询,需要借助两个通配符, ...
- veridata实验例(5)在更改主键列值,update操作将被分成两个语句
veridata实验例(5)更改主键列值,update操作将被分成两个语句 续接"veridata实验举例(4)验证veridata查找出updata.delete操作导致的不同步现象&qu ...
- Oracle COMMIT语句的处理顺序
Oracle COMMIT语句相信大家都有一定的了解,下面就为您介绍Oracle COMMIT语句的处理步骤,希望对您能有所帮助. Oracle COMMIT语句处理顺序 当事务提交时,Oracle分 ...
- java执行多条SQL语句
一次执行多条SQL的技术要点如下: DatabaseMetaData接口是描述有关数据库的整体综合信息,由于DatabaseMetaData是接口,所以没有构造方法,故不能使用new来创建Databa ...
- MySql(五)SQL优化-优化SQL语句的一般步骤
MySql(五)SQL优化-优化SQL语句的一般步骤 一.优化SQL语句的一般步骤 1.1 通过show status命令了解各种SQL的执行频率 1.2 定位执行效率较低的SQL语句 1.3 通过e ...
- 打开黑盒:从 MySQL架构设计出发,看它是如何执行一条 SQL语句的
1.把MySQL当个黑盒子一样执行SQL语句 我们的系统采用数据库连接池的方式去并发访问数据库,然后数据库自己其实也会维护一个连接池,其中管理了各种系统跟这台数据库服务器建立的所有连接 当我们的系统只 ...
- oracle 查询最近执行过的 SQL语句(转载)
oracle 查询最近执行过的 SQL语句 (2014-06-09 18:02:43) 转载▼ 分类: Database oracle 查询最近执行过的 SQL语句 select sql_text ...
随机推荐
- React-Native之ViewPagerAndroid的使用
刚接触React-Native不久,我就被深深折服了. 前几天做项目用到了ViewPager做广告页,在研究了一番官方文档之后,终于也是大体做出来了,今天就分享给大家吧. 其实,大家如果使用过Andr ...
- iframe 重新加载闪过白块问题
在使用iframe时,iframe背景为白块,刷新时也会闪过白块.如果刷新时间长,就会一直出现白块,让人很烦恼,通过网上搜资料,测试最终解决方法如下所示,注意主要针对IE浏览器测试. 一.iframe ...
- 时间的获取和转换,C#和Sql
我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...
- 正确合理的建立MYSQL数据库索引
写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将对整 ...
- 初学swift笔记 结构体(八)
import Foundation /* 和类很相似 结构体 -> 封装 属性.方法 结构体是值类型 */ //定义一个LSQ类型的结构体 关键字struct struct LSQ { var ...
- Ubuntu14.04安装配置SVN及Trac
还是个实习生的时候,项目管理十分欠缺,会出现很多问题,痛定思痛,决定要改变现状,养成良好的项目管理习惯,看网上工具很多,在这里尝试使用SVN作代码版本控制,使用trac作为项目管理追踪.本文采用的操作 ...
- Callable,Runnable比较及用法
http://blog.csdn.net/xtwolf008/article/details/7713580 http://www.cnblogs.com/whgw/archive/2011/09/2 ...
- javac: cannot execute binary file
# java/jdk1.6.0_12/bin/javac-bash: java/jdk1.6.0_12/bin/javac: cannot execute binary file 后来检验,检查了 ...
- HTML5 Audio时代的MIDI音乐文件播放
大家都知道,HTML5 Audio标签能够支持wav, webm, mp3, ogg, acc等格式,但是有个很重要的音乐文件格式midi(扩展名mid)却在各大浏览器中都没有内置的支持,因为mid文 ...
- hdu 5199 Gunner(STL之map,水)
Problem Description Long long ago, there is a gunner whose name is Jack. He likes to go hunting very ...