Answers:
是的,您将需要在希望其他特定作业为主要副本的其他任何副本上创建作业。
您需要为每个SQL Server代理作业运行时/何时创建自己的逻辑。例如,是否要仅在当前实例是特定可用性组的主副本时才运行作业?您需要将其投入您的工作中。不能自动覆盖它,因为这将剥夺AlwaysOn AG的灵活性。是否要在辅助副本上禁用它们完全取决于您,这些作业的功能以及运行它们的方式/时间/时间。
请记住,辅助副本服务器不仅仅是等待故障转移的备用服务器。它可能是功能齐全的可访问服务器。因此,让所有工作闲置都是极大的残疾。
因此,是的,您将需要将我们的作业推送到其他副本,并使用一些逻辑来确定作业在启动时是否应继续执行。
例如,备份作业可以通过确定当前副本是否是特定数据库的首选副本来利用sys.fn_hadr_backup_is_preferred_replica函数。这将推导您如何为备份首选项设置可用性组。
我在联机丛书中遇到了类似的挫败感,说“在安排您的工作时,添加仅在主数据库上执行的逻辑”,但没有说如何做。sys.fn_hadr_backup_is_preferred_replica对于备份作业非常好,但是对于“ is primary”或您拥有的东西似乎没有相似的功能。幸运的是,您可以从类似以下内容中获取该信息:
select
DB_NAME(database_id),role_desc
from
sys.dm_hadr_availability_replica_states a
inner join
sys.dm_hadr_database_replica_states d
on
a.replica_id = d.replica_id
and
a.group_id = d.group_id
where
database_id = DB_ID()
and
d.is_local = 1
那只会让您知道当前数据库所处的角色。