数据库 - 版本控制 - 管理已删除/已删除的对象

时间:2015-09-30 11:49:17

标签: sql-server git version-control sql-server-data-tools

我们要清理数据库架构并删除/删除不再使用的对象。

我们怀疑未来某个时候我们会想要恢复删除的功能。

我们已经讨论了在版本控制中处理被删除对象的以下选项:

  1. 从源控件中删除.sql文件,一旦它们从数据库中消失,并依赖于版本历史记录来存储定义。我们对这种方法的关注是多年来的某些时候源控制将被移动,我们将失去历史。如果我们看不到所有掉落的物体,似乎很难知道要找到什么来恢复。

  2. 将.sql文件保留在源代码管理中,但将定义更新为" drop proc {someproc}"。通过这种方法,我们关注的是将对象保留在不再存在的版本控制中,以及如果vcs被移动则丢失历史的风险

  3. 为已删除的对象创建一个新的repo,并在从SQL Server中删除它们后将.sql文件迁移到此repo。

  4. 我们在Windows环境中工作,对于使用VCS进行数据库工作来说还是一个新手。目前GIT + SSDT。

    目前,选项3是我们的首选方法。

3 个答案:

答案 0 :(得分:2)

我在数据库代码中看到了很多,随着时间的推移,人们最终会在数据库中找到未使用或者不工作的东西(想想一个引用表并且表被修改但不是proc)。

要做的就是让所有内容都在源代码控制中(它看起来像你有),然后在删除它之前和之后创建所有代码的标记或分支,以便你可以恢复它。

通常情况下会发生两件事,要么代码真的从未使用过,要么在年底使用,当你发现时,世界即将落在你的头上,所以最好有一个快速的方法来恢复它。

当然,如果您有一整套测试,那么即使是年终过程也是安全的:)

我个人不会使用选项3,我只会将历史保留在主分支中,以便保留历史记录。

答案 1 :(得分:0)

有许多用于版本化数据库更改的好工具:你很有可能以“太宽泛”的理由关闭这个问题,但我会尝试建议

  • 阅读,了解并尝试将Liquibase添加到您的Development-Toolbox
  • 采用您的工作流程来使用这个附加层 - 从技术上讲,它将是更改集中的一个文件(就Liquibase而言更改日志),您可以在其中更改DD和|或数据。
  • 这些更改日志提供了在数据库变化的线性历史中来回移动的良好而平滑的方式,不是那么好(或者我不知道正确的方法)在分歧历史的节点之间直接跳转,但似乎没有你的情况

从你的选项列表中,它将比其他更多p.1(但是它在版本控制中将更改存储在数据库中,不是状态

答案 2 :(得分:0)

请注意另一个选项,在SSDT中,您可以将文件属性标记为Build Action = None。选择此构建选项时,该文件不会包含在dacpac中。但我倾向于同意你应该依靠你的VCS处理历史的想法。