代码之家  ›  专栏  ›  技术社区  ›  Stefan

奇怪的SQL2005问题。“SQLConnection不支持并行事务”

  •  3
  • Stefan  · 技术社区  · 16 年前

    我有一个问题,似乎是僵局造成的。 whe现在正在寻找问题的根源,但同时我们希望重新启动服务器并让客户继续工作。

    现在每当我们启动程序时,它都会说“sqlconnection不支持并行事务”。我们并没有改变程序中的任何内容,它是在客户服务器上编译的,但是在“可能的死锁”之后,它想再次上线。

    我们有7个客户机(计算机)运行这个程序,每个客户机都在与本地服务器上的WebService通信,而WebService正在与SQL服务器(与WebServer相同的机器)通信。

    我们已经重新启动了SQL服务器和IIS服务器,但由于服务器上运行的其他重要服务,所以没有重新启动服务器,所以这是我们最后一件事。 我们可以在管理选项卡中不使用锁或任何内容。

    所以我的问题是,为什么“sqlconnection不支持并行事务”的错误会从一个错误合并到另一个错误,而不改变程序中的任何内容,而且它仍然在SQL重新启动之间存在。

    似乎它发生在程序启动时执行的第一个DB请求。

    如果您需要更多信息,只需询问。我很困惑…

    更多信息: 我认为我没有“长时间”运行的事务。场景通常是我有一个数据集,其中有20-100行(contractRows),我将在TableAdapter上执行.update。我还循环使用那些20-100行,其中一些将创建ad hook SQL查询(例如,如果租赁的产品标记为“返回”,我将创建一个SQL查询,以将该产品标记为“返回到数据库中”)。

    所以我做这个非常简单:

    Create objTransactionObject
    Create objtableadapter (objTransactionObject)
    for each row in contractDS.contractrows
      if row.isreturned then
        strSQL &= "update product set instock=1 where prodid=" & row.productid & vbcrlf
     End if
    next
    objtableadapter.update(contractDS)
    objData.ExecuteQuery(strSQL, objTransactionObject)    
    if succsesfull 
      objtransactionobject.commit
    else
      objtransactionobject.rollback
    end if
    objTran.Dispose()
    

    然后,我会提交或回滚,这取决于它是否运行良好。

    编辑:没有一个答案能解决这个问题,但我会感谢你提出的好的解决问题的建议。

    “sqlconnection不支持并行事务”突然消失了,现在SQL Server一天只“停机”4-5次,我想这是一个死锁,但我没有正确的知识去发现,目前缺少能够为我监控这一点的SQL专家。我只是重新启动了SQL服务器,一切都重新工作了。10次中的1次我还必须重新启动计算机。我(当然还有我的客户)真的很烦。

    任何认识一个人的人 好的 在瑞典(或世界各地,英语国家)分析死锁或其他SQL问题的知识可以随时联系我。我知道这不是一个联系网站,但我用我的机会问这个问题,因为我已经没有选择了,我花了3天和3个晚上优化客户,以确保我们密切联系,不要在那里做太多愚蠢的事情。没有运气。

    4 回复  |  直到 16 年前
        1
  •  7
  •   casperOne    16 年前

    似乎您正在共享连接并在同一打开的连接上创建新事务(这是您看到的异常的并行部分)。

    您的示例似乎支持这一点,因为您没有提到如何获取其中的连接。

    您应该检查代码,确保只打开一个连接,然后在完成后处理它(无论如何,使用using语句确保关闭连接),因为您似乎要在某个地方打开一个连接。

        2
  •  2
  •   duffymo    16 年前

    你的问题似乎并不罕见。当我把你的错误字符串粘贴到查询框中时,谷歌发现了很多点击率。

    阅读过去的答案,听起来好像它与不正确地交错事务或隔离级别有关。

    连接保持打开多长时间?你有长期的交易吗?

        3
  •  2
  •   sfuqua    16 年前

    你有 implicit transactions 在某个地方打开,以便有一些您不希望看到的事务?是否打开活动监视器以查看是否有任何意外的事务?

        4
  •  0
  •   Mark Brittingham    16 年前

    您是否尝试备份事务日志?如果我能正确地记起以前类似的经历,这可能也会让我明白。