update语句的执行步骤及commit语句的执行顺序

update语句的执行步骤和其余DML语句的执行步骤是同样的包含insert 、delete语句等,执行步骤以下:数据库

1、若是数据和回滚数据不在数据库高速缓存区中,则oracle服务器进程将把他们从数据文件中读取到数据库高速缓存区中。缓存

2、oracle服务器进程在要修改的数据行上加锁(行一级的锁)服务器

3、oracle服务器进程将数据的变化信息和回滚段所须要的信息都记录在重作日志缓冲区中oracle

4、oracle服务器进程将回滚所需的原始值和对数据所作的修改都写入数据库高速缓冲区。以后在数据库高速缓存区中全部的这些数据块都将被标记为脏缓冲区,由于此时内外存的数据是不一致的。spa

5、而后由DBWR后台进程负责将数据库高速缓存区中的脏缓存区中的数据写到数据文件中,实现内外存的数据一致。至于DBWR后台进程的执行时间点是有oracle系统的设置所决定的,包含在一下状况时触发DBWR进程执行数据的写入。日志

   (1)缓冲区的数量超过了所设定的限额进程

   (2)所设定的时间间隔已到事件

   (3)当有进程须要高速缓存区,可是此时又没有空闲的高速缓存区时。事务

   (4)当校验点发生时资源

   (5)当某个表被删除drop或者被截断truncate时

   (6)当某个表空间被设置为只读状态时

   (7)当使用相似alter tablespace users begin backup的命令对表空间进行联机备份时

   (8)当某个临时表空间被设置为只脱机状态或正常状态时

 

commit语句的执行顺序:

1、服务器进程将提交的记录连同产生的SCN码一块儿写到重作日志缓存区中

2、LGWR进程将把重作日志缓存区中一直到所提交的记录的全部记录连续的写到重作日志文件中。在此以后,oracle服务器就能够保证即便在系统崩溃的状况下全部提交的数据也能够获得恢复

3、oracle通知用户进程提交操做已经完成

4、服务器进程将修改数据库高速缓存区中的相关数据的状态并释放资源和打开锁(实际上就是修改数据库高速缓存区中的脏缓存区)

此时这些数据可能并无写入数据文件中,这些数据缓存区被标记为脏缓存区。高速缓存区中 的数据由DBWR进程写入数据文件中。

LGWR进程在下列状况下将重作日志缓存区中的数据写入重作日志文件:

(1)当某个事务被提交时

(2)当重作日志缓存区中的变化的记录超过1M时

(3)当缓存区的容量超过1/3时

(4)在DBWR进程将数据库高速缓存去中修改过的数据块写入数据文件以前

(5)每3秒钟

注:从LGWR进程的触发事件看,LGWR进程的执行必定在DBWR进程的执行以前,这样才能保证数据恢复的完整性。