5

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

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

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

4

4 回答 4

7

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

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

天啊!谈论让生活变得轻松!我有一个项目离我而去,有多个人在进行架构更改,并且必须保持多个环境同步。将 Red Gate 产品指向两个数据库并查看差异然后同步它们是微不足道的。

于 2008-09-03T05:43:39.713 回答
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 文件恢复当前数据库
于 2008-09-03T00:28:30.797 回答
3

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

这是我们为已经维护了 2 年多的应用程序的增量版本而采用的一种方法,并且效果很好。拥有默认数据脚本还允许您的 QA 测试人员能够使用您也拥有的数据重新创建错误?

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

自动生成 SQL 更改脚本的最佳工具

于 2008-09-03T06:02:35.813 回答
1

我们使用从更高环境中备份的组合。
以及使用 ApexSql 处理架构的初始设置。
最近一直在使用 Subsonic 迁移,作为一种编码的、源代码控制的、通过 CI 运行的方式来获取更改脚本,还有由 texas 开发的 headspring 开发的“tarantino”项目。

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

于 2008-09-03T05:56:18.170 回答