谁是对的SQL回滚问题

谁是对的SQL回滚问题,sql,rollback,Sql,Rollback,几分钟前,我和老板进行了一次讨论,如果我错了,或者他错了,我现在想要更多的含义 给出了以下问题: 同事快速更改后,存储过程出错。 (我认为这一理论不需要更多的信息) 我们决定在更新脚本中提供正确的版本: 如果存在程序X。。。。 删除程序X。。。。 创建过程X 对于要执行更正的DBO,我们必须(应该)准备一个回滚机制。我的老板来找我,要求我准备一个回滚脚本。我告诉他,我们没有一个:因为当主脚本失败时,没有选择。现在它完全错了,我们不能回到错误的方向。这是毫无意义的 他告诉我,我们需要它,而不是感官

几分钟前,我和老板进行了一次讨论,如果我错了,或者他错了,我现在想要更多的含义

给出了以下问题: 同事快速更改后,存储过程出错。 (我认为这一理论不需要更多的信息)

我们决定在更新脚本中提供正确的版本:

如果存在程序X。。。。 删除程序X。。。。 创建过程X

对于要执行更正的DBO,我们必须(应该)准备一个回滚机制。我的老板来找我,要求我准备一个回滚脚本。我告诉他,我们没有一个:因为当主脚本失败时,没有选择。现在它完全错了,我们不能回到错误的方向。这是毫无意义的

他告诉我,我们需要它,而不是感官

我问他为什么,他就走了


我错了?

你说的有些道理,但如果你的论点等于说“我们不需要备份不起作用的代码”,我可以同意你老板的看法


这仍然是一些人投入的昂贵时间,而缺陷可能只是一个小缺陷。如果可以想象,进一步的更新可能会以某种方式使事情变得更糟,那么要求能够回滚到不那么坏的状态是合理的。

你说的有些道理,但是如果这个论点等于说“我们不需要备份不起作用的代码”,我可以同意你的老板的观点


这仍然是一些人投入的昂贵时间,而缺陷可能只是一个小缺陷。如果可以想象,进一步的更新可能会以某种方式使事情变得更加糟糕,那么要求能够回滚到不那么糟糕的状态是合理的。

两个错误并不等于一个正确

如果以前对SP的更改具有回滚选项,则不会出现这种情况。因此,即使您知道任何回滚都将进入“坏”版本。它应该还在那里


您在此处所做的更新可能会比当前更严重地破坏事物。

两个错误不能代表正确

如果以前对SP的更改具有回滚选项,则不会出现这种情况。因此,即使您知道任何回滚都将进入“坏”版本。它应该还在那里

你在这里所做的更新可能会比现在破坏更多东西

同事快速更改后,存储过程出错。(我认为这一理论不需要更多的信息)

需要更多信息

更改脚本时,您的同事做了两件事:

  • 他确实(或没有)改进了自己修复的存储过程
    • 他在这个存储过程中引入了一个bug
  • 您是否应该编写此脚本取决于以下因素:

  • 改善的程度(如有)
    • 缺陷有多严重,以及
    • 写这个脚本有多难
  • 同事快速更改后,存储过程出错。(我认为这一理论不需要更多的信息)

    需要更多信息

    更改脚本时,您的同事做了两件事:

  • 他确实(或没有)改进了自己修复的存储过程
    • 他在这个存储过程中引入了一个bug
  • 您是否应该编写此脚本取决于以下因素:

  • 改善的程度(如有)
    • 缺陷有多严重,以及
    • 写这个脚本有多难

  • 如果这是一个不希望停机的生产服务器,那么应该有一个回滚过程。即使该过程只是在升级之前备份数据库,并在出现故障时从备份中恢复


    您还暗示“创建过程”要么有效,要么无效。这是真的,但并不意味着这个过程会真正起作用。您可以创建一个引用不存在的表的存储过程(至少在SQL Server上),它可以正常编译。

    如果这是一个生产服务器,您不希望停机,那么应该有一个回滚过程。即使该过程只是在升级之前备份数据库,并在出现故障时从备份中恢复


    您还暗示“创建过程”要么有效,要么无效。这是真的,但并不意味着这个过程会真正起作用。您可以创建一个引用不存在的表的存储过程(至少在SQL Server上),它可以很好地编译。

    我理解您的意思,但我选择了这个SQL问题,因为这里非常清楚:当创建新过程出错时,是非常非常失败或腐败的东西,以至于单个过程无法处理它。不一定。创建过程可能会失败,因为您尝试创建的过程的代码中有错误。然后你会陷入这样一种情况:删除有效,但创建无效,而且根本没有任何过程。在这种情况下,回滚至少会让您使用有缺陷的SPI启动并运行,明白吗?但我选择了确切的SQL问题,而不是其他问题,因为这里非常清楚:当创建新过程出错时,是一个非常失败或损坏的过程,以至于单个过程无法处理它。不一定。创建过程可能会失败,因为您尝试创建的过程的代码中有错误。然后你会陷入这样一种情况:删除有效,但创建无效,而且根本没有任何过程。在这种情况下,回滚至少会让您启动并运行有缺陷的SPExactly!这就是我的想法:唯一真正的回滚是备份和恢复。问题是,这意味着一个8GB数据库的备份和恢复需要1-2个小时。然后我的老板说:太贵了