Oracle中更新语句的重启动
考虑一个简单的update语句:
update test set x=1 where y=1;
它是分为两步:
1. 根据where条件找出表中满足更新条件的数据行;
2. 更新步骤1中所找出的数据行的x值。
假如test表很大,update要执行好几分钟,而且在步骤1期间有人将某一行的y值改为2并提交了,那么在步骤2中,这个y=2的行是否还会被更新x列呢?
这种情况下,Oracle会选择“重启动”更新。
其实,Oracle在执行DML语句时,会用到两种不同的方式去读取数据块:
1. 一致读:在“找到”需要修改的数据行时,会采用consistent read
2. 当前读:在“获取”数据块来实际更新数据行时,会采用current read
Oracle就是通过这样来判断是否需要重启动的。
具体到上面的例子中,首先Oracle会利用一致读找到所有y=1的数据行,因此就算读取期间有别的会话修改了某一行的y值(如从y=1变为y=2),Oracle也会利用undo数据将该行的y列恢复到读取的那个时刻的值(即y=1),所以这一行还是会被读取。然后,当要实际更新这一行的时候,Oracle会利用当前读去获取数据块的最新版本,由于被提交过了,所以读到的y值是2,与之前一致读中的y=1不符。所以Oracle就知道了需要“重启动”这个update操作。
Oracle重启动的流程:
1. 回滚之前的修改操作
2. 进入select for update模式,锁定需要修改的行
3. 对锁定的行进行修改操作
(这个流程是指在Oracle默认的READ COMMITED隔离级别下,如果是SERIALIZABLE模式,则会出现ORA-08177错误)
分享到:
相关推荐
Linux 下 Oracle 启动和监听 Oracle 数据库是重量级的,其管理非常复杂,将其在 Linux 平台上的启动和关闭步骤整理如下: 一、安装和配置 Oracle 在 Linux 平台上安装 Oracle 之后,需要创建 Oracle 系统用户,并...
Toad for Oracle是一款强大的Oracle数据库管理工具,深受数据库管理员(DBAs)和开发人员的喜爱。本教程将向您介绍如何使用Toad for Oracle进行高效、便捷的数据库操作,尤其适用于对中国语言界面有需求的用户。 一...
不得已决定重装Oracle,发现卸载Oralce还是比较麻烦的,需要不少的步骤才能完全卸载,下面总结了一些步骤: 1.停止所有与ORACLE相关的服务。 2. 使用OUI(Oracle Universal Installer)卸载Oracle软件。 “开始”->...
她是Oracle ACE,也是OakTable(Oracle社区中著名的“Oracle科学家”的非正式组织)的成员,经常在技术会议上演讲。她的著作还包括 Expert Oracle Practices和Beginning Oracle SQL,博客主页是karenmorton....
在项目开发中,特别是在大数据管理和分析的场景下,定时任务经常被用于更新数据、生成统计报告等。Oracle的Job定时器通过DBMS_SCHEDULER或旧的DBMS_JOB包来实现。 在Oracle中,创建一个Job主要涉及以下几个步骤: ...
2. **优化应用程序**:检查并优化应用程序中的SQL语句,减少不必要的重编译操作。例如,可以使用绑定变量来减少SQL语句的数量,从而降低共享池的碎片化程度。 3. **已知的Oracle BUG**:确保所使用的Oracle数据库...
5. 大池:SGA 中的可选内存区,对于诸如 Oracle 备份和恢复等大型命令的 SQL 语句,利用大池就可以防止这些 SQL 大型命令把条目重写入 SQL 共享池中,从而减少再装入到库缓存区中的语句数量,防止与其它应用程序对库...
Oracle数据库技术是IT领域中至关重要的一部分,尤其对于大型企业数据管理而言,Oracle以其高效、稳定和安全性享誉全球。Oracle数据库不仅提供了丰富的功能,还支持多种操作系统和硬件平台,使其成为许多企业的首选...
Oracle体系架构中的后台进程也扮演着重要角色,如DBWR(Database Writer)负责将缓存中的更改写入数据文件,LGWR(Log Writer)将重作日志缓冲区的内容写入重作日志文件,SMON(System Monitor)执行数据库的自动...
Oracle建议重定义@符号或使用\符号。为了无密码访问,确保在集群节点之间实现了"oracle"用户的用户等价性,且rcp和rlogin不需要密码。另外,确认/oracle目录的权限和所有权,以及/usr/lpp/csd/bin/machines.lst文件...
《Oracle数据库维护手册》是为相关技术人员提供的一份详尽指南,涵盖了Oracle数据库日常运行维护的各个方面。手册的目的是帮助运维人员高效、准确地管理Oracle数据库系统,确保其稳定、安全运行。 2.1 数据库启动与...
- 在Oracle数据库监听中,Java程序会启动一个ServerSocket,等待数据库通过Socket连接并发送数据变更信息。一旦接收到消息,Java方法可以解析这些信息,并执行相应的操作,如更新界面、处理业务逻辑等。 4. **具体...
- **UPDATE**:更新表中的数据。 - **MERGE**:合并两个表的数据。 - **事务**:确保一系列操作作为一个整体成功完成或全部回滚。 #### 三、表的创建与管理 - **表**:基本的存储单位,由行和列组成。 - **方案**:...
实例是数据库的核心,启动实例前提是启动Oracle数据库。 三、Oracle文件 Oracle文件包括数据文件、重作日志文件、控制文件、参数文件、口令验证文件和存档重做日志文件。每种文件都有其特点和作用。 四、数据库...
- `start file_name`:启动并执行指定文件中的脚本。 - `@ file_name`:同上,也用来执行SQL脚本。 5. **编辑输入**: 使用`edit`命令可以打开内置的文本编辑器,对当前的输入进行编辑。 6. **重运行上次SQL...
- **Library Cache**:减少 SQL 语句的重解析。 - **Data Dictionary Cache**:加速 SQL 语句的解析过程。 - **管理机制**:使用 LRU (Least Recently Used) 算法管理 Shared Pool 的内存空间。 - **LRU 算法**:...
重作日志是 Oracle 数据库的重要组成部分,记录了所有对数据库进行的DML(插入、更新、删除)操作,以及DDL(数据定义语言)和数据库恢复所需的信息。LogMiner 的主要功能包括: 1. **跟踪数据库变化**:无需影响...
在052、053、071这三套PPT中,首先会介绍Oracle数据库的基础概念,包括Oracle的体系结构、数据存储原理、实例与服务的区别、表空间和数据文件的管理等。理解这些基础内容是成为合格DBA的第一步。 二、SQL语言深入 ...