update test set x=1 where y=1;
delete from test 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错误)
分享到:
相关推荐
最近几年,他专注于研究Oracle内部原理以及解决性能问题。他的博客主页是 kerryosborne.oracle-guy.com。 ROBYN SANDS 思科公司的软件工程师,为思科的客户设计开发嵌入式Oracle数据库产品。从1996年开始使用...
### Oracle 体系结构详解 #### 一、Oracle 基本体系结构概览 Oracle 数据库的体系结构设计得非常复杂且精妙,它能够高效地...这些知识点对于理解 Oracle 数据库的工作原理至关重要,也是进行数据库管理和优化的基础。
在052、053、071这三套PPT中,首先会介绍Oracle数据库的基础概念,包括Oracle的体系结构、数据存储原理、实例与服务的区别、表空间和数据文件的管理等。理解这些基础内容是成为合格DBA的第一步。 二、SQL语言深入 ...
综上所述,Oracle DBA培训教程不仅涵盖了Oracle的安装和基本配置方法,还深入介绍了Oracle数据库管理系统的架构原理,这对于理解Oracle的工作机制以及如何高效地管理和维护Oracle数据库至关重要。
1. **GoldenGate技术原理**:GoldenGate通过捕获源数据库的改变日志(如Oracle的redo log),将其转化为中间格式,然后将这些变化传输到目标数据库,再应用到目标数据库,实现数据复制。这种方式是非侵入性的,不会...
首先,我们要理解SpringBoot的配置原理。SpringBoot的核心在于自动化配置,它通过`application.properties`或`application.yml`文件来读取并应用配置。在处理多环境配置时,我们可以创建不同环境的配置文件,如`...
- 优化器:Oracle如何选择执行计划,理解成本基础优化器的工作原理。 - SQL调优:使用EXPLAIN PLAN分析查询,优化SQL性能。 - 物理结构优化:通过分区、索引、表重组织等提升数据访问速度。 8. **数据库维护** ...
### Oracle从入门到精通 #### 一、SQL基础 ##### 1.1 基本概念 - **Oracle**:一款广泛使用的商业关系型数据库管理系统。 - **SQL**(Structured Query Language):用于管理和处理Oracle数据库中的数据的标准语言...
#### 三、启动Oracle数据库 - **3.1 授予权限**:为用户授予必要的权限,以便其能够访问数据库。 - **3.2 口令文件认证**:通过口令文件对数据库管理员进行身份验证。 - **3.3 Dba认证方式**:使用数据库管理员身份...
同时,它还具备数据校验、错误处理和重试机制,确保数据的一致性和完整性。 四、配置与使用 配置DataX任务主要涉及两部分:编写JSON配置文件和运行DataX程序。在描述中提到的`xx2xx_DEMO.json`是一个示例配置文件...
13.3.2 ORACLE 207 13.3.3 SYBASE 207 13.3.4 DB2 207 13.3.5 SQL Server 207 13.4 SQL语言简介 207 13.5 常见的数据库设计问题 208 13.6 关系型数据库的设计原则 209 13.6.1 第一范式(1NF) 209 13.6.2 第二范式...
Otter由阿里巴巴开源,它以数据库的binlog(MySQL)或redo log(Oracle)为切入点,通过解析这些日志文件,捕捉到数据库的增删改查操作,进而将这些变更实时同步到目标数据库。这种基于日志的同步方式确保了数据的...
- **分页插件原理:**通过拦截StatementHandler,对SQL语句进行拦截,并修改SQL语句实现分页功能。 **11. Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?** - **结果封装:**MyBatis通过`...
- **类似decode的转码操作**:在DB2中,可以通过`CASE WHEN`语句实现类似Oracle `DECODE`函数的功能。 - **类似charindex查找字符在字串中的位置**:DB2提供了`INSTR`函数来查找子字符串的位置。 - **类似datedif...
- 打印语句:Python 2中的`print`是语句,而在Python 3中,`print`被转换为了一个函数。 - 字符串处理:Python 3中的字符串默认为Unicode,而Python 2则区分str和unicode类型。 - 异常处理:Python 3中异常处理的...
- 访问Oracle官网或其他可信源下载适合当前操作系统的SDK版本。 - 按照安装向导完成SDK的安装。 - **设置环境变量:** - 在系统环境中添加`JAVA_HOME`变量,并指向SDK安装目录。 - 配置`PATH`变量,加入`JAVA_...
- Oracle数据库提供了一个名为`EXPLAIN PLAN`的工具,用于分析SQL语句的执行计划。 6. **数据字典** - 数据字典是Oracle数据库中的一个特殊类型的表,用于存储关于数据库的所有信息。 7. **PL/SQL** - PL/SQL...
3. **MyBatis框架**:MyBatis是一个持久层框架,它允许开发者编写SQL语句并将其与Java代码直接绑定,避免了传统的JDBC代码的繁琐。在本系统中,MyBatis用来操作数据库,如钢材的增删改查,库存的统计等,通过Mapper...
Oracle中冷启动与热启动的区别 - **冷启动**:数据库关闭后再重新启动。 - **热启动**:在数据库运行时进行恢复操作。 #### 16. 存储过程的概念与优缺点 - **概念**:一组预编译的SQL语句和控制流语句的集合。 -...