用于监视 SQL Server 数据库状态的最佳查询是什么?

bre*_*ers 21 sql-server-2008 sql-server

我希望能够运行查询以获取有关数据库状态的关键信息。即,我希望查询能够判断数据库是否处于良好状态。

这是我为此检查继承的查询:

SELECT name AS [SuspectDB],
  DATABASEPROPERTY(name, N'IsSuspect') AS [Suspect],
  DATABASEPROPERTY(name, N'IsOffline') AS [Offline],
  DATABASEPROPERTY(name, N'IsEmergencyMode') AS [Emergency],
  has_dbaccess(name) AS [HasDBAccess]
FROM sysdatabases
WHERE (DATABASEPROPERTY(name, N'IsSuspect') = 1)
   OR (DATABASEPROPERTY(name, N'IsOffline') = 1)
   OR (DATABASEPROPERTY(name, N'IsEmergencyMode') = 1)
   OR (has_dbaccess(name) = 0)
Run Code Online (Sandbox Code Playgroud)

如果该查询返回任何结果,则假定数据库处于可疑或潜在的不良状态。

有一个更好的方法吗?

And*_*SQL 12

如果您使用的是 SQL 2005+ 并且只想返回 DB 不在“ONLINE”状态的 DB 名称,我会使用这个:

SELECT
    name
FROM sys.databases
WHERE state != 0;
Run Code Online (Sandbox Code Playgroud)

请记住,参与镜像或日志传送的数据库不会在线或可能会定期更改状态。有关 sys.databases DMV 的更多信息,请参阅此处的文档:http : //msdn.microsoft.com/en-us/library/ms178534.aspx


gbn*_*gbn 9

我会使用较新的sys.databases而不是sydatabases,否则这是可以的

尤其是,您不需要 DATABASEPROPERTY 调用

SELECT
   name, state_desc
FROM
   sys.databases
WHERE
   state IN (4, 5, 6)
Run Code Online (Sandbox Code Playgroud)