SQL Server 回滚架构更新

Ale*_*lan 5 sql-server disaster-recovery

假设我有一个手写脚本,它执行一系列架构更改,例如:(从空气中提取):

  • 向现有表添加 2 列
  • 创建一个新的存储过程
  • 改变现有的存储过程

并且,在运行这个之后,我们发现我们需要恢复到整个脚本运行之前。

这可能吗?

在此期间,数据将一直流入。我们不能丢弃新数据(即:我们无法恢复整个数据库的备份),但我们不关心来自 2 个新列的任何数据.

我正在寻找比DROP COLUMN每次进行架构更改时编写显式“撤消”脚本(例如,语句和旧过程定义)更好的解决方案。

Mic*_*een 3

有很多很好的模式比较工具。我想到的是 Redgate Schema Compare 和 SQL Server Data Tools for Visual Studio 两个(我不隶属于这两个工具)。

在开发环境中,创建两个与当前“实时”模式匹配的数据库。仅将您的更改部署到一个数据库。使用该工具将更新的数据库与当前数据库进行比较。将生成的脚本命名为“Deploy.sql”或类似的脚本。现在使用该工具比较当前与更新的内容 - 注意顺序已切换。调用生成的脚本“Rollback.sql”。

前滚和回滚脚本的一个重要方面是它们应该是幂等的,即针对同一数据库运行脚本一次或多次应该产生相同的输出。一般来说,这需要很多“如果存在..”语句。这些工具可以为您生成这些。

如果空间紧张,您可以使用实际的生产数据库作为“当前”数据库。我宁愿不这样做,因为(小的)额外负载和(小的)错误风险。