如何将大型现有数据库(模式)置于源代码管理之下?

时间:2009-08-31 11:39:07

标签: sql-server database-design version-control tfs build-process

我的DBA刚刚失去了他在我们的开发数据库上所做的一些开发工作。可怜的家伙。很自然地,我们的经理在我们的状态会议上问他如何发生这种情况以及如何避免将来发生这种情况。 “源头控制可以缓解这个问题”我建议...... dba的回应; “不,我们只是更频繁地备份服务器”。现在,我想帮助我的DBA了解源代码控制是什么以及它如何与该架构上的数据库架构和开发相结合。

之前我曾试图向他解释,表和存储过程背后的源代码并没有什么特别之处,它应该在源代码控制系统中(本例中为TFS)。但他只是没有咬人。现在,虽然这个错误是在最近的记忆中,但我想再次尝试它。

所以我的问题是,您是否知道我可以传递给我的DBA的任何好建议,甚至可能有一些资源解释如何迁移数据库模式以进行源代码管理并找到适当的位置构建和部署过程?

关于环境的几个事实:

  • TFS 2008服务器上的源代码管理。
  • 数据库是一个MS SQL Server 2008,包含> 300个表和> 300个其他对象(sprocs,触发器,函数等)。

澄清: 过去,我们一直在与其他DBA一起使用DB Ghost和其他项目的变更管理解决方案。我们甚至拥有VS DB版的许可证!问题是让DBA甚至考虑这种开发数据库的方式。他真的旧学校(即从环境到环境手动迁移),不幸的是,他是唯一一个对这个特定数据库有所了解的人。

10 个答案:

答案 0 :(得分:4)

请参阅how to version control sql server databasesDo you source control your databases以及其他许多内容。或使用search page。基本上,你的方法似乎是正确的。祝贺DBA好运......

答案 1 :(得分:2)

如果您使用的是Visual Studio Team System,我建议您使用他们的数据库版本(我想如果您是MSDN订阅者,它现在会附带Developer Edition)。这将允许您做的是脚本化所有模式,存储过程,视图,触发器等,并源控制这些。这也应该使dba更加舒适,因为他将使用该工具的“数据库”版本而不是“开发人员”版本(命名可以与人们一起使用)。当您从Visual Studio进行更改时,您可以在工作时管理脚本更改,并对源代码进行控制。

答案 2 :(得分:1)

如果您的公司拥有MSDN许可证,则可以使用Visual Studio数据库版本。有一个视频教程here

我没有购买力,所以我不知道成本分析是什么。但它具有源代码管理数据库架构的所有部分的能力,包括创建更改脚本以及直接从VS自动部署(如果您愿意的话)(我不建议这样做)。

总的来说,它作为数据库源代码控制选项非常可靠。

答案 3 :(得分:1)

数据库的源代码控制可能非常有争议。将源代码控制用于产生二进制文件的东西是不同的,因为你无法锁定源:存储的proc是表中的一行,并且没有单个表可以读取以获取表定义。

此外,版本到版本主要是一组ALTER语句。您编写CREATEs脚本并将它们添加到源代码管理中。这使得在这种情况下使用起来更加困难。

对我来说,这更像是一个程序错误。

为什么不通过脚本进行更改?忘记脚本所在的位置,但为什么没有可重现和可重新运行的脚本呢?也许与变更追踪号有关?如果重置数据库(从prod加载),那么如何重新应用更改以准备生产。还有其他问题。

我相信源代码控制并且我们使用它:但它对数据库工作有限制。

答案 4 :(得分:1)

首先,你正在接近这个错误。如果dba不会咬源代码并且他正在制作影响系统的错误,那么你需要说服的人就是他的老板。

如果有帮助,我也来自旧学校,我喜欢在源代码管理中使用我们的数据库对象。能够还原一个表而不必将整个数据库备份还原到其他位置然后移动表是多么好。多快多少。能够比较两个不同的版本,看看有什么变化是多么好。部署更改并确切知道哪些数据库更改(比如23个可能的数据库中只有12个)与您正在部署的部分有关,而不是其他一些未完成的项目。很高兴知道您必须回滚的特定更改中涉及哪些脚本。由于我们现在要求所有生产更改都来自源代码控制脚本,因此没有人在生产中进行实时更改。有很多错误和问题需要担心。

是的,这是我们开展业务的方式有所改变,但是我们是通过从高处进行的政策变更来实现的,所以三个没有争论而且dbas经历了几次并且将任何与源控制不同的对象还原为源控制版本,所以现在没有人会想到在没有源代码控制的情况下进行数据库更改。

答案 5 :(得分:1)

作为SQL Compare的产品经理,我曾与许多对第三方工具感到不舒服的“传统”DBA说过话,主要是因为他们有一个适合他们的系统,有时可能很难改变。在许多情况下,我确信只要他们给了他们机会,他们就会从我们的工具中受益。令人沮丧。

您可能会考虑尝试的一件事是Red Gate即将推出的工具SQL Source Control。这旨在将源代码控制构建到SSMS中,换句话说,它不需要DBA离开其管理环境的舒适区域。坏消息是该工具尚未发布。好消息是我们有早期访问计划。请访问以下链接以了解有关该工具的更多信息:

http://www.red-gate.com/Products/SQL_Source_Control/index.htm

答案 6 :(得分:0)

你无法真正将大型数据库置于源代码管理之下,因此你的DBA是正确的。

你几乎可以做的是将你的架构置于源代码控制之下,也许还有一些小的“配置”表。

答案 7 :(得分:0)

源控制数据库的一种方法是将数据分别存储在数据库中和关于数据库

  1. 您可以将所有表,过程和函数脚本作为SQL文件,并将它们添加到源代码管理中。

  2. 将数据库数据作为插入语句导出到SQL文件中,每个文件都有固定的大小。这是一个繁琐的过程,因为它涉及大量要跟踪和控制的文件。

  3. 我不确定VSS / SVN是否能够读取并保留数据库备份选项创建的转储文件的更改历史记录。

答案 8 :(得分:0)

如果您想要保护Db中的数据或Db中的模式,您的问题并不清楚。如果是后者那么你可以识别所有重要的模式并运行一个cron作业,从Db中提取模式定义并将它们自动插入到源控制系统中(甚至可以通过模式上的触发器)。

但这仍然只是为了更频繁地支持系统。根据您的设想,您需要与Db工具集成的源代码控制,我不知道有任何产品可以做到这一点。

(我不禁想到VSS集成到SQL管理工作室: - (()

答案 9 :(得分:0)

我对这个问题的回答是将所有数据库对象导出为文本格式(超过136,000个),然后创建SourceSafe项目来保存它们。现在,DB中的任何新对象或已更改对象都将转到SourceSafe结构,而未更改的对象将保持不变。