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操作,Oracle的DML操作过程相关推荐

  1. dml操作mysql_数据库DML操作(DCL了解)

    DQL:SELECT * FROM 表名 DML(数据操作语言,它是对表记录的操作(增.删.改)!) 1. 插入数据 * INTERT INTO 表名(列名1,列名2, ...) VALUES(列值1 ...

  2. 在oracle中游标的操作,Oracle中的游标和函数详解

    Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构:可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理. 游标并不是一个数据库对象,只是存留在内存中. 操 ...

  3. oracle中的open,Oracle中常用SQL操作

    学习sql有一段时间了,发现在我建了一个用来测试的表(没有建索引)中出现了许多的重复记录.后来总结了一些删除重复记录的方法,在Oracle中,可以通过唯一rowid实现删除重复记录:还可以建临时表来实 ...

  4. Oracle中字符操作函数实例

    --连接函数 select concat('hello','宋健') from dual; --左端大写 select initcap('helloworld') from dual; --在字符串中 ...

  5. oracle中创建游标,oracle 存储过程创建游标

    Oracle与Sql Server差异点详解 1.create函数或存储过程异同点 Oracle 创建函数或存储过程一般是 create or replace -- SQL SERVER 则是在创建之 ...

  6. 在Oracle中使用脏读,ORACLE 事务处理

    ORACLE事务整理: 1.为什么要有事务的存在? 对数据库的访问是一个多用户且存在高并发的操作,如多用户在某一时间点上对同一条数据实行更新操作,导致数据严重混乱.不一致.破坏了数据的完整和安全性. ...

  7. oracle中常见索引,Oracle中的索引详解(整理)

    一. ROWID的概念 存储了row在数据文件中的具体位置:64位 编码的数据,A-Z, a-z, 0-9, +, 和 /, row在数据块中的存储方式 SELECT ROWID, last_name ...

  8. oracle中using用法,Oracle中Using用法

    Oracle中Using用法 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数 ...

  9. oracle中判断空,Oracle中判断空游标的方法

    1.声明包 create or replace package TAL_TEST is -- Author : ADMINISTRATOR -- Created : 2012/12/9 15:15:3 ...

最新文章

  1. Google C++命名规范
  2. 害怕抑郁症?该系统通过日常交流就能判断你是否有病
  3. FireFox火狐浏览器与IE兼容问题 - 透明滤镜 DIV滚动条
  4. 全球与中国抗脑啡肽酶抗体市场发展规模及前景战略建议报2022
  5. Access数据库查询练习专用数据库 -手机号码归属地Access数据库_MobileDB(10万条记录)...
  6. 通过Windows API 创建窗口的过程理解windows消息机制
  7. C语言学习,关于fflush 和setvbuf
  8. ASP.NET MVC3 Action Filters详解(一)
  9. sqlserver高可用方案_PowerJob 的自实现高可用方案,妙妙妙
  10. 用excel做logistic回归分析_利用SPSS进行Logistic回归分析
  11. 2014省赛----神奇算式(填空)
  12. 第十五周 内部排序一(2)验证交换排序
  13. 你可能不知道微软悄悄关闭Win10分页显示程序的Sets功能
  14. 2022-04-14每日刷题打卡
  15. Web安全之:WebShell的获取与查杀
  16. 【青春记忆】叹!雪……
  17. 应用“真心话大冒险”项目总结
  18. juju debug hacks (by quqi99)
  19. 互联网金融系列-支付清算体系介绍-上
  20. 使用YOLOV7训练BDD100K数据集(数据格式转化+训练全流程)

热门文章

  1. fileno函数与ftruncate函数
  2. 关于HDC GetDC ReleaseDC
  3. 帕尔默文化语言学理论的构建思路
  4. Flutter 返回按钮的监听
  5. mysql的cell_这篇发生Cell的数据库到底特殊在哪里?
  6. Java word 转 pdf jacob方法
  7. 关于指针数组与数组指针详解(知识点全面)
  8. 分段表rowid_Oracle表的Rowid字段
  9. uni-app view组件基本使用
  10. Virtualbox Ubuntu 输入法