Executamos os trabalhos de backup, dbcc e index do Ola Hallengrens, mas não agendamos a limpeza do arquivo de saída por algum motivo. Percebi isso hoje e quando tentamos executá-lo em um servidor que tinha 2 ou mais instâncias, ele não exclui logs antigos. Por exemplo, configuramos 1 servidor com 2 instâncias e é configurado com AvailabilityGroups. Ao executar o script, esta é a saída: (excluí algumas linhas para não ocupar a página inteira, mas excluí alguns arquivos)
Data 2017-07-04 10:57:55 Histórico do trabalho de registro (limpeza do arquivo de saída)
ID da Etapa 1 Servidor SERVER1183\INST01 Nome do Trabalho Limpeza do Arquivo de Saída Nome da Etapa Limpeza do Arquivo de Saída Duração 00:01:54 Severidade Sql 0 ID da Mensagem Sql 0 Operador Enviado por Email ao Operador Rede enviada Operador Paginado Tentativas 0
Mensagem Executado como usuário: VT\sqladmin-internaltes. ...8C0E25584E08C4CB393567C2C66083E_1_20170301_132833.txt" del "E:\MSSQL\INST01\MSSQL12.INST01\MSSQL\Log"\"DatabaseBackup_0x18C0E25584E08C4CB393567C2C66083E_1_20170304_200000.txt" del "E:\MSSQL\INST01\MSSQL12.INST01\MSSQL\Log"\"DatabaseBackup_0x6DFC82E95 ... Código de saída do processo 0. A etapa foi bem-sucedida.
Após verificar na pasta Logs que está localizada: E:\MSSQL\INST01\MSSQL12.INST01\MSSQL\Log ainda temos 12500 arquivos.
Os trabalhos são configurados como padrão ao adicionar trabalhos Olas, com configuração do arquivo de saída:
$(ESCAPE_SQUOTE(SQLLOGDIR))\IndexOptimize_$(ESCAPE_SQUOTE(JOBID))_$(ESCAPE_SQUOTE(STEPID))_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).txt
Não alteramos o comando job, que é:
cmd /q /c "For /F "tokens=1 delims=" %v In ('ForFiles /P
"$(ESCAPE_SQUOTE(SQLLOGDIR))" /m *_*_*_*.txt /d -30 2^>^&1') do if
EXIST "$(ESCAPE_SQUOTE(SQLLOGDIR))"\%v echo del
"$(ESCAPE_SQUOTE(SQLLOGDIR))"\%v& del
"$(ESCAPE_SQUOTE(SQLLOGDIR))"\%v"
O script funciona bem quando é uma instância única ou instância padrão. É o sql 2014 se isso for relevante, mas também temos esse problema em 2008 e 2012.
Alguém conseguiu resolver isso ou sabe como resolver?
Devo acrescentar que isso funciona bem com 2 ou mais instâncias que não estão configuradas com grupos de disponibilidade. É somente quando é mais de 1 instância e AG configurado. Mas o que eu fiz foi editar os parâmetros e alterar $(ESCAPE_SQUOTE(SQLLOGDIR)) para a pasta do caminho real e funcionou muito bem.