【原理】Oracle体系结构中SQL提交问题 一条SQL是如何被执行的
update t set object_id=92 where object_id=29
首先执行和select一样的工作,然后进行数据修改,最后调用DBWR进程将数据写入磁盘。
日志缓冲区保存了数据库相关日志,由LGWR进程将其从日志缓冲区写入日志文件,以便数据出现异常后,将日志文件重新执行,保护数据安全,日志文件有多个,一个满后写另外一个,当日志文件都满后,系统调用ARCH进程将在最先满的日志文件转移出去,命名为归档文件。
1、一条SQL更新语句无论插入、修改或删除,最后执行完毕都需要用户commit或者rollback进行确认,否则只有自己能够看到进行的操作,其他会话无法看到。
2、当执行commit后,数据不一定写入磁盘,但是日志会写到磁盘的日志文件中,ORACLE根据一定的规则来促成数据从缓存区刷入到数据区。当这个量比较小时,ORACLE的性能就越低,但是断电开机恢复的时间就比较短;反之ORACLE的性能高了,但恢复的时间也变长了。
3、数据什么时候由缓存区刷入磁盘由CKPT进程决定。当数据库数据库崩溃,ORACLE的SMON最长用多长时间来进行实例恢复,可以设置FAST_START_MTTR_TARGET,通过该参数ORACLE会调配CKPT在适当的时候去调用DBWR.
4、数据是否写入磁盘不是由COMMIT决定的。如果SQL语句一直不提交,只要CKPT触发DBWR,数据同样会被写入磁盘。