我可以在某些表没有主键的情况下创建数据库的 AlwaysOn 复制吗?

Geo*_*ald 1 sql-server sql-server-2016

使用 SQL Server 2016,我有一个 3rd 方应用程序,它使用我的 SQL Server 上的大型数据库进行数据存储、处理等。

我有一个 BI 团队需要访问这些数据来运行报告和批处理任务,其中一些包括使服务器瘫痪的繁重查询,因此他们无法在实时数据库上执行此操作。为此,我有一个现有的日志传送解决方案,该解决方案维护此数据库的复制供他们使用,但是依赖于该复制数据的数据量和用户数量已经增长到使数据库脱机的程度一天中多次执行日志传送更新已不再可接受。

因此,我想使用 AlwaysOn 可用性组复制而不是日志传送,以便数据在工作时间内保持在线状态并自动更新。

但是,我的问题是我正在复制其数据库的应用程序有点陈旧过时,而且设计它的人显然不知道或不太关心数据库优化,因为很多较大的表没有一个主键。

我已经为一些表添加了索引,这工作正常,但是如果我完全修改表的结构(例如添加主键),应用程序拒绝将它们识别为有效并停止工作。因此,在我说服供应商添加它们之前,这些表将不得不保留没有主键,这可能需要数年时间。

与此同时,有什么我可以做的吗?我试过使用事务复制,它复制了所有带有主键的表就好了,但是没有键的表根本不存在于复制的数据库中。

我听说合并复制可以在没有主键的表上完成,并且可以对可用性组使用合并复制。真的吗?如果是,您能指出我创建此类复制的正确方向吗?

Ton*_*kle 7

可用性组使用的复制类似于数据库镜像,而不是表复制(SQL Server 复制)。AG 复制对表上的主键没有要求。限制和限制清楚地记录在Always On 可用性组的先决条件、限制和建议 -> 可用性数据库先决条件和限制中。

对于您所描述的情况,您可能希望为 Always On 可用性组配置只读路由,并让 BI 团队将其包含ApplicationIntent=ReadOnly在连接字符串中,以便他们的查询在辅助服务器上运行。