嵌套事务的回滚与提交

嵌套事务的回滚与提交

ID:10001885

大小:49.00 KB

页数:10页

时间:2018-05-20

嵌套事务的回滚与提交_第1页
嵌套事务的回滚与提交_第2页
嵌套事务的回滚与提交_第3页
嵌套事务的回滚与提交_第4页
嵌套事务的回滚与提交_第5页
资源描述:

《嵌套事务的回滚与提交》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、嵌套事务的回滚与提交一、嵌套事务和事务保存点的错误处理1、对于嵌套事务。1.外部起事务,内部起事务,内外都有TryCatch内部出错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。外部出错:如果外部事物出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。注:如果内部的事务不起事务名称,内部如果出错,将会回滚掉会话中的全部事务,而且报异常。2.外部起事务,内部起事务,内部没有TryCatch内部出错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。外部出错:如果内部事

2、务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。3.外部起事务,内部不起事务,但有TryCatch。内部出错:外部事物正常提交,外部事物不会进入ROLLBACK,内部出错之后的记录也会正常执行。内部操作中,Try部分在错误出现之前的操作正常,Try部分在操作之后的操作不执行,然后进入Catch块中执行操作。外部出错:内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。4.外部起事务,内部不起事务,但没有TryCatch.内部出错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。外部出

3、错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。5.外部不起事务,内部起事务,但有TryCatch.内部出错:外部操作被正常执行,内部ROLLBACK操作前全部回滚,之后的操作正常执行。外部出错:出错操作之前的操作不会回滚,出错之后的操作不执行,跳入Catch块中,内部事务不会回滚。6.外部不起事务,内部起事务,但没有TryCatch.内部出错:外部操作被正常执行,内部ROLLBACK操作前全部回滚。由于没有catch块,所以外部操作全部执行。外部出错:内部事务正常提交,外部只有当条记录失败,其他操作正常执行,但是有严重错误报出来。对于事务保

4、存点事务保存点只有SAVE和ROLLBACK操作,当外部调用内部保存点,内部出现问题不影响外部事务,外部操作正常执行。当外部操作出现问题时,内部所有操作都回滚掉。如:外部起事务,内部起保存点,内外都有TryCatch内部出错:外部操作正常,不进入Catch,内部事务回滚到保存点,之后的继续执行。外部出错:如果外部事物在保存点之前出现异常,那么外部和内部所有操作回滚。如果外部事物在保存点之前出现异常,由于保存点已经提交了事务,导致外部rollback找不到对应的事务点。二、事务的嵌套PRINT'Trancountbeforetransaction:'+CAST(@@TRANCOUNTaschar

5、(1))BEGINTRANPRINT'AfterfirstBEGINTRAN:'+CAST(@@TRANCOUNTaschar(1))BEGINTRANPRINT'AftersecondBEGINTRAN:'+CAST(@@TRANCOUNTaschar(1))COMMITTRANPRINT'AfterfirstCOMMITTRAN:'+CAST(@@TRANCOUNTaschar(1))COMMITTRANPRINT'AftersecondCOMMITTRAN:'+CAST(@@TRANCOUNTaschar(1))在结果中,可以看到每一个BEGINTRAN语句都会使@@TRANCOUNT增

6、加1并且每一个COMMITTRAN语句都会使其减少1。如前所述,一个值为0的@@TRANCOUNT意味着没有打开的事务。因此,在@@TRANCOUNT值从1降到0时结束的事务发生在外层事务提交的时候。因此,每一个内部事务都需要提交。由于事务起始于第一个BEGINTRAN并结束于最后一个COMMITTRAN,因此最外层的事务决定了是否完全提交内部的事务。如果最外层的事务没有被提交,其中嵌套的事务也不会被提交。键入并执行以下批来检验事务回滚时所发生的情况:BEGINTRANPRINT'After1stBEGINTRAN:'+CAST(@@TRANCOUNTaschar(1))BEGINTRANPR

7、INT'After2ndBEGINTRAN:'+CAST(@@TRANCOUNTaschar(1))BEGINTRANPRINT'After3rdBEGINTRAN:'+CAST(@@TRANCOUNTaschar(1))UPDATEData1SETvalue1=1000000WHEREId=1COMMITTRANPRINT'AfterfirstCOMMITTRAN:'+CAST(@@TRANCO

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。