我正在尝试编写一个脚本,该脚本将获取超过 30 分钟未更新表的记录。
示例记录:
DNS_NAME LAST_PERF_TIME
esxnu01 2013-12-24 12:10:00.000
esxnu02 2013-12-24 12:05:00.000
esxnu01 2013-12-24 12:15:00.000
esxnu03 2013-12-24 12:05:00.000
esxnu04 2013-12-24 12:20:00.000
esxnu02 2013-12-24 12:25:00.000
CREATE TABLE [dbo].[VPX_HOST](
[DNS_NAME] [nvarchar](255) NOT NULL,
[LAST_PERF_TIME] [datetime] NULL)
INSERT INTO [dbo].[VPX_HOST]
([DNS_NAME],[LAST_PERF_TIME])
VALUES
('esxnu01', '2013-12-24 12:10:00.000')
,('esxnu02','2013-12-24 12:05:00.000')
,('esxnu01','2013-12-24 12:15:00.000')
,('esxnu03','2013-12-24 12:05:00.000')
,('esxnu04','2013-12-24 12:20:00.000')
,('esxnu02','2013-12-24 12:25:00.000')
Run Code Online (Sandbox Code Playgroud)
Bre*_*zar 10
同一台服务器将多个更新记录到VPX_HOST
表中(我猜它看起来像 VMware 的虚拟中心)所以这有点棘手。
从技术上讲,这就是您要求的:
SELECT DISTINCT DNS_NAME
FROM dbo.VPX_HOST no_updates
WHERE NOT EXISTS (SELECT * FROM dbo.VPX_HOST updates WHERE no_updates.DNS_NAME = updates.DNS_NAME AND updates.LAST_PERF_TIME > DATEADD(mm, -30, GETDATE()))
ORDER BY DNS_NAME
Run Code Online (Sandbox Code Playgroud)
但你实际上不会喜欢它,因为如果你DNS_NAME
永久离线,就像你扔掉一个主机,它会继续出现在这里。因此,让我们修改查询,使其仅包含在最后一天添加条目的主机,而不是在过去 30 分钟内添加的主机:
SELECT DISTINCT DNS_NAME
FROM dbo.VPX_HOST no_updates
WHERE no_updates.LAST_PERF_TIME > DATEADD(dd, -1, GETDATE())
AND NOT EXISTS (SELECT * FROM dbo.VPX_HOST updates WHERE no_updates.DNS_NAME = updates.DNS_NAME AND updates.LAST_PERF_TIME > DATEADD(mm, -30, GETDATE()))
ORDER BY DNS_NAME
Run Code Online (Sandbox Code Playgroud)
WHERE
第三行的第一个条款说只给我在最后一天更新的服务器。如果你想回到更远的地方,你可以将 dd, -1 更改为类似 dd, -3 的内容以返回 3 天。
编辑性能- 请注意,这将扫描VPX_HOST
表,因此该表越大,此查询将变得越慢。如果您要经常运行它,您可能需要在(DNS_NAME, LAST_PERF_TIME)
.
归档时间: |
|
查看次数: |
2932 次 |
最近记录: |