Existem etapas especiais necessárias para evitar a corrupção de dados ao reiniciar um servidor que hospeda uma instância do MS SQL Server?
Por exemplo, encontrei recentemente a recomendação de interromper o serviço SQL manualmente. Meu entendimento é que isso é tratado pelo shutdown
processo do Windows.
Tenho certeza de que há um zilhão de passos que pessoas individuais podem recomendar, como o que acabei de mencionar, mas gostaria de evitar repetir práticas obsoletas ou supersticiosas . Existem recomendações da Microsoft ou padrões generalizados do setor?
Esta pergunta está relacionada ao procedimento de curto prazo de reinicialização de uma máquina. Há outra questão em relação ao procedimento de longo prazo de garantir que uma máquina não seja utilizada, antes de desligá-la permanentemente.
Você não precisa ser chique/preocupado ou assustado quando estiver reiniciando o sql server.
Apenas certifique-se de que você não tenha transações de longa duração. O melhor é reiniciar o sql server usando o console ou o comando de desligamento durante um período de atividade baixa/mínima, também chamado de janela de manutenção, para minimizar o impacto em seus negócios.
Se você tiver alguma configuração de DR e não quiser ficar inativo, o melhor é fazer o failover e reiniciar o nó passivo ou secundário.
O encerramento limpo do SQL Server ocorre nos cenários abaixo:
Acima de todas as situações, o sql server encerra todos os seus bancos de dados de forma limpa e, em seguida, encerra o serviço que envolve confirmar ou reverter todas as transações, gravar todas as páginas sujas no disco e, em seguida, gravar uma entrada no log de transações.
Desligamento incorreto do sql server:
O SQL Server sempre tentará fazer um desligamento limpo... a menos que você faça algo impróprio como indicado acima.
Alguns links de leitura muito bons sobre o que acontece nos bastidores durante a fase de recuperação:
Tudo isso é detalhado exaustivamente nesta página.
Sendo que sua pergunta pergunta especificamente "há algum recomendado pela Microsoft " estou inclinado a pensar que isso é contraproducente ter essa discussão aqui. O artigo detalha o processo através
Se esses passos são satisfatórios ou não, seria minha opinião, o que você não quer. Portanto, a resposta certa estará sempre mais atualizada lá.
Parando o serviço, antes de desligar
Não, não é necessário. Quando o Kernel do Windows enviar o sinal de desligamento para o SQL Server, ele o fará de maneira segura e o sistema aguardará a conclusão. Falando em geral, qualquer coisa construída com a capacidade de desligar com segurança não precisa ser desligada manualmente, e é lógico que todos os aplicativos da Microsoft sigam sua própria API e procedimentos vinculados às fases
PRESHUTDOWN
, ou .SHUTDOWN
A partir dos documentosPRESHUTDOWN
, que eu presumo que eles estejam usando,Como pode ser necessário, suponho que é assim que o SQL Server funciona.
Não exatamente quando se trata de desligar e prevenir a corrupção do banco de dados. O MS SQL Server é um produto muito maduro e as chances de causar um problema de corrupção por um simples 'desligamento' seriam um cenário de borda. É muito mais provável que você cause corrupção por não executar CHECK DB ou ter a validação de soma de verificação definida em seu banco de dados.
Talvez ter ferramentas externas tocando diretamente os arquivos MDF/NDF/LDF possa causar problemas, como tentar 'mover' os arquivos entre os desligamentos ou fazer com que algum software tente bloquear os arquivos durante o desligamento. Eu vi o Windows Clustering estragar quando um disco que hospeda arquivos de banco de dados está cheio, mas não causa especificamente 'corrupção de banco de dados'.
Se você quiser ajudar a garantir um desligamento ou failover suave, execute um ponto de verificação, verifique se está executando o DBCC CHECKDB com frequência (pelo menos vezes o suficiente para poder recuperar dados corrompidos de um backup) e verifique se todas as dependências externas estão cuidados como o espelhamento.
Se algum especialista tiver outras 'melhores práticas', eu adoraria ouvi-las, mas vasculhando os blogs e recursos on-line nos últimos anos, não vi muito em corrupção de dados e um simples 'desligamento/reinicialização'.
A maneira como eu faço isso: 1) Desabilite todos os trabalhos. 2) Certifique-se de que nenhum trabalho esteja sendo executado no momento. 3) Execute SP_Who3 com frequência para verificar a atividade, também execute sp_whoisactive para obter mais informações. 4) Se não houver atividade e a única coisa que você vê é sua consulta sp_who3 atual 5) Coloque os bancos de dados offline 6) Clique com o botão direito do mouse na parte superior do banco de dados e clique em Parar 7) Verifique se os serviços estão em um estado parado em services.msc 8 ) Feito
PS. Caso você tenha um PAGEIOLATCH / IOCOMPLETION ou qualquer outra atividade no SP_Who3, não faça o acima, pois isso pode colocar seus bancos de dados em modo de recuperação.