【发布时间】:2019-01-29 22:57:58
【问题描述】:
我正在尝试设置一个进程,该进程将检查可用性组中所有服务器上的代理作业并报告辅助副本中可能缺少的任何内容。
我已经设置了来自 AG 的所有服务器的 CMS,并且可以跨副本运行代理作业的查询,但我只想返回一些服务器上的作业,而不是所有服务器上的作业。
我编写了一个查询来使用 COUNT() 获取此信息,但由于查询结果是按服务器分组的,所以这不起作用。我还尝试将结果放在一个临时表中,看看这是否有帮助,但这似乎并没有太大的不同。
AG 中有四台服务器,以下查询应返回不在所有四台服务器上的任何作业的名称,但由于它似乎也返回服务器名称,因此无法将它们识别为相同的作业.
CREATE TABLE #jobs (
JobName NVARCHAR(128))
INSERT INTO #jobs
SELECT name JobName
FROM sysjobs
SELECT *
FROM #jobs
GROUP BY JobName
HAVING COUNT(*) < 4
ORDER BY JobName
DROP TABLE #jobs
目前的查询会抛出如下结果集:
+------------+------------------------------------------+
| ServerName | JobName |
+------------+------------------------------------------+
| ServerA | DBA DatabaseBackup - AG_DATABASES - FULL |
| ServerA | OutputFile Cleanup |
| ServerB | DBA DatabaseBackup - AG_DATABASES - FULL |
| ServerB | IndexOptimize - USER_DATABASES |
| ServerC | DBA DatabaseBackup - AG_DATABASES - FULL |
| ServerB | IndexOptimize - USER_DATABASES |
| ServerD | DBA DatabaseBackup - AG_DATABASES - FULL |
| ServerD | Output File Cleanup |
+------------+------------------------------------------+
所有四台服务器都存在 DBA DatabaseBackup - AG_DATABASES - FULL 作业,所以我不希望返回这个,但由于来自 CMS 连接的隐式 servername 列,它不会将它们识别为相同的值。
【问题讨论】:
-
你能发一个sysjob表内容的例子吗?
-
这是任何 sysjobs 表的标准输出,所以我不确定您需要什么?该表也有很多列,因此很难在此处放置您可以理解的输出。您想要我的查询而不是标准 sysjobs 表的示例输出吗?
-
由于您的临时表只有一列,因此您的查询结果不能有两列。
-
@WolfgangKais 什么是“它”?您用于获取作业名称的查询仅选择一列:
SELECT name JobName FROM sysjobs -
@BrianPressler 是的,这就是我的意思。那么查询如何“抛出如下结果集”(包括
ServerName在内的2列)?
标签: sql sql-server content-management-system