我们托管了许多客户SQL Server数据库,这些数据库需要在几乎实时的情况下复制到外部客户站点。我们的主要限制是,出于安全考虑,我们的数据库被部分包含,以确保客户A不能看到客户B的数据库。
根据客户的大小,数据库的大小从5GB到200 5GB不等。在任何一天,通常都有多达5GB的更改。
其他的限制因素是我们的SQL服务器被保护在防火墙和DMZ后面。我们不想直接把它们暴露给顾客。我们在DMZ中托管的代理可能是一种解决办法。此外,可用性组、镜像和日志传送具有版本兼容性约束,这将导致与单个客户的紧密耦合,更不要说跨多个具有多种SQL版本的客户。我们正在运行SQLServer2019 Enterprise,AFAIK意味着客户需要运行SQLServer2019以实现可用性组、镜像或日志传送兼容性。
到目前为止我考虑过的选择
有人处理过这样的情况吗?你是如何解决的?复制数据库还有哪些其他选择?
发布于 2021-04-27 01:17:09
有趣的问题要解决。我对包含的数据库不太熟悉,但是经过一些快速的研究,我了解了它们的一般用途以及您所面临的挑战。
出现在脑海中的少数几个想法可能是在研究日志运输或数据库镜像。与常规发送BACPAC文件相比,您可能可以安排更频繁的与这些方法之一的数据同步。
最后,看起来包含的数据库确实支持可用性组,但我不确定这是否会有多大帮助,因为AlwaysOn可用性组需要在可用性组的服务器之间安装Windows故障转移群集,我认为这不利于您的业务场景。
经过更多的集思广益、研究和重新阅读你所写的东西之后,也许有一种方法可以像你提到的那样,利用Azure这样的云提供商。这个DBA.StackExchange答案为将数据移动到Azure实例提供了一些选项。此外,它让我想起了SSIS,您应该能够利用它来将数据从DMZ中的实例同步到外部服务器(无论是Azure中的还是or中的)。
发布于 2021-04-28 03:31:01
我过去曾为Attunity (现在是Qlik的一个部门)工作,他们的复制产品可以很好地解决这个问题(价格)。复制任务(可能运行在专用服务器上)将连接到具有特定于客户的或“上帝”凭据的源数据库,并写入特定于客户的目标数据库。这些任务可以设置为执行满载和基于日志的CDC,以提供近乎实时的复制。目标数据库不一定是Server。他们可以是甲骨文,雪花,mySQL -任何想要的。
发布于 2021-04-28 06:40:55
我建议建立一种人工程序。您必须在目标数据库中开发和部署一种使用SSIS包生成的ETL过程。使用一组包,在suorce中检测每个表中的更改,并将它们合并到目标db中。
工作计划可以是这样的:
它可以每x分钟运行一次,具体取决于检测和复制更改所需的时间。但这是一项艰巨的任务(开发和维护)。
https://dba.stackexchange.com/questions/290510
复制相似问题