保持多个环境中的开发数据库同步

时间:2008-09-03 00:19:51

标签: database visual-studio-2008 svn version-control

我在VS2008内置的Web应用程序的早期开发。我有一台台式电脑(大部分工作都已完成)和一台笔记本电脑(偶尔可移植),我使用AnkhSVN来保持项目代码同步。保持我的开发数据库(SQL Server Express)同步的最佳方法是什么?

我在SVN中有一个包含创建脚本的VS数据库项目,我在架构更改时重新生成这些脚本。最初的想法是每当发生变化时重新创建数据库,但它很快就会变成一种痛苦。此外,我丢失了我输入的所有样本行,以确保正确显示数据。

我正在考虑将.MDF和.LDF文件置于源代码管理之下,但我怀疑如果我执行SVN更新,SQL Server Express会优雅地处理它,并且文件会从它下面被删除,取而代之的是更新的副本。将几个大的二进制文件粘贴到源代码控制中似乎也不是一个优雅的解决方案,即使它只是一个一次性开发数据库。有什么建议吗?

4 个答案:

答案 0 :(得分:7)

显然有很多方法可以解决这个问题,因此我将列出一些链接,这些链接应该为构建提供更好的基础。这些是我过去在尝试吸引其他人加入时所引用的链接。

然而,尽管如此,如果您认为自己没有足够的承诺来实现某种类型的版本控制(手动或半自动),那么我强烈建议您查看以下内容:

圣牛!谈谈让生活变得轻松!我有一个项目远离我,让多个人进行架构更改,并且必须保持多个环境同步。将红门产品指向两个数据库并查看差异然后将它们同步起来是微不足道的。

答案 1 :(得分:3)

您可以存储数据库的备份(.bak文件)而不是.MDF& .LDF文件。
您可以使用以下脚本轻松恢复数据库:

use master
go

if exists (select * from master.dbo.sysdatabases where name = 'your_db')
begin
    alter database your_db set SINGLE_USER with rollback IMMEDIATE
    drop database your_db
end

restore database your_db
from disk = 'path\to\your\bak\file'
with move 'Name of dat file' to 'path\to\mdf\file',
     move 'Name of log file'  to 'path\to\ldf\file'
go

您可以将上述脚本放在文本文件restore.sql中,并使用以下命令从批处理文件中调用它:

osql -E -i restore.sql

通过这种方式,您可以创建脚本文件以自动执行整个过程:

  • 从SVN获取最新的数据库备份 存储库或任何合适的存储
  • 使用bak文件恢复当前数据库

答案 2 :(得分:3)

除了数据库CREATE脚本之外,为什么不维护默认数据或示例数据脚本呢?

这是我们已经为我们已经维护了2年多的应用程序的增量版本所采用的方法,并且它非常有效。拥有默认数据脚本还可以让您的QA测试人员能够使用您拥有的数据重新创建错误吗?

您可能还想看一下我前一段时间发布的问题:

Best tool for auto-generating SQL change scripts

答案 3 :(得分:1)

我们使用组合,从较高环境中备份。
以及使用ApexSql处理模式的初始设置 最近一直在使用Subsonic迁移,作为编码的,源代码控制的,以CI方式运行以获取更改脚本,还有来自德克萨斯州的headspring开发的“tarantino”项目。

大多数这些方法尤其是后者,在大多数测试数据之上都可以安全使用。我特别喜欢自动化的最后2,因为我可以进行更改,下次有人获得最新版本时,他们只需运行“更新程序”,它们就会被引入最新版本。