1 sql-server sql-server-agent availability-groups
我正在使用 Always On AG 实现一个新的 HA/DR 架构,以便在 HA 和 DR 场景中使用。
我已经掌握了一种机制来确保在发生故障转移时禁用辅助副本上的作业并启用作业,但现在意识到,一旦发生这种情况,将没有可用的作业历史记录。作业历史记录对于确定在现已解散的主服务器上未运行或失败的内容以及需要在新的主服务器上运行的内容至关重要。
我正在努力寻找任何关于如何克服这个问题并使这些数据在新的主服务器上可用的文档。
有没有人遇到过这个问题,你是如何解决的?
我已经掌握了一种机制来确保在发生故障转移时禁用辅助副本上的作业并启用 [...]
希望这是在作业/作业步骤中使用sys.fn_hadr_is_primary_replica而不是实际启用和禁用作业。
[...] 但现在意识到,一旦发生这种情况,将无法获得工作经历。
你是对的。作业历史记录存储在作为系统数据库的 MSDB 中,默认情况下,SQL Server 2017 及以下系统数据库不能成为可用性组的一部分。这意味着工作历史将仅是本地的。
目前,改变这种情况的唯一方法是编写您自己的代码以将作业历史记录插入用户数据库(例如 dba 工具数据库)或从他们自己的独立作业服务器(可能是某些企业作业)运行作业调度程序)。没有任何内置功能可以自动执行此操作。
作业历史记录对于确定在现已解散的主服务器上未运行或失败的内容以及需要在新的主服务器上运行的内容至关重要。
我建议构建您自己的作业日志记录表,并在每个作业的作业步骤中编写必要的日志记录,以便您了解。这不仅仅是 AG 的事情,它是我应该根据我已经做过的事情开始和停止工作的地方,这是根本问题。在用户数据库中创建您自己的登录将解决此问题,尽管这不是唯一的方法(例如在另一台服务器上使用作业调度软件)。
编辑:我在争论是否要加入这个,因为虽然它是正式宣布的,但该功能背后的所有细节都不是公开的,可能会发生变化。但是,在 SQL Server 2019(尚未发布,在撰写本文时为 CTP 2.3)中,有些 System AG 确实将 master 和 model 作为可用性组的一部分。由于此功能当前不可用,公共文档不可用,并且某些项目可能会更改,我不想将其作为一个选项,但出于完整性考虑将其包含在内。