我正在尝试运行以下作业:
IF (SELECT ars.role_desc
FROM sys.dm_hadr_availability_replica_states ars
INNER JOIN sys.availability_groups ag
ON ars.group_id = ag.group_id
AND ars.is_local = 1) <> 'PRIMARY'
BEGIN
--We're on the secondary node, throw an error
THROW 50001, 'Unable to execute job on secondary node',1
END
但最终得到错误:
子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。[SQLSTATE 21000](错误 512)。该步骤失败。
我在另一个 sql server 上工作但是在这个特定的我收到这个错误消息并且无法真正弄清楚为什么。我是 SQL 的新手,希望得到一些帮助。两台服务器的sql版本没有区别。
下面是工作 SQL 作业的结果:
消息以用户身份执行:VT\sqladmin-internaltes。无法在辅助节点 [SQLSTATE 42000] 上执行作业(错误 50001)。该步骤失败。
如评论中所述,实例中必须有多个可用性组。我建议你使用这个功能。详情在这里。
您可以运行此查询来检查您有多少个可用性组。
如果您无法运行 SQL Server 2012,那么不幸的是,SqlWorldWide 将无法为您工作(尽管您是 2014 年或更高版本,这是可行的方法)。我最终编写了自己的函数来在较低版本上处理这个问题......
在主数据库中创建它并调用
它返回:
1 - 如果数据库可写(包括不在 AG 中的数据库)
0 - 如果数据库在 AG 中是次要的
-1 - 如果数据库不存在