【问题标题】:Get my database under Version Control using a DVCS [Mercurial]使用 DVCS [Mercurial] 在版本控制下获取我的数据库
【发布时间】:2010-07-29 11:22:45
【问题描述】:

对我的整个数据库进行版本控制的最佳方法是什么?

为每个数据库对象(表、视图、过程..)创建一个文件,或者为所有 DDL 脚本创建一个文件,并且任何新的更改都将放在一个单独的文件中?

如何处理在数据库管理器工具中所做的更改?

我想为任何类型的 RDBMS 提供通用解决方案。

还有其他选择吗?

【问题讨论】:

  • Microsoft SQL Server 可以使用源代码安全版本控制,我不知道其他类似的解决方案。我真的很想找到一些适用于其他数据库的其他解决方案。
  • @Flakron Bytyqi:来源安全?!如果Eric Sink看到这个,他会亲自去你家,用销售发票把你剪成半死。

标签: sql database mercurial dvcs


【解决方案1】:

总的来说,我是 VCS 的忠实粉丝,也是 Mercurial 的忠实拥护者,但我真的认为你走错了路。

VCS 不仅仅是关于迭代更改、“什么”,它们还涉及回答“谁”、“何时”和“为什么”。对于数据库,这些答案不太有趣或难以提供给 VCS。如果您每晚进行导出并提交,“谁”将始终是“cron”,“为什么”将始终是“午夜”。

现代 VCS 做得很好的另一件事是帮助您合并来自多个分支的更改。这在数据库世界中不太适用。你很少说“我想要这个表结构,但是这个数据”,如果你这样做,文本/差异合并对你没有多大帮助。

能够很好地“做什么”和“何时”做的事情是增量备份系统,这可能更合适。

在工作中我们使用 Tivoli,在家里我使用 rdiff-backup 和 duplicity,但有很多不错的选择。

我想我的一般经验法则是“如果它是人工输入的,那么它会进入源代码控制,如果它是生成/导出的,那么它会进入增量备份”

当然,您可以完成这项工作,但我认为与更传统的备份解决方案相比,它不会为您带来太多收益。

【讨论】:

  • 我倾向于不同意。我们与几个开发人员一起处理我们的数据库并且不断增长,事情变得一团糟,因为我们无法轻松跟踪对代码的更改。数据不是问题,可以通过定期备份来处理。这是需要结构的代码。
【解决方案2】:

看看这个post

【讨论】:

    【解决方案3】:

    如果您需要通用解决方案 - 将所有内容放入脚本(简单文本文件)并置于版本控制系统(可用于任何 VCS)。

    将相似的数据库对象分组到脚本中取决于您的要求。

    所以你可以例如:

    将表/索引/存储在一个或多个脚本中 每个过程存储在单独的脚本中或将小过程组合成一个脚本。

    但是,使用这种方法需要记住一件重要的事情:如果您直接在数据库中更改表/视图/过程,请不要忘记更改脚本,并且不要在更改脚本后在数据库中创建/重新创建/编译数据库对象。

    【讨论】:

      【解决方案4】:

      SQL Source Control 目前支持 SVN 和 TFS,但 Mercurial 请求正在迅速增加,我们希望很快能有这方面的故事。

      我们使用 UserVoice 来衡量需求,如果您对此感兴趣,请相应投票:http://redgate.uservoice.com/forums/39019-sql-source-control

      【讨论】:

      • 好消息 - SQL 源代码控制现已发布,支持 Mercurial(以及任何具有合适命令行的源代码控制系统)。
      猜你喜欢
      • 1970-01-01
      • 2010-10-05
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      相关资源
      最近更新 更多