none
SOS: SQL Server 2008 R2 (V10.50.1600.1)不支持嵌套事务?以前版本(如V9.00.1399.06)是可以支持 RRS feed

  • 问题

  • 求助: SQL Server 2008 R2 (V10.50.1600.1)不支持嵌套事务了吗?以前版本(如V9.00.1399.06)是可以支持。

    数据库升级,导致很多功能不可以正常使用,请问这有什么解决办法,盼回复!

    请请各位支持,我的处理过程如下:

    1、开始一个事务;

    2、执行语句(1):

        UPDATE WF_TABLE SET DELETED_FLAG='0'   WHERE ROW_ID=? 

    3、执行语句(2):

       update WF_TABLE set flow_name=?  where row_id=?

    4、新建另一个连接,仅执行如下查询语句:

    SELECT C.ROW_ID, C.ROW_ID MASTER_ROW_ID  .......   FROM WF_AAWF_TABLE C
      WHERE  C.ROW_ID=? 

        在执行此查询的时候一直等待中,执行不下去。)

    5、事务结束。

    • 已编辑 chenmj 2013年9月20日 1:40
    2013年9月17日 8:30

答案

全部回复

  • Which edition of sql2k8 r2 do you have? Can you post error messages you got?
    2013年9月17日 12:55
  • 你是怎么用的? 错误信息是什么?
    2013年9月17日 13:14
  • LZ给出您的SQL脚本,我用SQL2005   和SQL2012帮您测试一下
    2013年9月17日 13:18
  • 谢谢您的支持,我的处理过程如下:

    1、开始一个事务;

    2、执行语句(1):

        UPDATE WF_TABLE SET DELETED_FLAG='0'   WHERE ROW_ID=? 

    3、执行语句(2):

       update WF_TABLE set flow_name=?  where row_id=?

    4、新建另一个连接,仅执行如下查询语句:

    SELECT C.ROW_ID, C.ROW_ID MASTER_ROW_ID  .......   FROM WF_AAWF_TABLE C
      WHERE  C.ROW_ID=? 

        在执行此查询的时候一直等待中,执行不下去。)

    5、事务结束。

    2013年9月20日 1:41
  • 请请各位支持,我的处理过程如下:

    1、开始一个事务;

    2、执行语句(1):

        UPDATE WF_TABLE SET DELETED_FLAG='0'   WHERE ROW_ID=? 

    3、执行语句(2):

       update WF_TABLE set flow_name=?  where row_id=?

    4、新建另一个连接,仅执行如下查询语句:

    SELECT C.ROW_ID, C.ROW_ID MASTER_ROW_ID  .......   FROM WF_AAWF_TABLE C
      WHERE  C.ROW_ID=? 

        在执行此查询的时候一直等待中,执行不下去。)

    5、事务结束。

    2013年9月20日 1:42
  • 请请各位支持,我的处理过程如下:

    1、开始一个事务;

    2、执行语句(1):

        UPDATE WF_TABLE SET DELETED_FLAG='0'   WHERE ROW_ID=? 

    3、执行语句(2):

       update WF_TABLE set flow_name=?  where row_id=?

    4、新建另一个连接,仅执行如下查询语句:

    SELECT C.ROW_ID, C.ROW_ID MASTER_ROW_ID  .......   FROM WF_AAWF_TABLE C
      WHERE  C.ROW_ID=? 

        在执行此查询的时候一直等待中,执行不下去。)

    5、事务结束。

    这不是嵌套事务啊

    首先你在会话一里update表的记录,这时候WF_TABLE表申请了排他锁,但是你update完毕之后没有提交事务

    你在会话里查询WF_TABLE表的记录,当查询WF_TABLE表的记录的时候需要申请共享锁,因为在会话一里

    WF_TABLE表的排他锁没有释放(没有提交事务),所以会话二里WF_TABLE表肯定申请不到共享锁

    所以,会话二一直等待下去,执行不下去

    LZ可以先看一下msdn对事务的解释

    http://msdn.microsoft.com/zh-cn/library/tyes10w5(v=vs.90).aspx

    http://msdn.microsoft.com/zh-cn/library/ms978457.aspx


    2013年9月20日 2:13
  • 我再重新截图

    2013年9月20日 2:27
  • Check if there's blocking.
    2013年9月20日 2:29
  • 你(桦仔)对我的处理过程分析没有任何问题,谢谢!

    想问一下,这个处理过程在 SQL SERVER 2008 R2  9.00.1399.06  ,包括在 ORACLE 、DB2上执行,都没有任何问题,到目前版本 10.50.1600.1 上就有上述异常现象,可能是什么原因呢?有什么处理办法。


    • 已编辑 chenmj 2013年9月20日 2:46
    2013年9月20日 2:39
  • Sounds blocking.
    2013年9月20日 3:04
  • 您好,
    是 ISOLATION LEVEL 的關係吧!
    您可以檢查一下连接中的屬性,

    DBCC useroptions

    看一下isolation level的值,

    如果您在Select時,先設定成 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 就不會被blocked


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年9月20日 3:06
  • 您好,
    是 ISOLATION LEVEL 的關係吧!
    您可以檢查一下连接中的屬性,

    DBCC useroptions

    看一下isolation level的值,

    如果您在Select時,先設定成 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 就不會被blocked


    谢谢!

    之前设置隔离级别是 READ UNCOMMITTED,现在发现设置完成之后,每重开一个新的会话,又默认到 READ COMMITED。在每次Select 时,设置一下,可以解决这个问题,多谢!

    不解的是,这个版本与之前相比,是不是有些改变了。


    • 已编辑 chenmj 2013年9月20日 3:31
    2013年9月20日 3:28
  • No difference, sql always uses read committed as default isolation level.
    2013年9月20日 3:40
  • By the way, read uncommitted does dirty read. Maybe not good for certain apps, can try snapshot isolation instead.
    2013年9月20日 3:44
  • 您好,

    SSMS預設是read committed,您可以在Option中修改它,請參考

    SQL Server Management Studio Default Isolation Level Can Cause Locking/Blocking


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 chenmj 2013年9月20日 3:58
    2013年9月20日 3:45