我在pl/sql developer中,打开两个sql window;
1、在第一个sql window中,设置保存点savepoint p,然后对一张表的一条记录进行update操作;
2、然后在第二个sql window中,对同一张表的同一条记录再进行update操作,此时执行不了,等待中;
3、接着在第一个sql window中rollback to p;请问,回滚了,第二个sql window中的update操作怎么还在等待啊?

解决方案 »

  1.   

    我有试验,可以的啊。
    你select * from v$locked_object 查看一下表是不是被锁了?
      

  2.   

    1、因为楼主第一次更新前设置了保存点 p,在设置保存点前没有做任何操作。2、在设置保存点后,进行了更新(transaction),我们暂且叫是T1,此时,楼主可能没有提交更新,才出现了第二个会话中出现事物T2等待。3、而当楼主在第一个会话中执行了rollback to p,意思就是回滚p点之后的事物,但是,在oracle中被部分回滚的事务依然处于活动状态,可以继续执行,而为了避免事务T1因为不能获得锁而被挂起,所以不会释放行级锁,那么,事物T2又需要获得T1的行级锁,结果就出现继续等待。
      

  3.   

    哦,明白了,假如是整个回滚,直接rollback,就释放锁了,对吧?