Servidor de failover para erros de espelhamento do SQL Server após a reinicialização

1

Eu tenho dois servidores Windows Server 2008 configurados, ambos executando o SQL Server 2008 R2. Um é usado como um banco de dados primário, o outro como um failover de espelho (dois bancos de dados de sites + ASPState para sessões). Tudo funciona muito bem até que um dos bancos de dados se torne o principal depois que o servidor em que ele é executado for reinicializado. Eu recebo este erro:

Invalid object name 'tempdb.dbo.ASPStateTempSessions'.

Eu posso resolver isso executando o procedimento armazenado ASPState_Startup (que executa ASPState.dbo.CreateTempTables ), mas somente se o banco de dados for o estado "principal". Quando um servidor for reinicializado, ele sempre retornará com os bancos de dados em um estado "Espelhar / Restaurar", o que significa que não posso executar esse SP na inicialização.

Alguma sugestão sobre como posso contornar este problema?

    
por Alec Sanger 07.06.2013 / 16:59

1 resposta

1

Tente configurar um trabalho do SQL Agent que seja executado em cada instância, a cada minuto, e execute um script para procurar o banco de dados em um estado não restaurado, verifique a tabela e execute o procedimento se ele não existir. Peguei os nomes dos objetos da sua pergunta para que possam ser alterados caso estejam fora do seu ambiente.

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
    
por 08.06.2013 / 04:27