程序是由 Java 执行的,有两、三个线程,同时执行以下的过程:
step1 事务开始
step2 Delete 表 A
step3 给表 A 加独占锁
step4 Delete 表 A
step5 Insert into 表 A
step6 提交事务
总是当某个线程执行到 step3 时 程序抛出:ORA-00060: 等待资源时检测到死锁

解决方案 »

  1.   

    估计step 2和step 4涉及的数据都是一批的吧
      

  2.   

    step 2和step 4涉及的数据不是同一批。
      

  3.   

    step3 给表 A 加独占锁 
    这个锁的是全表还是记录
      

  4.   

    To:superhsj 
    LOCK TABLE A IN EXCLUSIVE MODE
      

  5.   

    我查过 V$locked_Object 表,没有未释放的锁。
    另外我试过,如果将 step2 和 step3 调换位置,就不会产生死锁了。
      

  6.   

    哦,那就是线程自己跟自己死锁了,你先删除了一部分数据没有提交,这部分已经被当前线程锁了,在执行step3的时候一直等待step2解锁
    step1 事务开始 
    step2 Delete 表 A 
    --在这里提交一下看看应该就没事了
    step3 给表 A 加独占锁 
    step4 Delete 表 A 
    step5 Insert into 表 A 
    step6 提交事务 
      

  7.   

    可我还是不明白为什么是抛出 Oracle 异常,而且在单线程的情况下不会出现死锁。