【发布时间】:2021-07-28 10:47:08
【问题描述】:
我使用 T-SQL 脚本来监控 SQL Server。
对于检查数据库是否在线的那个,我有一个问题:每天晚上,我现在恢复一个数据库,所以我在 04:05 到 04:15 之间收到警报。
我想修改我的脚本,以便在 24 小时内检查所有数据库,但在我恢复它的时候除外。
这是我检查数据库是否不在线的查询:
SELECT name
FROM master.sys.databases
WHERE state_desc <> 'ONLINE'
当我尝试这样做时:
SELECT name
FROM master.sys.databases
WHERE state_desc <> 'ONLINE'
AND DATEPART (HOUR, GETDATE ()) = 04
AND DATEPART (MINUTE, GETDATE ()) BETWEEN 05 AND 15
AND name <> 'TEST'
其他时间我都瞎了。
然后:
SELECT name
FROM master.sys.databases
WHERE state_desc <> 'ONLINE'
OR state_desc <> 'ONLINE'
AND DATEPART (HOUR, GETDATE ()) = 04
AND DATEPART (MINUTE, GETDATE ()) BETWEEN 05 AND 15
AND name <> 'TEST'
我仍然可以看到我的数据库不在线。
我离解决方案不远,但我被困住了。
有人可以帮帮我吗?
提前致谢。
【问题讨论】:
-
WHERE state_desc <> 'ONLINE' OR state_desc <> 'ONLINE'背后的想法是什么? -
整个部分是
OR state_desc <> 'ONLINE' AND DATEPART (HOUR, GETDATE ()) = 04 AND DATEPART (MINUTE, GETDATE ()) BETWEEN 05 AND 15 AND name <> 'TEST',目的是避免显示除TEST数据库之外的所有数据库 -
@Thalyn SQL Server 并不像其他语言那样真正尊重操作顺序,因此您应该始终将补充标准包含在括号内,根据我在下面的回答
标签: sql-server database skip hour