当我们发出一条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块里的数据就可以被其它事务所覆盖。
分享到:
相关推荐
本文将从DML语句与undo的关系入手,深入探讨undo在Oracle数据库中的作用及管理方式。 #### 二、DML语句与undo 在执行DML(数据操纵语言)语句时,Oracle数据库会自动记录更改前的数据,以便于在需要时进行恢复或...
首先,数据操纵语言(DML)包括INSERT、UPDATE、DELETE和MERGE等SQL语句,它们在执行时会触发Undo的生成。DML操作总是作为事务的一部分进行,可以使用ROLLBACK命令进行回退,或者使用COMMIT命令提交。Undo数据就是在...
Oracle_Undo与Redo的通俗 Oracle中的Undo和Redo是两个非常重要的概念,它们都是Oracle数据库中事务管理和恢复机制的关键组件。Undo和Redo都是为了确保数据库的一致性和可靠性。 什么是REDO? REDO记录transaction...
Undo的常用查询语句可以用来检查Undo表空间使用情况、查找特定事务的Undo信息等,例如: - SELECT * FROM V$UNDOSTAT; - SELECT * FROM V$SESSION_UNDO WHERE SID = &sid; 综上所述,Oracle Undo是数据库管理的核心...
当发生误删、误增、误改时,它可以帮助我们从binlog中快速定位到误操作的重做语句(redo sql),同时推理出回滚语句(undo sql)。此外,它还可以结合[mysqld]的init-connect参数做mysql 8.0的数据库审计。 一. 对dml...
压缩包内的“批量更新删除插入SOURCEDATA.dml_task.txt”文件很可能是详细记录了这些操作的脚本或日志,包括如何分批、每批的大小、具体执行的DML语句等信息。分析这个文件可以深入了解批量处理的具体实现方式和优化...
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-...
当用户执行DML语句(INSERT, UPDATE, DELETE)时,这些更改首先被记录在撤销日志中。撤销日志文件通常以REDO01.LOG、REDO02.LOG、REDO03.LOG等命名,并存储在数据库的数据文件路径下,如E:\APP\ADMINISTRATOR\...
- **数据操纵语言 (DML)**: DML 是指用于插入、更新、删除或合并表中数据的标准 SQL 语句。具体包括 INSERT、UPDATE、DELETE 和 MERGE 命令。 - **DML与事务**: DML 总是作为事务的一部分执行。事务可以被回滚(使用...
8. DML操作日志和追踪:“数据库中DML操作日志,跟踪与追溯信息.sql”提供对数据修改操作的记录和追踪,对于故障排查和审计至关重要。 9. 内存占用监控:“查询出数据库占用大量内存的SQL.sql”用于找出消耗内存...
`drop`语句不仅删除表中的数据,还会删除表的结构以及与之关联的所有对象,如约束、触发器和索引等。这也是一种DDL操作。 - **特点**: - 执行速度通常最快。 - 彻底删除表及其所有依赖项。 - 不支持事务处理,...
它可以对在线binlog与离线binlog进行挖掘分析,在设定过滤条件后便可以进行精确过滤,从而得到我们所期望的redo sql重做语句与undo sql回滚语句,当发生误增、误删、误改dml操作时,就能快速把业务系统数据恢复至...
Flashback Query 的使用方式有两种:一种是使用 SQL 语句的 AS OF 子句,另一种是使用 DBMS_FLASHBACK 包。通过 AS OF 子句,用户可以指定时间点或 SCN 来检索需要的数据,例如,SELECT * FROM table_name AS OF ...
INSERT、UPDATE和DELETE等DML语句处理涉及解析、执行和锁定机制。DML操作的数据变更首先写入重做日志缓冲区,然后由DBWR进程写入数据文件。同时,UNDO段用于存储事务的旧值,以支持回滚操作。 **日志与检查点** ...
在并行 DML 中,Oracle 可以使用多个并行执行服务器来执行 DML 操作,多个会话同时执行,每个会话(并发进程)都有自己的 UNDO 段,都独立是一个事务。 启用并行 DML 需要显示的启用,例如: SQL> ALTER SESSION ...
在实际操作中,当用户执行UPDATE、INSERT或DELETE等DML语句时,Oracle会先在内存的数据库缓冲区缓存(Database Buffer Cache)中记录修改,同时在回滚段中保存数据的旧值。如果事务回滚,Oracle会查找对应的回滚信息...
1. 执行DML语句,获取必要的锁,并在缓冲区中进行数据修改。 2. 当提交时,服务器进程将提交记录和当前系统改变号(SCN)写入重做日志缓冲区。 3. LGWR进程随后将重做日志缓冲区的内容写入重做日志文件,并通知用户...
- 在执行更新等DML操作后,可以通过`SELECT VERSIONS_XID, ... FROM table_name VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE;`来获取事务的XID(事务标识)。 - **查询事务的详细信息**: - 使用`SELECT ...
UNDO表空间是Oracle特有的,它用于存储事务中DML语句的undo信息,即数据在被修改前的状态。在回滚事务、实例恢复以及一致性读取时,undo信息起着至关重要的作用。Oracle的SELECT语句通过使用undo信息实现了无锁一致...
1. **MySQL基础**:包括但不限于数据类型(如INT、VARCHAR、DATE等)、DML语句(INSERT、UPDATE、DELETE)、DDL语句(CREATE TABLE、ALTER TABLE)、DCL语句(GRANT、REVOKE)以及数据库的基本操作。 2. **SQL查询...