zoukankan      html  css  js  c++  java
  • Dead lock

    死锁是由于两个或多个session互相等待而造成的,死锁不需要DBA干预,ORACLE会舍弃第一个SESSION中等待的SQL。当用户接收到ORA-00060 死锁警告的时候,用户要么选择rollback,要么选择commit。如果选择rollback,会回滚所有的事物,如果选择commit,这个时候不会commit整个事物,而只会commit被ORACLE舍弃的SQL语句之前的SQL.

    测试表以及测试数据如下:

    SQL> select * from test;
            ID NAME
    ---------- ----------
             6 bingbing
             2 robinson
             2 tttt
             3 david
             4 jack
             5 lucy
             1 test
    已选择7行。
    session 1中:
    SQL> update test set name='luoluo' where id=6;
    已更新 1 行。
    session 2中:
    SQL> update test set name='luobingsen' where id=1;
    已更新 1 行。
    session 1中
    SQL> update test set name='lbs' where id=1;//当发生死锁了,ORACLE会将这句话舍弃,注意不是rollback整个事物
    这个时候 session1等待 session2 提交,因为session2中id=1的行有一个行排它锁
    session 2中
    SQL> update test set name='sensen' where id=6;
    这个时候 session2等待 session1 提交,因为session1中id=6的行有一个行排它锁
    session 1中
    SQL> update test set name='lbs' where id=1;
    update test set name='lbs' where id=1
           *
    第 1 行出现错误:
    ORA-00060: 等待资源时检测到死锁
    SQL> commit;
    提交完成。
    SQL> select * from test;
            ID NAME
    ---------- ----------
             6 luoluo
             2 robinson
             2 tttt
             3 david
             4 jack
             5 lucy
             1 test   //这里test没有变成lbs,因为那条SQL 被ORACLES舍弃了

    已选择7行。

    可以看到当ORACLE检测到死锁的时候,会舍弃第一个session中等待的那条SQL语句。

  • 相关阅读:
    AOP编程之cglib动态代理:进阶一
    16-python基础5-文件读写操作
    13-python基础2-条件和循环
    12-python基础1-python概述
    11-linux基础八-正则表达式
    07-linux基础四-系统监控和硬盘分区
    06-linux基础三-文件操作和系统启动流程
    05-linux基础二-用户和权限操作
    04-linux基础一概述和简单命令
    03-网络通信原理
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330711.html
Copyright © 2011-2022 走看看