数据库检测到死锁后,只会回滚跟死锁有关的某条语句,而不会回滚整个事务。
创建测试环境:
SQL> create table test1(id int,name char(1));
表已创建。
SQL> insert into test1 values(1,'a');
已创建 1 行。
SQL> commit;
提交完成。
SQL> create table test2 as select * from test1;
表已创建。
session1:
SQL> update test1 set name='b' where id=1;
已更新 1 行。
session2:
SQL> update test2 set name='c' where id=1;
已更新 1 行。
再回到session1执行:update test2 set name='d' where id=1;
这时发现session1被阻塞了(session2正在更新id=1这一行)
再回到session2执行:update test1 set name='e' where id=1;
这时session2也被阻塞(session1正在更新id=1这一行)
但是很快,数据库检测到了session1和session2间存在死锁,随机选中一个会话作为牺牲品,例如本例中将session1选作牺牲品:
session1:
SQL> update test2 set name='d' where id=1;
update test2 set name='d' where id=1
*
第 1 行出现错误:
ORA-00060: 等待资源时检测到死锁
这时发现session2仍然处于阻塞状态,为何?
SQL> update test1 set name='e' where id=1;
我们看下session1中:
SQL> select * from test1;
        ID N
---------- -
1 b 看到了吧,其实session1中对test1的修改仍然保留着,也就是说这个sql语句的更新没有回滚,而回滚的只是跟死锁有关的那条sql。 所以,所以,阻塞还在继续......

Oracle死锁只会回滚跟死锁有关的那条SQL,而不会回滚整个事务的更多相关文章

  1. 已知要闪回的大致时间使用基于as of scn的闪回查询

    基本判断出要恢复误操作的dml的时间可以使用如下的方法进行数据的恢复: example: 一.创建test表 -------create table flashback_asof------ crea ...

  2. Oracle是如何工作的?实例是如何响应用户请求?一条SQL的执行过程~

    Oracle 是如何工作的? Select id,name from t order by id ; – SQL 解析(查看语法是否错误,如果没有错误,分析语意,执行此语句的权限) – 执行计划(OR ...

  3. mysql和oracle的区别(功能性能、选择、使用它们时的sql等对比)

    一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取.共享与锁定. mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他se ...

  4. 你的 SQL 还在回表查询吗?快给它安排覆盖索引

    什么是回表查询 小伙伴们可以先看这篇文章了解下什么是聚集索引和辅助索引:Are You OK?主键.聚集索引.辅助索引,简单回顾下,聚集索引的叶子节点包含完整的行数据,而非聚集索引的叶子节点存储的是每 ...

  5. 【转】Oracle中如何用一条SQL快速生成10万条测试数据

    转自http://blog.csdn.net/welken/article/details/4971887   做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入, ...

  6. Oracle中nvl()、instr()、及执行多条sql事务操作

    Oracle的Nvl函数 nvl( ) 函数 从两个表达式返回一个非null 值. 语法 NVL(eExpression1, eExpression2) 参数 eExpression1, eExpre ...

  7. oracle锁表查询,资源占用,连接会话,低效SQL等性能检查

    查询oracle用户名,机器名,锁表对象 select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user ...

  8. 如何在Oracle中一次执行多条sql语句 (.net C#)

    关键是不能换行,要加上begin ...sql... end;     每个SQL用:隔开,end后面必须加: 以下是拷贝于:http://www.cnblogs.com/teamleader/arc ...

  9. Oracle一条SQL语句时快时慢

    今天碰到一个非常奇怪的问题问题,一条SQL语句在PL/SQL developer中很慢,需要9s,问题SQL: SELECT * FROM GG_function_location f WHERE f ...

随机推荐

  1. 【DB】HBase的基本概念

    一 Hbase是个啥东东?  在说Hase是个啥家伙之前,首先我们来看看两个概念.面向行存储和面向列存储.面向行存储.我相信大伙儿应该都清楚,我们熟悉的RDBMS就是此种类型的.面向行存储的数据库主要 ...

  2. jQuery免费资料

     JQvery免豆.pdf       jQuery实战之仿flash跳动的按钮效果[源码]http://down.51cto.com/data/188600JQuery 1.4.2 手册简体中文版h ...

  3. Const和readonly这间的区别和相同处

    相同:  const和readonly都是用来修饰常量的 不同: const 在申明之前就要对它初始化,readonly修饰的常量则可以到构造函数中初始化 const注重的是效率但是readonly注 ...

  4. VS的一部分快捷键

    快捷键                                         功能CTRL + SHIFT + B                        生成解决方案CTRL + F ...

  5. 基于DOM的XSS注入漏洞简单解析

    基于DOM的XSS注入漏洞简单解析http://automationqa.com/forum.php?mod=viewthread&tid=2956&fromuid=21

  6. AWS 命令行界面 + Python 的 AWS 开发工具包 (Boto3)

    安装AWS CLI $ pip install awscli 安装Boto3 $ pip install boto3 设置AWS CLI $ aws configure AWS Access Key ...

  7. jedis应用实例

    最近将redis整合到项目中,将redis作为cache使用,未来进一步作为消息推送使用.我通过jedis和spring配置实现操作redis. spring配置 <!-- redis配置 -- ...

  8. FTP上传下载

    使用的是apache开源包commons-net-3.3.jar所提供的FTPClient FTP服务器使用Quick Easy FTP Server 4.0.0(服务器ip为192.168.31.1 ...

  9. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  10. (转)MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet

    1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2).下载Tomcat 官网:http://tomcat.apache.org/ 我们选择8.0: http://tomca ...