1

We run Ola Hallengrens backup,dbcc & index jobs but we have not scheduled Output File Cleanup for some reason. Noticed this today and when we tried to run it on a server that had 2 or more instances it doesn't delete old logs. We have for example set up 1 server with 2 instances and it's set up with AvailabilityGroups. When running the script this is the output: (I've deleted a few rows so it didn't take up the whole page but it deleted a few files)

Date 2017-07-04 10:57:55 Log Job History (Output File Cleanup)

Step ID 1 Server SERVER1183\INST01 Job Name Output File Cleanup Step Name Output File Cleanup Duration 00:01:54 Sql Severity 0 Sql Message ID 0 Operator Emailed Operator Net sent Operator Paged Retries Attempted 0

Message Executed as user: 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... Process Exit Code 0. The step succeeded.

After checking in the Logs folder which is located: E:\MSSQL\INST01\MSSQL12.INST01\MSSQL\Log we still have 12500 files.

The jobs are set up as standard when adding Olas jobs, with output file config:

$(ESCAPE_SQUOTE(SQLLOGDIR))\IndexOptimize_$(ESCAPE_SQUOTE(JOBID))_$(ESCAPE_SQUOTE(STEPID))_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).txt

We have not changed the job command at all which is:

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"

The script works fine when it's a single instance or default instance. It's sql 2014 if that's relevant but we have this problem on 2008 & 2012 aswell.

Anyone got this figured out or know how to fix this?

  • 1
    What's the parameters you're using for the cleanup job? – Brent Ozar Jul 4 '17 at 10:17
  • The parameters we are using are: 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" The same that comes as default from Olas job – Jonathan Jul 4 '17 at 10:31
  • I should add that this works fine with 2 or more instances that are not set up with availability groups. It's only when it's more then 1 instance and AG set up. But what I did instead was to edit the parameters and change $(ESCAPE_SQUOTE(SQLLOGDIR)) to the actual path folder and it worked great. – Jonathan Jul 5 '17 at 13:00
  • Please post this solution as your answer as soon as you are able. – Randolph West Jul 6 '17 at 6:27
2

I should add that this works fine with 2 or more instances that are not set up with availability groups. It's only when it's more then 1 instance and AG set up. But what I did instead was to edit the parameters and change $(ESCAPE_SQUOTE(SQLLOGDIR)) to the actual path folder and it worked great.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.