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