Sql 数据库版本控制&x2013;如何返回到以前的版本并保留数据?
形势 我正在开发一个web应用程序,它使用SQL server存储数千条记录。我们目前正在使用源代码管理软件来保存应用程序的每个版本。该应用程序有两个主要版本:Sql 数据库版本控制&x2013;如何返回到以前的版本并保留数据?,sql,sql-server,database,version-control,Sql,Sql Server,Database,Version Control,形势 我正在开发一个web应用程序,它使用SQL server存储数千条记录。我们目前正在使用源代码管理软件来保存应用程序的每个版本。该应用程序有两个主要版本: 测试版本(我们正在实际开发的版本) 实时版本(当前在网站上的版本) 我们大约每个月都会发布一个新的“主要”实时版本,但在这段时间内,我们可能会在当前的实时版本上发现许多小错误。为了修复这些bug,我们返回到测试机器上当前运行的Live版本(我们使用共享数据库进行测试…)。复制错误,找到原因,修复它,然后我将补丁应用到错误版本,然后立
- 测试版本(我们正在实际开发的版本)
- 实时版本(当前在网站上的版本)
根据我的经验,我建议结合使用数据库备份和数据库升级脚本。对于主要版本,您应该保留生产或类似生产的数据的备份(根据合同,您可能有义务清除或更改包含客户姓名、地址、银行账号等的数据)。从这一点开始,您应该能够访问数据库的任何中间版本,因为您正在编写数据库升级脚本,并将它们保存在源代码管理系统中(您目前正在这样做,对吗?) 出于实际原因,您应该至少有两个单独的QA环境:一个是数据库模式和应用程序与您的生产环境相匹配的环境,另一个是与正在开发的版本相匹配的环境
虽然数据库备份很大,但您只需要保留一些最新的备份,除非您预期需要对一个已停用多年的版本进行事后错误分析。在SQL Server中,您可以从服务器分离数据库文件,并将其置于版本控制之下(如果您愿意)。它们可以在以后重新连接到同一台或另一台服务器 程序如下:
就这样。您有一个数据库副本,可以在以后重新附加。如果您试图避免为可能需要还原的每个历史版本保留备份,为什么不尝试将当前生产备份的还原副本降级到所需版本 如果您使用的是VS数据库项目,那么您将有一个可以返回的版本历史记录。您可以使用VS Schema Compare将数据库项目的历史版本与恢复的生产数据库进行比较。如果没有数据移动更改(例如,表/列拆分/合并),那么它应该成功地降级您的数据和模式(否则您可能需要手动更正自动生成的脚本)。有些人会在升级脚本的同时维护降级脚本,以简化此过程,但这需要遵守规则 完成后,如果希望再次返回到最新版本,可以在数据库上运行现有的升级过程,使其返回到最新版本。或者,恢复测试数据库的备份可能更简单
如果您选择使用SQL源代码管理和SQL比较,这也是我推荐的方法。使用DB备份有什么问题吗?还有一些小问题:它们的文件大小很大。我需要将它们与我的代码的每个版本相关联,所以我应该将这些巨大的文件置于版本控制之下。对于测试,备份是可以的,但在现场,我不能在转到另一个版本时简单地擦除所有数据。如果有,我就走后路