在特定时间跳过特定数据库
Skip specific database during specific hours
我使用 T-SQL 脚本来监控 SQL 服务器。
对于检查数据库是否在线的那个,我有一个问题:每天晚上,我现在恢复一个数据库,所以我在 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
子句中更具体一些,以确保您应用的标准完全符合您的要求:
select [name]
from master.sys.databases
where state_desc <> 'ONLINE' -- Only return the database when it is not online
and ([name] <> 'TEST' -- when either it isn't the TEST database
or (cast(getdate() as time) < '04:05' -- or we are outside the TEST
or cast(getdate() as time) >= '04:15' -- database restore window
)
)
这将做的是 return 在 04:05
到 04:15
之外的时间段内 state_desc
不是 ONLINE
的所有数据库,但仅限那些在该期间内没有 TEST
的 name
。
我使用 T-SQL 脚本来监控 SQL 服务器。
对于检查数据库是否在线的那个,我有一个问题:每天晚上,我现在恢复一个数据库,所以我在 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
子句中更具体一些,以确保您应用的标准完全符合您的要求:
select [name]
from master.sys.databases
where state_desc <> 'ONLINE' -- Only return the database when it is not online
and ([name] <> 'TEST' -- when either it isn't the TEST database
or (cast(getdate() as time) < '04:05' -- or we are outside the TEST
or cast(getdate() as time) >= '04:15' -- database restore window
)
)
这将做的是 return 在 04:05
到 04:15
之外的时间段内 state_desc
不是 ONLINE
的所有数据库,但仅限那些在该期间内没有 TEST
的 name
。