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

1 分钟阅读
0

我有一个适用于 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 Agent 作业复制。在多可用区环境中启用作业复制后,SQL Server Agent 会自动将作业从主机复制到辅助主机。您无需在新的主副本上手动创建作业,因为代理复制功能会同步这些作业。这些作业在两个副本中都可用。

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

**注意:**以下解决方案不适用于 Amazon RDS Custom for 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 更新。然后,继续进行多可用区失效转移。

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

以下类别的作业可复制:

  • [Uncategorized (Local)]
  • [Uncategorized (Multi-Server)]
  • [Uncategorized]
  • 数据收集器
  • 数据库引擎优化顾问
  • 数据库维护
  • 全文

**注意:**仅复制使用步骤类型作为 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 = '';

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

AWS 官方
AWS 官方已更新 1 年前