谁是对的SQL回滚问题
几分钟前,我和老板进行了一次讨论,如果我错了,或者他错了,我现在想要更多的含义 给出了以下问题: 同事快速更改后,存储过程出错。 (我认为这一理论不需要更多的信息) 我们决定在更新脚本中提供正确的版本: 如果存在程序X。。。。 删除程序X。。。。 创建过程X 对于要执行更正的DBO,我们必须(应该)准备一个回滚机制。我的老板来找我,要求我准备一个回滚脚本。我告诉他,我们没有一个:因为当主脚本失败时,没有选择。现在它完全错了,我们不能回到错误的方向。这是毫无意义的 他告诉我,我们需要它,而不是感官 我问他为什么,他就走了谁是对的SQL回滚问题,sql,rollback,Sql,Rollback,几分钟前,我和老板进行了一次讨论,如果我错了,或者他错了,我现在想要更多的含义 给出了以下问题: 同事快速更改后,存储过程出错。 (我认为这一理论不需要更多的信息) 我们决定在更新脚本中提供正确的版本: 如果存在程序X。。。。 删除程序X。。。。 创建过程X 对于要执行更正的DBO,我们必须(应该)准备一个回滚机制。我的老板来找我,要求我准备一个回滚脚本。我告诉他,我们没有一个:因为当主脚本失败时,没有选择。现在它完全错了,我们不能回到错误的方向。这是毫无意义的 他告诉我,我们需要它,而不是感官
我错了?你说的有些道理,但如果你的论点等于说“我们不需要备份不起作用的代码”,我可以同意你老板的看法
这仍然是一些人投入的昂贵时间,而缺陷可能只是一个小缺陷。如果可以想象,进一步的更新可能会以某种方式使事情变得更糟,那么要求能够回滚到不那么坏的状态是合理的。你说的有些道理,但是如果这个论点等于说“我们不需要备份不起作用的代码”,我可以同意你的老板的观点
这仍然是一些人投入的昂贵时间,而缺陷可能只是一个小缺陷。如果可以想象,进一步的更新可能会以某种方式使事情变得更加糟糕,那么要求能够回滚到不那么糟糕的状态是合理的。两个错误并不等于一个正确 如果以前对SP的更改具有回滚选项,则不会出现这种情况。因此,即使您知道任何回滚都将进入“坏”版本。它应该还在那里
您在此处所做的更新可能会比当前更严重地破坏事物。两个错误不能代表正确 如果以前对SP的更改具有回滚选项,则不会出现这种情况。因此,即使您知道任何回滚都将进入“坏”版本。它应该还在那里 你在这里所做的更新可能会比现在破坏更多东西 同事快速更改后,存储过程出错。(我认为这一理论不需要更多的信息) 需要更多信息 更改脚本时,您的同事做了两件事:
- 他在这个存储过程中引入了一个bug
- 缺陷有多严重,以及
- 写这个脚本有多难
- 他在这个存储过程中引入了一个bug
- 缺陷有多严重,以及
- 写这个脚本有多难
如果这是一个不希望停机的生产服务器,那么应该有一个回滚过程。即使该过程只是在升级之前备份数据库,并在出现故障时从备份中恢复
您还暗示“创建过程”要么有效,要么无效。这是真的,但并不意味着这个过程会真正起作用。您可以创建一个引用不存在的表的存储过程(至少在SQL Server上),它可以正常编译。如果这是一个生产服务器,您不希望停机,那么应该有一个回滚过程。即使该过程只是在升级之前备份数据库,并在出现故障时从备份中恢复
您还暗示“创建过程”要么有效,要么无效。这是真的,但并不意味着这个过程会真正起作用。您可以创建一个引用不存在的表的存储过程(至少在SQL Server上),它可以很好地编译。我理解您的意思,但我选择了这个SQL问题,因为这里非常清楚:当创建新过程出错时,是非常非常失败或腐败的东西,以至于单个过程无法处理它。不一定。创建过程可能会失败,因为您尝试创建的过程的代码中有错误。然后你会陷入这样一种情况:删除有效,但创建无效,而且根本没有任何过程。在这种情况下,回滚至少会让您使用有缺陷的SPI启动并运行,明白吗?但我选择了确切的SQL问题,而不是其他问题,因为这里非常清楚:当创建新过程出错时,是一个非常失败或损坏的过程,以至于单个过程无法处理它。不一定。创建过程可能会失败,因为您尝试创建的过程的代码中有错误。然后你会陷入这样一种情况:删除有效,但创建无效,而且根本没有任何过程。在这种情况下,回滚至少会让您启动并运行有缺陷的SPExactly!这就是我的想法:唯一真正的回滚是备份和恢复。问题是,这意味着一个8GB数据库的备份和恢复需要1-2个小时。然后我的老板说:太贵了