Назад | Перейти на главную страницу

Как я могу получить текущий статус восстановления mdoe БД по запросу?

Итак, моя база данных может находиться в трех разных состояниях.

И я хочу узнать текущий статус БД по запросу. Вы можете помочь мне ? Единственное, что я нашел, это

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