对整个数据库进行版本控制的最佳方法是什么?
为每个数据库对象(表,视图,过程...)创建一个文件,或者为所有DDL脚本创建一个文件,并将任何新的更改放在一个单独的文件中?
如何处理数据库管理器工具中的更改?
我想为任何类型的RDBMS提供通用解决方案。
还有其他选择吗?
答案 0 :(得分:3)
我是一个巨大的VCS粉丝和一个很大的Mercurial助推器,但我真的认为你走错了路。
VCS不只是迭代变化,“什么”,它们也是关于回答“谁”,“何时”和“为什么”。对于数据库,这些答案不太有趣或难以提供给VCS。如果你做夜间出口并承诺“谁”将永远是“cron”而“为什么”将永远是“午夜”。
现代VCS的另一个功能是帮助您合并来自多个分支的更改。这在数据库领域不太适用。你很少说“我想要这个表结构,但是这个数据”,如果你做文本/ diff合并对你没有多大帮助。
做“什么”和“何时”的事情是增量备份系统,这可能是更合适的。
在工作中我们使用Tivoli,在家里我使用rdiff-backup和duplicity,但是有很多很棒的选择。
我想我的一般经验法则是“如果它是由人手工输入,那么它会进入源代码控制,如果它是生成/导出的,那么它会进入增量备份”
当然,你可以做到这一点,但我认为它不会对更传统的备份解决方案产生太大影响。
答案 1 :(得分:2)
看看这个post
答案 2 :(得分:1)
如果您需要通用解决方案 - 将所有内容放入脚本(简单文本文件)并放在版本控制系统下(可以使用任何VCS)。
将类似的数据库对象分组为脚本将取决于您的要求。
所以你可以举例如:
将表/索引/存储在一个或多个脚本中 每个过程都存储在单个脚本中,或者将小过程合并到一个脚本中。
然而,需要记住这种方法的一个重要事项:如果直接在数据库中更改了表/视图/过程,并且在更改脚本后没有在数据库中创建/重新创建/编译db对象,请不要忘记更改脚本。 / p>
答案 3 :(得分:1)
SQL Source Control目前支持SVN和TFS,但Mercurial请求正在迅速增加,我们希望很快能有这样的故事。
我们使用UserVoice来衡量需求,因此如果您对此感兴趣,请相应投票:http://redgate.uservoice.com/forums/39019-sql-source-control