数据库检测到死锁后,只会回滚跟死锁有关的某条语句,而不会回滚整个事务。
创建测试环境:
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. 【转】GitHub删除一个仓库——2013-08-27 21

    http://xiacijian.blog.163.com/blog/static/849931902012111195041170/ 1.进入要删除的仓库 2.找到 导航栏 Code  NetWor ...

  2. leetcode每日解题思路 221 Maximal Square

    问题描述: 题目链接:221 Maximal Square 问题找解决的是给出一个M*N的矩阵, 只有'1', '0',两种元素: 需要你从中找出 由'1'组成的最大正方形.恩, 就是这样. 我们看到 ...

  3. struts2+ajax

    web网页开发中需要用到struts2来处理action,通过struts2定义后端java类. <action name="loginAction" class=" ...

  4. WPF 自定义路由事件 与 附加路由事件

    为student添加附件事件

  5. c语言,strcpy

    #include <stdio.h> #include <string.h> int main() {  char string[10];  char *str="a ...

  6. Leetcode Python Solution(continue update)

    leetcode python solution 1. two sum (easy) Given an array of integers, return indices of the two num ...

  7. Modelsim仿真tcl脚本与wave.do文件

    Modelsim的仿真,如果一直使用图形界面建工程,编译,仿真,一个个加入观察波形的话,未免复杂了一些,尤其是当工程较大,需要观察的信号较多时,下面贴出一些常用的tcl脚本命令和wave.do常用语法 ...

  8. jQuery 定时局部刷新(setInterval)方法总结

    来自:http://www.jbxue.com/article/8516.html 1.jQuery 定时局部刷新(setInterval),显示时间的代码. <head> <scr ...

  9. js购物时的放大镜效果

    首先需要两张一样的图片,一张大图,一张小图,大图显示,当鼠标移入时,小图上出现一个滑块,可以滑动,大图也跟着显示,大图的显示区域和小图一样,当滑块滑到不同的位置,大图显示不同的区域,当鼠标移出时,滑块 ...

  10. HTML表单元素中disabled的元素的值不会提交到服务器

    一.在HTMl页面的form表单中对disabled的元素的属性和值不会提交到服务器 实例1: <form action="#"> <input type=&qu ...