保持多个环境中的开发数据库同步
-
09-06-2019 - |
题
我正在早期开发一个用 VS2008 构建的 Web 应用程序。我有一台台式电脑(完成大部分工作)和一台笔记本电脑(用于偶尔的便携性),我在上面使用 AnkhSVN 来保持项目代码同步。保持我的开发数据库 (SQL Server Express) 同步的最佳方法是什么?
我在 SVN 中有一个 VS 数据库项目,其中包含创建脚本,当架构更改时我会重新生成这些脚本。最初的想法是每当发生变化时就重新创建数据库,但这很快就变得很痛苦。另外,我会丢失为确保数据正确显示而输入的所有示例行。
我正在考虑将 .MDF 和 .LDF 文件置于源代码管理之下,但我怀疑如果我执行 SVN 更新并且文件从其下被拉出并替换为较新的副本,SQL Server Express 能否妥善处理它。将几个大的二进制文件粘贴到源代码管理中似乎也不是一个优雅的解决方案,即使它只是一个一次性的开发数据库。有什么建议么?
解决方案
除了数据库创建脚本之外,为什么不维护一个默认数据或示例数据脚本呢?
这是我们为应用程序的增量版本所采用的方法,我们已经维护了两年多,而且效果非常好。拥有默认数据脚本还可以让您的 QA 测试人员能够使用您拥有的数据重新创建错误吗?
您可能还想看看我不久前发布的一个问题:
其他提示
显然有很多方法可以解决这个问题,因此我将列出一些链接,这些链接应该为构建提供更好的基础。这些是我过去在尝试让其他人加入潮流时引用过的链接。
- Visual Studio .NET 中的数据库项目
- 数据模式 - 如何实施变更
- 您的数据库受版本控制吗?
- 让您的数据库处于版本控制之下
- 另请查找 MSDN 网络广播:面向数据库专业人员的 Visual Studio 2005 Team Edition(第 4 部分,共 4 部分):架构源代码和版本控制
然而,尽管如此,如果您认为自己没有足够的决心来实现某种类型的版本控制(手动或半自动),那么我强烈建议您查看以下内容:
天啊!谈论让生活变得轻松!我有一个项目离开了我,并且有多个人进行架构更改,并且必须保持多个环境同步。将 Red Gate 产品指向两个数据库并查看差异然后同步它们是很简单的。
您可以存储数据库的备份(.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存储库或任何合适的存储中获取最新的DB备份
- 使用 bak 文件恢复当前数据库
我们使用组合,从较高的环境中进行备份。
以及使用 ApexSql 来处理架构的初始设置。
最近一直在使用 Subsonic 迁移,作为一种编码、源代码控制、通过 CI 方式运行来获取更改脚本的方式,还有德克萨斯州 headspring 开发的“tarantino”项目。
大多数这些方法,尤其是后者,可以安全地在大多数测试数据上使用。我特别喜欢自动的最后 2 个,因为我可以进行更改,下次有人获得最新版本时,他们只需运行“更新程序”,然后他们就会进入最新版本。