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

时间:2020-03-05 18:46:49  来源:igfitidea点击:

我在使用VS2008构建的Web应用程序上处于开发的早期阶段。我既有台式电脑(完成了大部分工作),也有笔记本电脑(出于偶尔的便携性),在笔记本电脑上使用AnkhSVN来保持项目代码同步。保持开发数据库(SQL Server Express)同步的最佳方法是什么?

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

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

解决方案

回答

我们可以存储数据库的备份(.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文件还原当前数据库

回答

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

  • Visual Studio .NET中的数据库项目
  • 数据架构-如何实施更改
  • 数据库是否受版本控制?
  • 使数据库受版本控制
  • 另请查找MSDN网络广播:适用于数据库专业人员的Visual Studio 2005 Team Edition(第4部分,共4部分):模式源和版本控制

但是,尽管如此,如果我们认为自己不足以实现某种类型的版本控制(手动或者半自动),那么我强烈建议我们检查以下内容:

  • 红门SQL比较
  • 红门SQL数据比较

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

回答

我们使用的组合,从较高环境中删除备份。
以及使用ApexSql处理架构的初始设置。
最近一直在使用Subsonic迁移,它是经过编码,源代码控制的,通过CI运行的方式,以获取更改脚本,还有一个由德克萨斯州首府开发的" tarantino"项目。

这些方法中的大多数,尤其是后者,可以在大多数测试数据之上安全使用。我特别喜欢自动化的last 2,因为我可以进行更改,并且下次有人更新时,他们只需运行"更新程序",然后将它们引入最新状态。

回答

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

对于已经维护了两年以上的应用程序的增量版本,我们采用了这种方法,并且效果很好。使用默认的数据脚本还可以使质量检查测试人员能够使用我们拥有的数据来重新创建错误?

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

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