回滚到保存点不会释放锁定

时间:2013-12-25 12:43:53

标签: sql transactions commit rollback savepoints

我认为我对如何使用Savepoints存在误解。也许有人可以为我清理它。我把我的例子呈现为我想做的事情,以及我所经历的事情。

我的应用正在执行某个程序。 在该过程(以及相关的DB操作)之前,我创建了一个保存点。 在此过程中,我启动了一个select更新, 这会产生许多锁:

lock1 - duration = transaction,class = row,type = intent row = big number

lock2 - duration = transaction,class = row,type = WriteNoPK row = big number

如果该java过程成功,则通过提交完成关联的DB事务。 但是,如果java过程失败,我还想回滚任何相关的数据库操作。 我一直试图通过:

conn.rollback(mySavepoint);

但是,这还没有释放由DB操作创建的表锁(上面)(我以为我刚刚通过conn.rollback(mySavepoint)回滚;)

我用两个数据库测试了这种行为:Sybase和Derby。

为什么会这样?

我真的需要在conn.rollback(mySavepoint)之后提交??? 这看起来有点违反直觉。

感谢您的帮助,

肖恩

0 个答案:

没有答案