`
MyDicta
  • 浏览: 19225 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DML 语句与undo

阅读更多

 

  当我们发出一条DML,(比如 update t set col1='A' where col1='B') 语句时,

  其执行过程大概可以如下概括: 

 1: 在SGA 内存的share pool 里寻找相同的解析计划,找到就直接重用;如果没有,则生成新的执行计划。(所谓 解析计划简单理解就是针对SQL语句所引用的表进行表数据分布,表数据量以及列上的索引等相关信息的搜集)

 2: 假设根据执行计划,得出col1='B' 的记录存放在10号数据文件的54号数据块里。

 3: 服务器进程在buffer cache 里找一个可用undo数据块,如果没有发现,则到undo表空间里找一个可用的undo块,并调入buffer cache。(找不到就尝试获取其他undo segment里的 expired 状态的 extends; 如果仍然没有得到,undo表空间里的数据文件启用了自动扩展,则数据文件进行自动扩展;如果不能自动扩展,就尝试使用其它undo segment里的 InActive 状态的extends,如果以上步骤均无法获得可用空间,则报错啦,undo表空间不足!)  假设获得的undo数据块号为24,位于11号undo数据文件里。

4: 将改变前的值,也就是B放入11号undo数据块。

5: 由于undo数据块发生了变化,于是产生重做记录,假设重做记录号为120。

  行号  事务id    file#  block#  row  colum value

  120    T1      24       11        10    col1     B

6: 在buffer cache 时找到54号数据块。 如果没有发现,则从10号数据文件里调入。

7:将改变后的值,也就是A放入54号数据块。

8: 由于数据块发生变化,于是产生重做记录,假设重做记录号为121。

  行号  事务id    file#  block#  row  colum value

  121    T1      10       54        10    col1     A

9: 控制权返回给用户,如果在SQL*Plus里执行DML,则表现为光标返回。

10: 当用户发出commit命令时,触发LGWR进程,将120与121这两个重做记录写入联机日志文件,并将54号

数据块和11号数据块头部所记录的事务状态标记设置为已提交。然后控制权返回给用户,如果在SQL*Plus里执行DML,则表现为光标返回。

11: 这个时候,54号数据块以及11号undo块并不一定被DBWn写入数据文件。只有在脏数据块的数量达到一定程度才会被写入。

  

 

注意: 事务只要被提交或回滚,那么事务所使用的undo块数据就可以被覆盖。对于上面的例子来说,当第10步,用户发出commit命令后,11号undo块里的数据就可以被其它事务所覆盖。

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    管理undo表空间全面分析详解

    本文将从DML语句与undo的关系入手,深入探讨undo在Oracle数据库中的作用及管理方式。 #### 二、DML语句与undo 在执行DML(数据操纵语言)语句时,Oracle数据库会自动记录更改前的数据,以便于在需要时进行恢复或...

    oracle undo详解

    首先,数据操纵语言(DML)包括INSERT、UPDATE、DELETE和MERGE等SQL语句,它们在执行时会触发Undo的生成。DML操作总是作为事务的一部分进行,可以使用ROLLBACK命令进行回退,或者使用COMMIT命令提交。Undo数据就是在...

    Oracle_Undo与Redo的通俗

    Oracle_Undo与Redo的通俗 Oracle中的Undo和Redo是两个非常重要的概念,它们都是Oracle数据库中事务管理和恢复机制的关键组件。Undo和Redo都是为了确保数据库的一致性和可靠性。 什么是REDO? REDO记录transaction...

    Oracle 面试宝典-undo.docx

    Undo的常用查询语句可以用来检查Undo表空间使用情况、查找特定事务的Undo信息等,例如: - SELECT * FROM V$UNDOSTAT; - SELECT * FROM V$SESSION_UNDO WHERE SID = &sid; 综上所述,Oracle Undo是数据库管理的核心...

    MySQL Binlog Digger 4.28 + Mysql Binlog分析 + 数据库

    当发生误删、误增、误改时,它可以帮助我们从binlog中快速定位到误操作的重做语句(redo sql),同时推理出回滚语句(undo sql)。此外,它还可以结合[mysqld]的init-connect参数做mysql 8.0的数据库审计。 ​一. 对dml...

    批量更新删除插入SOURCEDATA.dml_task.zip_分批处理

    压缩包内的“批量更新删除插入SOURCEDATA.dml_task.txt”文件很可能是详细记录了这些操作的脚本或日志,包括如何分批、每批的大小、具体执行的DML语句等信息。分析这个文件可以深入了解批量处理的具体实现方式和优化...

    OCA高级班视频.zip

    OCA-1-DML语句 OCA-1-SELECT语句 OCA-1-集合运算 OCA-2-ASM实例管理 OCA-2-Oracle软件安装 OCA-2-Oracle体系结构- OCA-2-备份恢复的概念 OCA-2-存储结构管理 OCA-2-监听器配置-11-0328- OCA-2-数据的迁移 OCA-2-...

    undo&redo;.docx

    当用户执行DML语句(INSERT, UPDATE, DELETE)时,这些更改首先被记录在撤销日志中。撤销日志文件通常以REDO01.LOG、REDO02.LOG、REDO03.LOG等命名,并存储在数据库的数据文件路径下,如E:\APP\ADMINISTRATOR\...

    Less09_Undo_TB3.pdf

    - **数据操纵语言 (DML)**: DML 是指用于插入、更新、删除或合并表中数据的标准 SQL 语句。具体包括 INSERT、UPDATE、DELETE 和 MERGE 命令。 - **DML与事务**: DML 总是作为事务的一部分执行。事务可以被回滚(使用...

    多年积累的oracle监控语句,没有最全只有更全

    8. DML操作日志和追踪:“数据库中DML操作日志,跟踪与追溯信息.sql”提供对数据修改操作的记录和追踪,对于故障排查和审计至关重要。 9. 内存占用监控:“查询出数据库占用大量内存的SQL.sql”用于找出消耗内存...

    delete,truncate和drop的区别

    `drop`语句不仅删除表中的数据,还会删除表的结构以及与之关联的所有对象,如约束、触发器和索引等。这也是一种DDL操作。 - **特点**: - 执行速度通常最快。 - 彻底删除表及其所有依赖项。 - 不支持事务处理,...

    MySQL Binlog Digger 4.17.zip

    它可以对在线binlog与离线binlog进行挖掘分析,在设定过滤条件后便可以进行精确过滤,从而得到我们所期望的redo sql重做语句与undo sql回滚语句,当发生误增、误删、误改dml操作时,就能快速把业务系统数据恢复至...

    oracle 闪回查询

    Flashback Query 的使用方式有两种:一种是使用 SQL 语句的 AS OF 子句,另一种是使用 DBMS_FLASHBACK 包。通过 AS OF 子句,用户可以指定时间点或 SCN 来检索需要的数据,例如,SELECT * FROM table_name AS OF ...

    oracle 培训笔记

    INSERT、UPDATE和DELETE等DML语句处理涉及解析、执行和锁定机制。DML操作的数据变更首先写入重做日志缓冲区,然后由DBWR进程写入数据文件。同时,UNDO段用于存储事务的旧值,以支持回滚操作。 **日志与检查点** ...

    oracle的Parallel_并行技术案例详解

    在并行 DML 中,Oracle 可以使用多个并行执行服务器来执行 DML 操作,多个会话同时执行,每个会话(并发进程)都有自己的 UNDO 段,都独立是一个事务。 启用并行 DML 需要显示的启用,例如: SQL> ALTER SESSION ...

    第4课 回滚.pdf

    在实际操作中,当用户执行UPDATE、INSERT或DELETE等DML语句时,Oracle会先在内存的数据库缓冲区缓存(Database Buffer Cache)中记录修改,同时在回滚段中保存数据的旧值。如果事务回滚,Oracle会查找对应的回滚信息...

    Oracle事务与锁定

    1. 执行DML语句,获取必要的锁,并在缓冲区中进行数据修改。 2. 当提交时,服务器进程将提交记录和当前系统改变号(SCN)写入重做日志缓冲区。 3. LGWR进程随后将重做日志缓冲区的内容写入重做日志文件,并通知用户...

    闪回技术、备份恢复与优化.txt

    - 在执行更新等DML操作后,可以通过`SELECT VERSIONS_XID, ... FROM table_name VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE;`来获取事务的XID(事务标识)。 - **查询事务的详细信息**: - 使用`SELECT ...

    Oracle数据库自带表空间的详细说明

    UNDO表空间是Oracle特有的,它用于存储事务中DML语句的undo信息,即数据在被修改前的状态。在回滚事务、实例恢复以及一致性读取时,undo信息起着至关重要的作用。Oracle的SELECT语句通过使用undo信息实现了无锁一致...

    mysql精选大厂面试题

    1. **MySQL基础**:包括但不限于数据类型(如INT、VARCHAR、DATE等)、DML语句(INSERT、UPDATE、DELETE)、DDL语句(CREATE TABLE、ALTER TABLE)、DCL语句(GRANT、REVOKE)以及数据库的基本操作。 2. **SQL查询...

Global site tag (gtag.js) - Google Analytics