在特定时间跳过特定数据库

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:0504:15 之外的时间段内 state_desc 不是 ONLINE 的所有数据库,但仅限那些在该期间内没有 TESTname