我正在寻找处理 SQL Server 2012 可用性组中计划的 SQL Server 代理作业的最佳实践。也许我错过了一些东西,但是在目前的状态下,我觉得 SQL Server 代理并没有真正与 SQL2012 的这个强大功能集成在一起。
如何让计划的 SQL 代理作业知道节点切换?例如,我有一个在主节点上运行的作业,它每小时加载数据。现在,如果主要服务器出现故障,我如何激活现在成为主要服务器的辅助服务器上的作业?
如果我总是在辅助上安排作业,它会失败,因为辅助是只读的。
sql-server sql-server-2012 sql-server-agent availability-groups
所以我最近才在始终在线的 AG 上启用 CDC。虽然许多消息来源声称在alwaysON AG上启用CDC就像在任何独立服务器上一样简单,但事实证明事实并非如此。正如 MS所说:
您应该在故障转移之前在所有可能的故障转移目标上创建[CDC 捕获和清理]作业,并将它们标记为禁用,直到主机上的可用性副本成为新的主副本。当本地数据库成为辅助数据库时,还应禁用在旧主数据库上运行的 CDC 作业。若要禁用和启用作业,请使用 sp_update_job (Transact-SQL) 的 @enabled 选项。有关创建 CDC 作业的详细信息,请参阅 sys.sp_cdc_add_job (Transact-SQL)。
事实证明,在我们在主副本上启用 CDC 后,辅助副本上绝对没有发生任何事情。因此,根据 MS 的建议,我进行了手动故障转移,并在那里创建了作业,然后又进行了一次故障转移回原始主数据库。
显然,正如上面引用中所暗示的那样,尽管 CDC 应该与alwaysOn AG 完全兼容,但它完全无法确定它当前是在主副本还是辅助副本上运行。
那么,背景介绍完了,让我们来回答我的问题:如何保证 CDC 作业始终在当前主副本上启用?并始终在辅助设备上禁用(以免产生错误)?
显然,alwaysOn AG 的一个重要点是,无论出于何种原因,您都不需要在主数据库因任何原因发生故障时手动到达那里,因为辅助数据库将弥补空闲并保持系统在线,我认为然后预计它会创建每个副本上的一个作业,不断轮询它们的状态并改变 CDC 作业的状态?
如果这是正确的,您对如何进行此操作有什么具体建议、具体脚本或指南等吗?因为显然这在全球范围内是一个相当普遍的困境,我必须在每个副本上手动创建一个新的 TSQL 作业,只是为了使用alwaysOn AG 执行 CDC 的基本基本功能,这似乎很奇怪。
这似乎不太可能,这就是我问的原因。或者我误解了什么?谢谢!
sql-server ×2