文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>sybase的多级事务

sybase的多级事务

时间:2009-11-26  来源:wuye_chinaunix

sybase 的多级事务很头疼的问题,
先把其涉及的事务命令列出来吧:

begin transaction [tranname]
save transaction   savepointname :主要这个transaction 和 name是必须的
commit [ transaction [tranname|savepointname]] 
rollback [ transaction [tranname|savepointname]]

  --commit transaction 后面的 name 均可以是tranname 或 savepointname。

从语法上看commit 和 rollback 对与savepoint 和 tran  是一样的,那这两个的区别在于哪儿那?


初步探索结果:
第一部分:不涉及savepoint
1. rollback 不带参数  : 回滚到最外层事务, 即这时 @@trancount=0
2. commit  不带参数 : 提交当前最低级别事务,这时 @@trancount = @@trancount-1
3. commit 带上层次的tranname:  结果目前发现同不带参数一样,即这时 @@trancount = @@trancount-1, 直觉上感觉不太能接受,因为带了上级别的tranname 了应该总得有点儿用吧!!!
   如果 这条理解是正确的话,那我们可以总结低级别的(nested)commit 是可怜的,因为最终结果完全取决于最外层的决定。--难道就真的没用了么?目前没看出来。

4. rollback 带tranname : 这里的tranname 必须是最高(外)层的tranname ,否则“Cannot rollback t2 - no transaction or savepoint of that name found”。
  rollback 另一个奇怪的问题是 就算是 tranname 是当前级别的tranname 也会同样报错,让人无法接受。

 到以上掌握的情况来看,多级tran 毫无用处,只会增加额外的考虑和错误。!!切忌
   问题比如: 在一个常驻程序,数据库长连接, 某个程序在执行时执行了如begin commit的操作,
   这时都是成功的, 可能会依此给外部系统或用户反馈成功的响应信息,而这时数据库结果还是未提交的。
   好险那!呵呵,不知道有同志遇到此情况没有,反正我觉得很后怕!!
----以上是不是杞人忧天呢, 还待验证,待续 。。晚了,还有正事儿没做呢。
希望下次可以吧savepoint 分析完!


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载