Estou procurando as melhores práticas ou análises que alguém teria seguido para identificar os bancos de dados não utilizados ou inativos em meu SQL Server.
Eu examinei muitos artigos, que dizem possivelmente ir para conexões de usuário e ativar rastreamentos para encontrar o uso do banco de dados, mas implementá-los criou mais confusão.
Por favor, ajude-me a entender se existe uma maneira melhor e mais segura de colocar meus bancos de dados offline depois de identificados.
Desculpe, o SQL Server não rastreia o uso do banco de dados. As pessoas têm ideias não tão inteligentes como um gatilho de logon que verifica o banco de dados padrão do login e/ou ORIGINAL_DB_NAME(). Mas isso perde todos os tipos de coisas, como usuários contidos, pessoas que posteriormente emitem um comando USE, consultas entre bancos de dados, etc.
Minha recomendação é o SQL Server Audit se você tiver uma edição apropriada (sua pergunta é leve em detalhes). Roubando do meu próprio post sobre este tópico :
Se você não tiver o Enterprise Edition, há uma maneira um pouco menos confiável de fazer isso, que é verificar as estatísticas de uso do índice DMV. Você precisará verificar isso com frequência e potencialmente por um longo tempo para ter certeza de que não está perdendo nada crucial, pois ele contém apenas dados desde a última reinicialização do SQL Server.
(Existem maneiras um pouco mais limpas de escrever essa sintaxe, mas sou preguiçoso e peguei emprestado do código que escrevi há mais de seis anos.)
Caveat Emptor
Você pode usar esses métodos para determinar possíveis candidatos dessa maneira, mas ainda não pode ter certeza de que alguém não tentará usar o banco de dados amanhã, no final do próximo ciclo de negócios etc. descartar bancos de dados que não aparecem na auditoria ou no DMV por alguns dias - isso realmente não é um bom indicador de que o banco de dados não está mais sendo usado. Quando você achar que encontrou candidatos para abandonar, por favor, não os abandone. Faça um backup adequado e completo; armazená-lo em outra máquina; em seguida, defina esses bancos de dados para
OFFLINE
:Agora, se o aplicativo de alguém quebrar repentinamente, ou um desenvolvedor perder seu trabalho, ou o CFO não puder executar seu relatório, você pode corrigi-lo com uma única instrução em vez de restaurar um backup ou simplesmente dizer a eles "azar" porque você nem mesmo tem um backup:
Em primeiro lugar, obrigado Aaron, sua solução funcionou!
Além disso, só para acrescentar, também usei a dica do Blog da Kendra Little http://www.brentozar.com/archive/2014/05/4-lightweight-ways-tell-database-used/
As 4 dicas, incluindo a de Aaron, me fizeram descobrir e chegar a uma conclusão sobre os bancos de dados não utilizados, colocaram-nos offline e sem alarmes a partir de agora.
Este post realmente me ajudou, então pensei em acrescentar como apliquei o SQL de Aaron e seu conceito de colocar o banco de dados offline para fazer isso automaticamente.
Meu cenário: temos servidores de desenvolvimento e preparação onde os bancos de dados são implantados, mas se tornam inativos e ficam lá por anos. Em vez de implorar às pessoas para "saírem e derrubarem seus bancos de dados inativos", criei um trabalho para fazer isso de forma intermitente.
Primeiro, crie este proc (talvez no master ou em outro lugar):
em seguida, chame isso, aproveitando o sp_MSforeachdb proc não documentado, talvez em um trabalho SQL mensal:
Minha advertência: este é um ambiente de desenvolvimento para que eu possa ser implacável e isso funciona para mim. Eu não faria isso na produção sem um mergulho mais profundo no dm_db_index_usage_stats DMV ou uma análise mais profunda das outras formas de Kendra de detectar bancos de dados inativos.
Tente isto: se a
last_access
coluna for nula, nenhuma leitura ou gravação ocorreu: