一次更新多个SQL数据库中的SQL架构

一次更新多个SQL数据库中的SQL架构,sql,redgate,Sql,Redgate,我们的问题是,我们有一个带有个人身份数据的在线应用程序。我们已经向多个客户销售了此应用程序,他们所在州的法律规定数据必须在他们所在州的物理位置。这就是为什么我们在不同的位置有相同的数据库(而不是相同的数据) 现在我们使用RealGuestSQL比较,但是当我们继续增长时,每次更新都要做八、九、十次(如果是一个小的存储过程错误修复或者一个更大的改变,创建一个新的表),效率就会越来越低。市场部告诉我们还有五个州在路上 我们已经研究了RedGate方法,但是它的编码和故障排除比它的价值更多 那么…你知

我们的问题是,我们有一个带有个人身份数据的在线应用程序。我们已经向多个客户销售了此应用程序,他们所在州的法律规定数据必须在他们所在州的物理位置。这就是为什么我们在不同的位置有相同的数据库(而不是相同的数据)

现在我们使用RealGuestSQL比较,但是当我们继续增长时,每次更新都要做八、九、十次(如果是一个小的存储过程错误修复或者一个更大的改变,创建一个新的表),效率就会越来越低。市场部告诉我们还有五个州在路上

我们已经研究了RedGate方法,但是它的编码和故障排除比它的价值更多


那么…你知道如何将模式从一个数据库更新到多个数据库吗?

我假设这是SQL Server,因为你指定了“RedGate SQL Compare”而不是“MySQL Compare”。如果不是SQL Server,请忽略此项

不必采用新的工具集(甚至不必支付RedGate费用),而且由于数据库(而不是数据)是相同的,因此可以设置一个中央管理服务器(),注册每个SQL Server实例,构建部署脚本(仍然可以使用SQL Compare进行此操作),然后使用CMS根据需要将模式更改同时推送到所有实例或定义的组中


这将假定您正在对所有服务器使用windows身份验证,并且无论谁进行部署,都可以在所有服务器上拥有相同的访问权限,但对于这种类型的多服务器管理来说,这是一个相当不错的解决方案,而且这是一个已经存在了一段时间的可靠功能(2008年).

SQL Management Studio中有一个功能可以运行。在SMS中使用CTRL-ALT-G。这将显示“已注册的服务器”。在“本地组”下,可以创建组。一个用于测试,一个用于现场。然后右键单击您创建的本地组并选择“新建服务器注册”。在“常规”选项卡下为其命名,然后在“连接属性”选项卡中,仅选择一个数据库。继续为组中所需的每个数据库添加“新服务器注册”。完成后,只需右键单击您的组并选择“新建查询”。您在其中输入的任何内容都将在组中的所有数据库上运行。
因此,如果我们所有的数据库都是相同的,并且您需要进行更新,请使用Redgate进行比较。选择“创建部署脚本”而不是“使用SQL比较部署”,然后复制SQL。右键单击该组并说“新建查询”粘贴并执行。

我为Redgate工作,所以我很想进一步推广它,不过,我们暂时忽略它

如果您想一次将部署自动化到许多服务器,我建议您使用诸如Azure DevOps Pipelines或AWS DeveloperTools之类的工具,甚至是诸如Octopus或Jenkins之类的第三方产品。这个想法很简单,可以使用任何您喜欢的工具,直到您的键盘,来创建部署所需的工件(您的SQL Server T-SQL脚本)。然后,其中一个流控制工具中的代理执行繁重的任务,确保脚本部署到多个位置。因为您可以为这些代理配置独立的安全性,所以您自己不必拥有与通过SSM或中央管理服务器控制内容所需的相同级别的安全性。此外,该方法允许非常简单的并行执行。您自己能够做到这一点的唯一方法是通过一些相当广泛的PowerShell(或Python)工作

虽然我很想将Redgate作为这个解决方案的一部分来推广,但实际上它并没有必要(只是更好)。您可以按任何方式生成必要的工件。重要的一点是能够准确地控制它们的部署方式,跟踪成功和失败的部署,不同级别的必要安全性,所有这些。这正是我前面提到的工具的目的


还有,是的,这是一大堆工作。自动化部署是绝对可行的方法。然而,这不是没有劳动。你不用花时间去做容易出错、重复、枯燥和缓慢的手工流程,而是花时间和精力去实现自动化。与其说工作被淘汰了,不如说工作被重新定位了。然后,您将获得自动化的所有好处。但是,您必须维护它、增长它、扩展它,并处理其中的问题。所有工作。

非常感谢,但我们需要让一名程序员专门维护DevOps,确保任何更改都能正确实现,然后让另一名程序员重新检查工作,并进行测试。我们根本没有时间和金钱。对我们来说,最好的解决方案根本不存在——允许RedGate SourceControl和DataControl从一个数据库查看到多个数据库,然后单击进行更新。这取决于购买还是构建。或者,实际上,更现实地说,建造一些与建造很多。我倾向于建造一些。