Asp.net Oracle 事务出现奇怪的自动提交现象及解决办法

前几天在项目中测试人员告诉我,我的程式中有关oracle transaction的事务控制有问题,在程式执行过程中,即使回滚了数据还是能写到数据库,当时我检查了程式,可是奇怪的是我的事务控制都有ROBACK,COMMIT。于是我自己又测试了一次,惊奇的事情发生了,我发现每当从新打开项目,第一次调试时,transaction能正常回滚,可是再运行一次就有问题,后面的测试不用提交数据就写进去了。大致是这样的步骤:

step a: new oracleconnectionA,then open(strConn)

step b: oracleconnectionA.begintransaction()

step c:  todo some insert,update

step d: if c successful then commit,else rolback

step e: close oracleconnectionA

 

结果第一次运行,设置断点在c,刚运行完c发现数据没写进去,至到运行完e,数据才写进去,这第一次是正确的,紧接着再做同样的运行,刚运行完c,还没执行d,去数据库中查询就发现数据已经写进去了。

 

我还在一段程式中写了两段transaction控制进行测试,如下步骤:

step a: new oracleconnectionA,then open(strConn)

step b: oracleconnectionA.begintransaction()

step c:  todo some insert,update

step d: if c successful then commit,else rolback

step e: close oracleconnectionA

 

step f: new oracleconnectionB,then open(strConn)

step g: oracleconnectionB.begintransaction()

step h:  todo some insert,update

step i: if c successful then commit,else rolback

step j: close oracleconnectionA

 

结果发现第一次运行时a-e的过程,事务还是正常的,但一执行完h,还未执行i,本来要在i提交的数据就已经写进数据库了。在我进过很多次的修改,调试,修改,调试,查资料。。。请了很多人看,结果还是没发现问题。当时我还只是认为自己程式有问题,结果发现我们项目中所有的程式都有这种情况,因此还怀疑过DB有问题,但当我放在别人机器上测试时,却没出现问题,在我们的机器上运行别人的数据库和程式还是出现问题。因此将DB,程式的问题都排除了。目前的状况是我们团队的机器上测试都有问题,那么我不得不怀疑我们机器的oracle client是否有问题。结果还是不能解决。最后我想到是不是系统有问题了,还原系统后发现程式运行正常了,于是我们比对系统差异。终于让我发现导致该问题的原因是系统中一个漏洞导致的,http://support.microsoft.com/kb/958481

http://support.microsoft.com/kb/958483

http://support.microsoft.com/kb/958484

以上三个补丁能解决该问题,上述三个地址对该漏洞导致的异常做出了描述。其中就有这样的描述

  • AutoCommit behavior in Oracle transactions is different in the .NET Framework 2.0 SP1 from the behavior in the .NET Framework 2.0 SP2. In the .NET Framework 2.0 SP2, if an application starts a transaction, completes the transaction, and then starts a new transaction on the same connection, all the commands that are executed in the second transaction execute in auto-commit mode. The changes that are made by those commands are committed to the database even if the transaction is rolled back.
  • 这恰好是我遭遇的现象,终于给解决了。

    一般安装KB958481这个补丁就可以解决问题,不过建议大家最好把这些补丁都打上,都是针对.net framwork的漏洞出的

     

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值