Pergunta

Estou trabalhando com um banco de dados SQL Server 2000 que provavelmente possui algumas dezenas de tabelas que não são mais acessadas.Gostaria de limpar os dados que não precisamos mais manter, mas não sei como identificar quais tabelas remover.

O banco de dados é compartilhado por vários aplicativos diferentes, portanto não posso ter 100% de certeza de que a revisão deles me dará uma lista completa dos objetos usados.

O que eu gostaria de fazer, se possível, é obter uma lista de tabelas que não foram acessadas há algum tempo.Sem leituras, sem gravações.Como devo abordar isso?

Foi útil?

Solução

O MSSQL2000 não fornecerá esse tipo de informação.Mas uma maneira de identificar quais tabelas SÃO usadas (e então deduzir quais não são) é usar o SQL Profiler, para salvar todas as consultas que vão para um determinado banco de dados.Configure o criador de perfil para registrar os resultados em uma nova tabela e, em seguida, verifique as consultas salvas lá para encontrar todas as tabelas (e visualizações, sps, etc.) usadas por seus aplicativos.

Outra maneira que acho que você pode verificar se há alguma "gravação" é adicionar uma nova coluna de carimbo de data / hora a cada tabela e um gatilho que atualiza essa coluna sempre que há uma atualização ou inserção.Mas lembre-se de que se seus aplicativos fizerem consultas do tipo

select * from ...

então eles receberão uma nova coluna e isso poderá causar alguns problemas.

Outras dicas

Outra sugestão para rastrear tabelas nas quais foram gravadas é usar Resgate de log SQL do Red Gate (livre).Esta ferramenta mergulha no log do banco de dados e mostra todas as inserções, atualizações e exclusões.A lista também é totalmente pesquisável.

Ele não atende aos seus critérios para pesquisar leituras no banco de dados, mas acho que a técnica do SQL Profiler lhe dará uma boa ideia sobre isso.

Se você tiver colunas lastupdate, poderá verificar as gravações, não há realmente uma maneira fácil de verificar as leituras.Você pode executar o profiler, salvar o rastreamento em uma tabela e fazer check-in lá

O que eu costumo fazer é renomear a tabela prefixando-a com um sublinhado, quando as pessoas começam a gritar eu apenas renomeio de volta

Se não for usado, você quer dizer que seu aplicativo não tem mais referências às tabelas em questão e você está usando sql dinâmico, você poderia fazer uma pesquisa pelos nomes das tabelas em seu aplicativo, se eles não existirem, surpreenda-os.

Também produzi todos os sprocs, funções, etc.para um arquivo de texto e fiz uma busca pelos nomes das tabelas.Se não for encontrado, ou for encontrado em procedimentos que também precisarão ser excluídos, destrua-os.

Basta excluí-los e ver se algum usuário reclama ;)

Parece que usar o Profiler vai funcionar.Depois de deixá-lo rodar por um tempo, devo ter uma boa lista de tabelas usadas.Qualquer pessoa que não use suas tabelas todos os dias provavelmente poderá esperar que elas sejam restauradas do backup.Obrigado, pessoal.

Provavelmente tarde demais para ajudar a mogrificar, mas para quem estiver fazendo uma pesquisa;Eu procuraria todos os objetos usando esse objeto em meu código e, em seguida, no SQL Server executando isto:

selecione distinto '[' + object_name (id) + ']'
de comentários do sistema
onde texto como '%MY_TABLE_NAME%'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top