对我的数据库对象进行版本控制的最佳方法是什么?我正在使用 Visual Studio 2005/2008 和 SQL Server 2005。我更喜欢可以与 SVN 一起使用的解决方案。
10 回答
与您的其他代码相同,将“数据库项目”添加到您的应用程序解决方案中,并在其中保留用于构建数据库对象的 sql 文件。对这些代码文件使用与应用程序相同的版本控制。
查看 RedGate 提供的工具。它们专门处理包括 SP 在内的 SQL Server 对象的备份/恢复/比较案例。或者我不确定,但我认为 Visual Studio 允许您将 sp 签入存储库。自己没试过。但我可以推荐 RedGate 工具。他们为我省去了很多麻烦
我将 SVN 用于我的所有表/存储过程/函数源代码控制。
我找不到任何满足我需要的东西,所以我最终编写了一个实用程序,允许我将代码转储到一个很好的目录结构中,以便与 SVN 一起使用。
对于那些感兴趣的人,现在可以在svn://finsel.com/public/VS2005/GenerateSVNFilesForSQL2005获得源代码。
我们使用 Subversion,我们所做的只是将 sql 代码保存在我们的 subversion 项目的目录中,然后在我们准备好时将代码提交到存储库,并在我们开始处理已经存在的内容之前从存储库更新。
真正的诀窍是说服开发人员这样做。我们的 dbas 通过定期删除任何不在 Subversion 中的存储过程(或其他数据库对象)来做到这一点。失去一次东西,几乎没有人再这样做了。
最佳方式 - 一种适合您的方式。
最简单的方法 - 目前不存在的方法。
我们使用半手动方法(源代码控制下的脚本,能够将存储过程部署到生产服务器的一小部分人,对架构的更改应该反映在对底层签入文件的更改中)。
我们应该做的是实现某种源代码控制与纯文本模式转储差异......但它通常“对我们有用”,尽管它在大多数时候真的很糟糕。
我不知道预打包的解决方案,对不起...
...但是您不能只是一个连接到数据库并将所有存储过程作为文本文件保存到磁盘的小脚本吗?然后脚本将通过对“svn add”进行系统调用将所有文本文件添加到 SVN 存储库。
然后您可能希望另一个脚本连接到数据库,删除所有存储过程并从磁盘加载所有存储库存储过程。每次运行“svn up”并有新的/更改的存储过程时,都需要运行此脚本。
我不确定这是否可以通过 MS SQL 完成,但我相当有信心 MySQL 会适应这一点。如果为此编写 SVN 扩展太复杂,Capistrano支持签入/签出脚本 IIRC。
我同意,如果可能的话,您应该使用数据库项目来对您的数据库以及您的应用程序源进行版本控制。
但是,如果您在企业场景中,您还应该考虑使用工具来跟踪服务器上的更改,并对这些更改进行版本控制。仅仅因为数据库项目存在并不意味着某些管理员或开发人员不能更改服务器上的那些存储过程。
我们将转储为纯文本并将它们保存在我们的 VCS 中。
您可以编写一个备份和提交脚本来做类似的事情。
我正在使用来自http://scriptdb.codeplex.com/的 scriptdb.exe
使用 rails 方式可能会很有用:http ://code.google.com/p/migratordotnet/wiki/GettingStarted
使用versaplex 转储您的架构:http ://code.google.com/p/versaplex/
Versaplex 带有 Schemamatic,它可以读取数据库模式(表、SP 等)和数据(数据被转储为 CSV)。我将它与 SVN 和 git 一起使用,它很棒 :) 如果您需要帮助,请告诉我,值得一试! http://github.com/eduardok/versaplex