从源代码管理自动化数据库对象迁移
我正在寻找一些"最佳实践"来从源代码管理中自动部署存储过程/视图/函数/表更改。我使用的是StarTeam&ANT,因此标签已被妥善保管;我正在寻找的是你们中的某些人如何自动从源代码(不一定是StarTeam)中提取这些对象。
我想结束一个脚本,然后可以执行,检入并标记它。
我并不是要任何人都写一些过去(或者曾经没有)有用的想法或者方法。
我正在尝试清理一团糟,并希望确保我尽可能地接近"正确"。
我们将表/视图/函数等存储在StarTeam的单个文件中,并且数据库为SQL 2K5.
解决方案
回答
我更喜欢将视图,过程和触发器(可以随意重新创建的对象)与表分开。对于视图,过程和触发器,只需编写作业将其签出并重新创建最新的作业即可。
对于表,我更喜欢具有一行的数据库版本表。使用该表来确定尚未应用哪些新更新。然后应用每个更新并更新版本号。如果更新失败,则只需要检查该更新,就可以重新运行,因为先前的更新不会再次发生。
回答
我们使用来自redgate(http://www.red-gate.com/)的SQL比较。
我们有一个生产数据库,一个开发数据库,每个开发人员都有自己的数据库。
当开发人员签入更改时,开发数据库将与开发人员对其数据库所做的更改同步。
开发人员还签入同步脚本和由SQL Compare生成的比较报告。
部署应用程序时,我们只需使用SQL Compare将开发数据库与生产数据库同步即可。
这对我们有用,因为我们的应用程序仅供内部使用。如果这不是情况,那么我将看一下SQL Packager(同样来自redgate)。
回答
检查迁移(安德鲁·彼得斯在另一篇文章中指出)
回答
正如Carl指出的那样,我们可以使用diff实用程序来创建更新脚本。 RedGate是一个很好的产品,但SQL Server 2k5附带了TableDiff,它也可以完成这项工作。