- 浏览: 91900 次
- 性别:
- 来自: 上海
文章分类
最新评论
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错误)
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错误)
发表评论
-
Android高性能编程(2)--延迟初始化
2015-06-26 16:08 0Android高性能编程(2)--延迟初始化 分 ... -
Android高性能编程(1)--基础篇
2015-06-26 16:07 0Android高性能编程(1)--基础篇 ... -
HttpClient使用详解
2015-06-26 16:05 0Http协议的重要性相信不用我多说了, ... -
android中HttpClient和HttpConnection的区别和应用(收藏)
2015-06-26 16:04 0android中HttpClient和HttpConne ... -
Ehcache 整合Spring 使用页面、对象缓存
2015-06-03 15:38 0Ehcache在很多项目中都出现过,用法也比较 ... -
Ehcache详细解读
2015-06-03 15:21 0Ehcache 是现在最流行的纯Java ... -
Jenkins入门总结
2015-05-29 09:00 0Jenkins入门总结 在网上貌似没有 ... -
JSTL字符串处理函数
2015-05-26 09:34 0转载▼ 近日处理使用到JST ... -
Java构造和解析Json数据的两种方法详解二
2015-03-15 19:43 0在www.json.org上 ... -
Redis学习手册(主从复制)
2015-03-11 17:23 0Redis学习手册(主从复制) Posted on 2 ... -
springMVC工作原理
2015-03-11 17:07 0springMVC工作原理 分类: sprin ... -
JDK 5 concurrent 包简介
2015-03-11 11:15 0JDK 5 concurrent 包简介 分类 ... -
SpringMVC配置JSON、JSP、FreeMark多视图解析器配置
2015-03-11 09:46 0SpringMVC配置JSON、JSP、FreeMark ... -
浅谈jsp、freemarker、velocity区别
2015-03-10 13:54 0以前做web开发页面 ... -
一篇很全面的freemarker教程
2015-03-10 13:50 0一篇很全面的freemarker教程 ... -
SpringMVC Controller 介绍
2015-03-03 18:00 0一、简介 在SpringMVC 中 ... -
maven2中profile的介绍与使用
2015-03-03 12:03 0[转载声明] 转载时必须标注:本文来源 ... -
maven2中snapshot快照库和release发布库的应用
2015-03-03 12:00 0[转载声明] 转载时必须标注:本文来源 ... -
maven中snapshot快照库和release发布库的区别和作用
2015-03-03 11:56 0[转载声明] 转载时必须标注:本文来源于铁木箱子的博 ... -
jvm 垃圾回收机制(网上收藏)
2014-10-14 09:34 0一、相关概念 基本回 ...
相关推荐
oracle手动启动,希望可以减少开机速度慢的问题
### Centos 7.4 配置 Oracle 自启动详解 #### 一、概述 在Centos 7.4系统上配置Oracle数据库自启动是一项重要的管理任务。通过这项配置,可以在服务器重启后自动启动Oracle实例和服务,确保应用程序和服务的连续...
### Linux环境下Oracle数据库重启知识点详解 #### 一、概述 在Linux环境中,Oracle数据库的管理是常见的运维操作之一。为了确保系统的稳定运行,有时需要重启Oracle数据库及其监听器。本文将详细介绍在Linux环境下...
Oracle服务的启动过程是数据库管理员日常运维中的重要环节,它涉及到服务器环境的配置、权限管理以及数据库服务的正确运行。以下是对标题和描述中提到的Oracle服务启动步骤的详细解释: 1. **用telnet以root...
自动启动脚本的创建和使用对于系统管理员来说至关重要,它确保了Oracle数据库服务在系统启动时能自动运行,保证业务的连续性和稳定性。本文将详细讲解Oracle自动启动脚本的原理、创建方法以及如何进行操作。 一、...
Linux 下 Oracle 启动和监听 Oracle 数据库是重量级的,其管理非常复杂,将其在 Linux 平台上的启动和关闭步骤整理如下: 一、安装和配置 Oracle 在 Linux 平台上安装 Oracle 之后,需要创建 Oracle 系统用户,并...
oracle自启动脚本,可自行启动、重启、关闭,方便oracle管理,有需要的可自行下载,亲测实用。
Windows 下 oracle 服务自动启动设置 概述 在 Windows 操作系统中,设置 Oracle 服务自动启动可以确保数据库服务在需要时自动开启,而不需要每次手动启动实例。这篇文章将详细介绍如何设置 Oracle 服务自动启动,...
oracle手动启动服务,点击启动
监听器(Listener)是Oracle数据库中负责监听网络连接请求的组件。在Linux下,你可以通过以下命令来启动或停止监听器: ```bash lsnrctl start lsnrctl stop ``` 启动监听器后,它将开始监听特定的端口,等待...
Oracle 启动过程详解 Oracle 启动过程是 Oracle 数据库的核心组件之一,对于初识 Oracle 的人来说,了解 Oracle 启动过程非常重要。本文将详细解释 Oracle 启动过程的三个步骤:启动数据库到 Nomount 状态、启动...
批处理文件`oracle启动服务.bat`和`oracle关闭服务.bat`通常包含上述命令,它们可以方便地自动化这些操作。例如,启动脚本可能包含以下内容: ```bat @echo off net start OracleServiceSID echo Oracle 服务已启动...
Oracle 服务启动失败问题解决 Oracle 服务启动失败是指 OracleDBConsole[SID] 服务无法启动的问题,这是一个常见的问题,因为 OracleDBConsole[SID] 服务很脆弱,很容易启动不了。解决这个问题需要删除资料档案库,...
1. **Oracle启动过程** Oracle数据库的启动通常分为三个阶段:装载(Mount)、打开(Open)和恢复(Restore)。在Windows环境中,可以通过SQL*Plus或者使用操作系统级别的脚本来进行操作。 - **SQL*Plus启动**:...
每天使用oracle都要去windows服务启动oracle比较麻烦,做了一个自动启动oracle的exe文件
解决oracle假启动bat命令文件,在系统中做成任务计划,在系统启动的时候自动执行命令即可
在Windows 7环境下,快速启动Oracle服务是确保数据库系统正常运行的关键步骤。以下是一份详细的关于“Oracle服务快速启动”的教程,适用于Windows 7操作系统。 1. **Oracle服务概述** Oracle服务是数据库在Windows...
### Oracle监听无法启动问题解析与解决方案 在Oracle数据库管理中,遇到监听器(Listener)无法启动的情况是非常常见的问题之一。监听器是Oracle网络组件的重要部分,主要负责接收客户端的连接请求,并将其转发到...
在Redhat Linux环境中设置Oracle 10g数据库自动启动是一项重要的系统管理任务,这确保了在服务器重启后,Oracle数据库能够自动恢复并提供服务。Oracle 10g是一款广泛使用的数据库管理系统,尤其在企业级应用中,其...