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

  • 相关阅读:
    Dynamically allocated memory 动态分配内存【malloc】Memory leaks 内存泄漏
    const pointers
    heap是堆,stack是栈
    Java中使用Cookie
    Postman注册、登录、导出、导入
    HttpServletRequest get post 入参
    判断设置的时间是否大于当前时间
    JS回车登录
    一个普通的Ajax
    Java工具类
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330711.html
Copyright © 2011-2022 走看看