谁是对的? - SQL回滚问题

时间:2009-07-14 10:19:40

标签: sql rollback

几分钟前,我与老板讨论过,如果我错了,或者他是,我现在想要更多的意思。

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

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

如果存在程序X .... DROP PROCEDURE X .... 创建程序X ....

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

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

当我问起理由时,他就离开了。

我错了?

4 个答案:

答案 0 :(得分:2)

你所说的有一些逻辑,但如果这个论点等于说“我们不需要备份不起作用的代码”,我就同意你的老板。

这仍然是某人的昂贵时间,而这个缺陷可能是一个小问题。如果可以想象进一步的更新可能会使某些事情变得更加错误,那么请求能够回滚到不那么破坏的状态是合理的。

答案 1 :(得分:1)

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

您还暗示'创建程序'将起作用或不起作用。这是事实,但这并不意味着程序实际上会起作用。您可以创建一个引用不存在的表的存储过程(至少在SQL Server上),它将编译得很好。

答案 2 :(得分:0)

两个错误并不是正确的。

如果之前对SP的更改有回滚选项,那么您将不会处于这种情况。所以即使你知道任何回滚都会变成“坏”版本。它应该仍然存在。

你在这里做的更新可能比现在更容易打破。

答案 3 :(得分:0)

  

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

需要更多信息。

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

  1. 他确实(或没有)改进他修复的存储过程
    • 他介绍了此存储过程中的错误
  2. 您是否应该编写此脚本取决于以下因素:

    1. 改善的重要程度(如果有的话)
      • 错误有多严重,
      • 编写此脚本有多难。