如何在我的 RDS for SQL Server 多可用区实例中的主机和辅助主机之间同步 SQL Server Agent 作业?

上次更新日期:2022 年 10 月 14 日

我想在用于 Microsoft SQL Server 多可用区实例的 Amazon Relational Database(Amazon RDS)中的主机和辅助主机之间同步 SQL Server Agent 作业。应如何操作?

简短描述

Amazon RDS for SQL Server 在后台为多可用区设置使用始终开启/镜像。SQL Server Agent 作业存储在 msdb 系统数据库中。此系统数据库不会作为多可用区部署的一部分进行复制。因此,SQL Server Agent 作业不会自动同步。在进行失效转移后,您必须在新的主机上重新创建作业。但是,这些作业存在于最初创建它们的旧主机上。如果您将实例故障恢复到之前的主机(最初创建作业的主机),则您仍可看到这些作业。要在多可用区中创建作业,请先在主(活动)实例中创建作业。然后,对 RDS 实例进行故障转移,并在新的主实例上创建相同的任务。

要避免在新的主实例上手动创建作业,请启用 SQL 代理作业复制。在多可用区环境中开启作业复制功能后,SQL Server Agent作业将自动从主机复制到辅助主机。您不必在新的主副本上手动创建作业,因为它们已通过代理复制功能进行了同步。在这两个副本中均提供作业。

有关更多信息,请参阅 Amazon RDS for Microsoft SQL Server 的多可用区部署

解决方法

打开 SQL 代理复制功能

使用主实例上的管理员账户运行执行以下程序,以启用 SQL Server Agent 作业复制。

重要说明:确保在所有代理作业均可用的实例上执行此程序。如果没有可用代理作业的实例成为主实例,且您开启了此功能,那么辅助实例上的所有作业都将删除。另请注意,所有现有作业和新建作业都将作为此功能的一部分进行复制。

EXECUTE msdb.dbo.rds_set_system_database_sync_objects
@object_types = 'SQLAgentJob';

验证 SQL 代理复制功能是否已开启

使用以下查询来验证复制功能是否已开启:

SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();

如果复制功能已开启,则前面的查询会针对 object_class 返回 SQLagentjob。如果查询未返回任何内容,则表明该功能未开启。

验证已修改的作业和新作业上次与辅助实例上的作业同步的时间

使用以下查询来查看复制的 last_sync_time

SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();

在查询结果中,如果同步时间晚于作业更新时间或创建时间,则作业会与辅助实例上的作业同步。

注意:如果您不知道作业创建时间或更新时间,请运行以下查询检索时间戳,然后运行先前的查询:

select name as 'JobName'
,JobStatus = CASE
    When enabled =1 Then 'Active'
    Else 'Inactive'
    END
,date_created As 'JobCreatedOn' ,date_modified as 'LastModified'
from msdb..sysjobs

注意:作业需要几分钟才能在副本间同步。

如果要执行数据库失效转移,以确认作业是否已复制,请等待 last_sync_time 更新后再继续对多可用区进行失效转移。

辅助实例上作业的状态

无论是否使用辅助副本上的复制功能,SQL Server Agent XP 都处于已禁用状态。因此,这些作业不在辅助服务器上运行。

代理作业复制支持和不支持的作业类别

以下类别的作业可复制:

  • [未分类(本地)]
  • [未分类(多服务器)]
  • [未分类]
  • 数据收集器
  • 数据库引擎优化顾问
  • 数据库维护
  • 全文

注意:仅复制使用步骤类型作为 T-SQL 的作业。

以下作业类别不支持复制:

  • 具有以下步骤类型的作业:如 SQL Server Integration Services(SSIS)、SQL Server Reporting Services(SSRS)、复制和 PowerShell。
  • 使用数据库邮件和服务器级对象的作业。

关闭 SQL Server Agent 作业复制

要关闭 SQL Server Agent 作业复制,请运行以下命令:

EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = '';

关闭复制后,对现有作业和新建作业做出的修改将不再与其他副本同步。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?