目前我有Database_One
和Database_Test
,两个SQL Server数据库。
Database_One
代表我的用户数据,我不会修改。Database_Test
代表Database_One
的复制品,但有我在开发时编辑的测试数据。随着更多客户使用我的程序,未来我可能会有Database_Two
,Database_Three
等。
目前,如果我需要在Database_Test
中向表中添加列,我需要手动将其单独添加到所有其他数据库。
我宁愿有一个系统,其中所有数据库都是主数据库的副本,但有自己的数据。因此,如果我需要向master数据库中的表添加新列,则会将其复制到所有其他列,但数据对于每个数据库(以及客户端)都是单独的。
有没有一种方法可以让我用SQL Server数据库执行此操作?
我还应该补充一点,这些是在Azure中运行的SQL Server实例。
我也想要这种机制来复制数据库结构,但不是它的数据,这样我以后就可以轻松地设置新的数据库了。
在维护离散数据集的同时,没有内置方法可以执行您想要的操作。相反,我建议使用源代码控制作为数据库的集中位置构建完整的部署过程,然后从那里自动部署。这就是我如何做你正在尝试的同样的事情。此外,它允许您在部署到生产服务器之前自动执行测试和验证。 This free book I wrote涵盖了很多一般过程。有关详细信息,我们需要开始讨论工具。
如果我们考虑使用“_test”数据库作为主要开发流和最终数据库结构的最简单的“部署”过程
然后可以使用简单的SQL模式比较工具执行新版本的最简单“安装”(如添加列)
您的“_Test”数据库将是应用于所有目标数据库的架构的“源”数据库架构比较将查找并突出显示所有差异并自动准备要执行到目标数据库的SQL脚本
这里有关于不同架构比较的讨论,视觉工作室中的一个非常方便,也适用于大型数据库..并且已经存在!
What is best tool to compare two SQL Server databases (schema and data)?
我不知道,执行此任务的最佳做法是什么,但让我简要介绍一下我的实践,因为我发现它简单安全的手动过程
每个DDL
和DML
的物理文件都保存在SVN
中,并在每次提交时应用于每个相关版本。例如,我已经有了创建名为test
的表的脚本,现在,我需要再添加一列作为category
,然后我在单独文件中的脚本将是:
IF COL_LENGTH('test', 'category') IS NULL
BEGIN
ALTER TABLE test ADD category INT
END
GO
脚本文件现在保存在SVN Repository
中,并将应用于每个版本。
Microsoft发布了一个名为SQL Server数据工具(SSDT)的Visual Studio加载项。
SQL Server数据工具是一种现代开发工具,您可以免费下载该工具来构建SQL Server关系数据库,Azure SQL数据库,Integration Services包,Analysis Services数据模型和Reporting Services报告。使用SSDT,您可以像在Visual Studio中开发应用程序一样轻松地设计和部署任何SQL Server内容类型。
在较高的水平; SSDT在源代码中转换数据库对象,并提供将更新发布到目标服务器的机制。
SSDT绝不是唯一的软件。其他选择包括Ready Roll, form Redgate。
为您选择合适的工具只是旅程的开始。通过适当的控制措施以快速,稳健的方式提供变更需要花费时间和仔细考虑。幸运的是,有很多人可以提供帮助。 Steve Jones(来自SQL Server Central)出现在几个关于这个主题的channel 9 videos上。他是DevOps的大倡导者,如果你想了解更多,那么值得关注。