Welcome 微信登录

首页 / 数据库 / MySQL / Oracle的DML操作过程

DML操作,Oracle所有进程配合执行的过程成!用户将DML操作的语句通过进程传输给sga中的buffer cache,然后在buffer cache中对所更改的数据块进行更新操作,然后首先由logwr进程将此操作前的数据库传输给undo,将操作玩的数据传输给redo,此过程比较快(redo log为连续写)然后再由dbwn进程将buffer cache中的脏数据块写入data file这个过程有间隔,这个间隔有ckpt进程来决定。ckpt进程是如下运行的:每隔3秒或更频繁写一次,写入控制文件和数据头文件,记录DBWN从SGA写入磁盘的块的位置(SCN(system change number) 系统更改号)然后ckpt进程每次执行完之后,立刻通知dbwn进程,将现有的脏数据块写入data file当dbwn进程将脏数据块写入data file后再产生一个检查点(checkpoint)然后ckpt再次将scn更新到控制文件和data file的头文件中的scn之后,继续通知dbwn将buffer cache中的脏数据块写入到data file和dbwn创建检查点后继续等待ckpt进程的通知如此循环,便是oracle的dml操作的过程!后期补充:                   另一位网友的介绍:1、事务开始;2、在buffer cache中找到需要的数据块,如果没有找到,则从数据文件中载入buffer cache中;3、事务修改buffer cache的数据块,该数据被标识为“脏数据”,并被写入log buffer中;4、事务提交,LGWR进程将log buffer中的“脏数据”写入redo log file中;5、当发生checkpoint,CKPT进程更新所有数据文件的文件头中的信息,DBWn进程则负责将Buffer Cache中的脏数据写入到数据文件中。附:checkpoint由ckpt进程触发oracle进行checkpoint动作,将data buffer中的脏块(已经写在redo里记录但是没有写到datafile里的)的内容写入到data file里并释放站用的空间,由dbw后台进程完成,并修改controlfile和datafile的scn.
一般手工执行(alter system checkpoint)是由于要删除某个日志但是该日志里还有没有同步到data file里的内容,就需要手工check point来同步数据,然后就可以drop logfile group n.相关阅读:Oracle DML流程  http://www.linuxidc.com/Linux/2012-02/52972.htmPL/SQL“ ORA-14551: 无法在查询中执行 DML 操作”解决 http://www.linuxidc.com/Linux/2013-06/86713.htmMySQL常用DDL、DML、DCL语言整理(附样例) http://www.linuxidc.com/Linux/2013-06/86431.htmOracle基本事务和ForAll执行批量DML练习 http://www.linuxidc.com/Linux/2011-08/39836.htmOracle DML语句(insert,update,delete) 回滚开销估算 http://www.linuxidc.com/Linux/2011-09/43287.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12RHEL6.4_64安装单实例Oracle 12cR1Oracle实例的启动过程相关资讯      DML操作  Oracle DML 
  • 透过Buffer cache了解data block在  (03月17日)
  • SQL中DML(数据库操作语言)的使用  (08/07/2014 16:21:57)
  • Oracle处理数据(DML+DDL+DCL)+事  (01/25/2014 13:46:28)
  • Oracle DML错误日志笔记  (01/13/2015 18:34:51)
  • Oracle实现对表dml错误记录日志  (03/04/2014 19:14:45)
  • Oracle表的创建修改及增删改查-DML  (10/27/2013 17:06:37)
本文评论 查看全部评论 (0)
表情: 姓名: 字数