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

如果我的回滚超时,Sql会进行隐式回滚吗?

  •  2
  • Ahmed  · 技术社区  · 16 年前

    我有一个.NET应用程序,它以事务方式执行一组插入、更新、删除语句

    try
    {
    mytrans = mycon.begintransaction();
    //execute sql statements
    mytrans.commit();
    }
    catch(Exception)
    {
    mytrans.rollback();
    }
    

    所以这意味着Sql不会进行隐式回滚?如果是这样,我如何从这个错误中恢复并恢复到原始状态???

    4 回复  |  直到 16 年前
        1
  •  2
  •   Michael Borgwardt    16 年前

    事务的基本概念要求未提交的事务不会影响数据库的状态。

    文件大小并不意味着什么。RDBMS数据结构比简单地在文件中添加一行要复杂得多——它们包括日志和索引,因此文件的增长和收缩可以完全独立于数据库中的数据量。

        2
  •  1
  •   AnthonyWJones    16 年前

    可能已经执行的任何SQL都尚未提交。如果您的回滚因某种原因超时,则不会导致提交。因此,最终DB将意识到它已经完全失去了顶峰,并将放弃这些变化。

    如果有回滚,则最后几位不会被调整,分配的页面只是成为用于其他事情的空闲页面。你不能指望DB会再次萎缩。

        3
  •  0
  •   A-K    16 年前

    页面裂缝可以在回滚中幸存下来:

    http://sqlfool.com/2009/04/page-splitting-rollbacks/

        4
  •  0
  •   RBarryYoung    16 年前

    一旦回滚开始,它必须完成。无论您是否仍处于连接状态,SQL Server仍将完成回滚。未能完成回滚会导致数据库事务性损坏,需要恢复。