文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SAVEPOINT重名引发的血案——sinodragon21原创

SAVEPOINT重名引发的血案——sinodragon21原创

时间:2010-07-18  来源:sinodragon21

作者:金鸽

欢迎访问 sinodragon21.cublog.cn


在一个存储过程调用堆栈中,调用关系如下:

1 A (pA)
2 |--->B (pB)
3      |--->C (pC)
4           |--->D (pA)

在存储过程A中声明了SAVEPOINT pA,在存储过程D中声明了重名的SAVEPOINT pA,
如果在存储过程D中出现异常需要回滚,按照常理,理论上,会向调用栈上层一层层回滚:
Exception ---> Rollback ---> pA ---> pC ---> pB ---> pA ---> Commit

但是 此处出现了重名的SAVEPOINT,所以,实际上,oracle会以如下方式回滚:
Exception ---> Rollback ---> pA ---> Commit(oracle以为自己已经rollback到终点,直接commit)

导致 中间 A B C 的操作均没有Rollback,导致脏数据残留。

2010年7月18日

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

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载