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

Отказоустойчивый сервер для ошибок зеркала SQL Server после перезагрузки

У меня установлены два сервера Windows Server 2008, на обоих работает SQL Server 2008 R2. Одна используется как основная БД, другая как резервное зеркало (две БД веб-сайтов + ASPState для сеансов). Все работает отлично, пока одна из БД не станет основной после перезагрузки сервера, на котором она работает. Я получаю такую ​​ошибку:

Invalid object name 'tempdb.dbo.ASPStateTempSessions'.

Я могу решить эту проблему, запустив хранимую процедуру ASPState_Startup (который выполняет ASPState.dbo.CreateTempTables), но только если БД является «главным» состоянием. Когда сервер перезагружается, он всегда возвращается к БД в состоянии «Зеркало / Восстановление», что означает, что я не могу запустить этот SP при запуске.

Любые предложения о том, как я могу обойти эту проблему?

Попробуйте настроить задание агента SQL, которое запускается в каждом экземпляре каждую минуту и ​​выполняет сценарий для поиска базы данных в не восстанавливаемом состоянии, проверяет таблицу и затем выполняет процедуру, если она не существует. Я взял имена объектов из вашего вопроса, поэтому их может потребоваться изменить, если они не в вашей среде.

if exists ( select 1 from sys.databases where state_desc <> 'RESTORING' and 
[name] = 'ASPState' )
begin
    if ( object_id('tempdb.dbo.ASPStateTempSessions') is null )
    begin
        exec sp_executesql @stmt = N'exec ASPState.dbo.CreateTempTables'
    end
end