`

Oracle语句重启动原理

阅读更多

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 SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    最近几年,他专注于研究Oracle内部原理以及解决性能问题。他的博客主页是 kerryosborne.oracle-guy.com。  ROBYN SANDS 思科公司的软件工程师,为思科的客户设计开发嵌入式Oracle数据库产品。从1996年开始使用...

    强烈推荐 Oracle 体系结构(高清完整中文版)

    ### Oracle 体系结构详解 #### 一、Oracle 基本体系结构概览 Oracle 数据库的体系结构设计得非常复杂且精妙,它能够高效地...这些知识点对于理解 Oracle 数据库的工作原理至关重要,也是进行数据库管理和优化的基础。

    oracle的ocp培训ppt(DBA自学必备)

    在052、053、071这三套PPT中,首先会介绍Oracle数据库的基础概念,包括Oracle的体系结构、数据存储原理、实例与服务的区别、表空间和数据文件的管理等。理解这些基础内容是成为合格DBA的第一步。 二、SQL语言深入 ...

    OracleDBA培训教程.docx

    综上所述,Oracle DBA培训教程不仅涵盖了Oracle的安装和基本配置方法,还深入介绍了Oracle数据库管理系统的架构原理,这对于理解Oracle的工作机制以及如何高效地管理和维护Oracle数据库至关重要。

    OracleGoldenGate在Windows平台的双向数据传输配置及其测试

    1. **GoldenGate技术原理**:GoldenGate通过捕获源数据库的改变日志(如Oracle的redo log),将其转化为中间格式,然后将这些变化传输到目标数据库,再应用到目标数据库,实现数据复制。这种方式是非侵入性的,不会...

    oracle&&mysql;多环境配置(SpringBoot)

    首先,我们要理解SpringBoot的配置原理。SpringBoot的核心在于自动化配置,它通过`application.properties`或`application.yml`文件来读取并应用配置。在处理多环境配置时,我们可以创建不同环境的配置文件,如`...

    oracle10g学习课件

    - 优化器:Oracle如何选择执行计划,理解成本基础优化器的工作原理。 - SQL调优:使用EXPLAIN PLAN分析查询,优化SQL性能。 - 物理结构优化:通过分区、索引、表重组织等提升数据访问速度。 8. **数据库维护** ...

    Oracle从入门到精通

    ### Oracle从入门到精通 #### 一、SQL基础 ##### 1.1 基本概念 - **Oracle**:一款广泛使用的商业关系型数据库管理系统。 - **SQL**(Structured Query Language):用于管理和处理Oracle数据库中的数据的标准语言...

    oracle 学习笔记

    #### 三、启动Oracle数据库 - **3.1 授予权限**:为用户授予必要的权限,以便其能够访问数据库。 - **3.2 口令文件认证**:通过口令文件对数据库管理员进行身份验证。 - **3.3 Dba认证方式**:使用数据库管理员身份...

    异构数据同步,阿里开源datax

    同时,它还具备数据校验、错误处理和重试机制,确保数据的一致性和完整性。 四、配置与使用 配置DataX任务主要涉及两部分:编写JSON配置文件和运行DataX程序。在描述中提到的`xx2xx_DEMO.json`是一个示例配置文件...

    php网络开发完全手册

    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部署使用手册.zip

    Otter由阿里巴巴开源,它以数据库的binlog(MySQL)或redo log(Oracle)为切入点,通过解析这些日志文件,捕捉到数据库的增删改查操作,进而将这些变更实时同步到目标数据库。这种基于日志的同步方式确保了数据的...

    1000道 互联网Java工程师面试题 485页_PDF密码解除.pdf

    - **分页插件原理:**通过拦截StatementHandler,对SQL语句进行拦截,并修改SQL语句实现分页功能。 **11. Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?** - **结果封装:**MyBatis通过`...

    DB2使用经验积累

    - **类似decode的转码操作**:在DB2中,可以通过`CASE WHEN`语句实现类似Oracle `DECODE`函数的功能。 - **类似charindex查找字符在字串中的位置**:DB2提供了`INSTR`函数来查找子字符串的位置。 - **类似datedif...

    datax-python3.rar

    - 打印语句:Python 2中的`print`是语句,而在Python 3中,`print`被转换为了一个函数。 - 字符串处理:Python 3中的字符串默认为Unicode,而Python 2则区分str和unicode类型。 - 异常处理:Python 3中异常处理的...

    java程序设计实践教程

    - 访问Oracle官网或其他可信源下载适合当前操作系统的SDK版本。 - 按照安装向导完成SDK的安装。 - **设置环境变量:** - 在系统环境中添加`JAVA_HOME`变量,并指向SDK安装目录。 - 配置`PATH`变量,加入`JAVA_...

    Java面试宝典

    - Oracle数据库提供了一个名为`EXPLAIN PLAN`的工具,用于分析SQL语句的执行计划。 6. **数据字典** - 数据字典是Oracle数据库中的一个特殊类型的表,用于存储关于数据库的所有信息。 7. **PL/SQL** - PL/SQL...

    Java语言+基于SSM钢材出入库管理系统(毕业设计、课程设计使用) .zip

    3. **MyBatis框架**:MyBatis是一个持久层框架,它允许开发者编写SQL语句并将其与Java代码直接绑定,避免了传统的JDBC代码的繁琐。在本系统中,MyBatis用来操作数据库,如钢材的增删改查,库存的统计等,通过Mapper...

    2011百度笔试题

    Oracle中冷启动与热启动的区别 - **冷启动**:数据库关闭后再重新启动。 - **热启动**:在数据库运行时进行恢复操作。 #### 16. 存储过程的概念与优缺点 - **概念**:一组预编译的SQL语句和控制流语句的集合。 -...

Global site tag (gtag.js) - Google Analytics