gpt4 book ai didi

sql - 识别辅助副本上缺少的代理作业

转载 作者:行者123 更新时间:2023-12-03 03:13:21 25 4
gpt4 key购买 nike

我正在尝试设置一个流程,该流程将检查可用性组中所有服务器上的代理作业,并报告辅助副本中可能缺少的任何作业。

我对 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 列,它无法将它们识别为相同的值。

最佳答案

正如 GMB 提到的,您需要提取“名称”字段的一部分。

我建议将字符串拆分为 ServerName 和 JobName。

假设名称由 - 分隔,就像在您的示例中一样,您的代码可能如下所示。

CREATE TABLE #jobs (
ServerName NVARCHAR(128)
,JobName NVARCHAR(128))

INSERT INTO #jobs
SELECT
LEFT(name,CHARINDEX('-',name)-1) AS ServerName --Takes the Part left of the first -
, RIGHT(name,LEN(name) - CHARINDEX('-',name)) AS JobName --Takes the Part right of the first -
FROM sysjobs

SELECT JobName
FROM #jobs
GROUP BY JobName
HAVING COUNT(*) < 4
ORDER BY JobName

DROP TABLE #jobs

关于sql - 识别辅助副本上缺少的代理作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53650491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com