在两个SQL Server数据库之间同步表

时间:2018-01-03 11:53:24

标签: sql-server database azure-sql-database

目前我有两个SQL Server数据库Database_OneDatabase_Test

  • Database_One表示我不会修改的用户数据。
  • Database_Test代表Database_One的副本,但包含我在开发过程中编辑的测试数据。

将来我可能有Database_TwoDatabase_Three等,因为更多客户使用我的程序。

目前,如果我需要在Database_Test中的表中添加一列,我需要手动将其添加到所有其他数据库中。

我宁愿拥有一个系统,其中所有数据库都是主数据库的副本,但拥有自己的数据。因此,如果我需要向master数据库中的表添加新列,则会将其复制到所有其他列,但数据对于每个数据库(以及客户端)都是单独的。

是否有一种方法可以让我使用SQL Server数据库执行此操作?

我还应该补充一点,这些是在Azure中运行的SQL Server实例。

我还希望这种机制能够复制数据库结构,而不是它的数据,这样我以后就可以轻松设置新数据库。

5 个答案:

答案 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)

我不知道,执行此任务的最佳做法是什么,但让我简要介绍一下我的实践,因为我发现它简单安全的手动过程

每个DDLDML的物理文件都保存在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内容类型。

Source - MS Docs

处于高水平; SSDT在源代码中转换数据库对象,并提供将更新发布到目标服务器的机制。

SSDT绝不是唯一的软件。其他选项包括Ready Roll, form Redgate

为您选择合适的工具只是旅程的开始。通过适当的控制措施以快速,稳健的方式实现变革需要时间并且经过深思熟虑。幸运的是,有很多人可以提供帮助。史蒂夫琼斯(来自SQL Server Central)出现在关于这个主题的几个channel 9 videos上。他是DevOps的大倡导者,如果你想了解更多,那么值得关注。

答案 4 :(得分:0)

您可以使用弹性作业来管理架构更改和所有租户数据库。请检查示例应用程序here。对所有租户数据库模式和数据进行更改。

您可以将所有租户数据库放在弹性池中,并使用Elastic Database作业来简化大型数据库的管理,并允许跨池中的所有数据库执行Transact-SQL(T-SQL)脚本。阅读更多here