• 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语句。

  • 相关阅读:
    第五周 day5 python学习笔记
    第四周 day4 python学习笔记
    第三周 day3 python学习笔记
    常用屏幕分辨率
    学习可以借鉴的大牛们的网站
    jq动态控制样式的一些方法(批量控制样式,带参数控制样式)
    jq实现事件委托
    h5Css新加的一些新的属性
    css布局模型
    task_13
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330711.html
Copyright © 2020-2023  润新知