Итак, моя база данных может находиться в трех разных состояниях.
И я хочу узнать текущий статус БД по запросу. Вы можете помочь мне ? Единственное, что я нашел, это
SELECT is_in_standby
FROM sys.databases
WHERE [name] = 'MyDb1'
И если MyDb1
на самом деле в StandBy
режим дам следующее:
is_in_standby
-------------
1
Но есть ли способ определить, что MyDb1
в NoRecovery
Режим ?
Вы можете попробовать это -
SELECT rhistory.destination_database_name,rhistory.restore_date,
rhistory.destination_database_name,rhistory.user_name,
CASE
WHEN rhistory.[recovery] = 0 THEN 'NoRecovery'
WHEN sysdb.[is_in_standby] = 1 THEN 'StandBy'
ELSE 'Recovery' END AS Recovery_State
FROM msdb..restorehistory rhistory
INNER JOIN sys.databases sysdb ON sysdb.name=rhistory.destination_database_name
ORDER BY rhistory.restore_date DESC
Итак, наконец-то я нашел решение. На самом деле это своего рода слияние двух запросов
SELECT
case
when is_in_standby = 1 then N'YES'
else 'NO'
END as STANDBY
, DATABASEPROPERTYEX ('MyDb1', 'Status') STATUS
FROM sys.databases
WHERE [name] = 'MyDb1'
Результат
STANDBY STATUS
------- ------
YES ONLINE