Creates a SQL Agent job, (00:00) Maintenance – CycleErrorLogs, that starts a new error log every night so each log stays small and easy to read. If the job already exists it is left alone. Tested on SQL Server 2017 and 2025 and safe to run more than once.
-- 02.Cycle_Error_Logs.sql
-- Author: Clive Roberts DBA. For SQL Server 2016 to 2022 (tested on SQL Server 2017 and 2025). Safe to run again.
-- Change the settings below if needed, then run it (F5, normal mode, not SQLCMD).
GO
USE [msdb];
GO
IF EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name = N'(00:00) Maintenance - CycleErrorLogs')
BEGIN PRINT N' Job already exists, left as it is: (00:00) Maintenance - CycleErrorLogs'; RETURN; END;
BEGIN TRANSACTION;
DECLARE @ReturnCode INT;
SELECT @ReturnCode = 0;
IF NOT EXISTS
(
SELECT name
FROM msdb.dbo.syscategories
WHERE name = N'DBA_Maintenance'
AND category_class = 1
)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category
@class = N'JOB',
@type = N'LOCAL',
@name = N'DBA_Maintenance';
IF(@@ERROR <> 0
OR @ReturnCode <> 0)
GOTO QuitWithRollback;
END;
DECLARE @jobId BINARY(16);
EXEC @ReturnCode = msdb.dbo.sp_add_job
@job_name = N'(00:00) Maintenance - CycleErrorLogs',
@enabled = 1,
@notify_level_eventlog = 2,
@notify_level_email = 0,
@notify_level_netsend = 0,
@notify_level_page = 0,
@delete_level = 0,
@description = N'No description available.',
@category_name = N'DBA_Maintenance',
@owner_login_name = N'sa',
@job_id = @jobId OUTPUT;
IF(@@ERROR <> 0
OR @ReturnCode <> 0)
GOTO QuitWithRollback;
/****** Object: Step [CycleLogs] Script Date: 06/10/2014 11:19:44 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep
@job_id = @jobId,
@step_name = N'CycleLogs',
@step_id = 1,
@cmdexec_success_code = 0,
@on_success_action = 1,
@on_success_step_id = 0,
@on_fail_action = 2,
@on_fail_step_id = 0,
@retry_attempts = 0,
@retry_interval = 1,
@os_run_priority = 0,
@subsystem = N'TSQL',
@command = N'EXEC sp_cycle_errorlog;
GO',
@database_name = N'master',
@flags = 0;
IF(@@ERROR <> 0
OR @ReturnCode <> 0)
GOTO QuitWithRollback;
EXEC @ReturnCode = msdb.dbo.sp_update_job
@job_id = @jobId,
@start_step_id = 1;
IF(@@ERROR <> 0
OR @ReturnCode <> 0)
GOTO QuitWithRollback;
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule
@job_id = @jobId,
@name = N'Daily',
@enabled = 1,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 1,
@freq_subday_interval = 0,
@freq_relative_interval = 0,
@freq_recurrence_factor = 0,
@active_start_date = 20060922,
@active_end_date = 99991231,
@active_start_time = 0,
@active_end_time = 235959;
IF(@@ERROR <> 0
OR @ReturnCode <> 0)
GOTO QuitWithRollback;
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver
@job_id = @jobId,
@server_name = N'(local)';
IF(@@ERROR <> 0
OR @ReturnCode <> 0)
GOTO QuitWithRollback;
COMMIT TRANSACTION;
GOTO EndSave;
QuitWithRollback:
IF(@@TRANCOUNT > 0)
ROLLBACK TRANSACTION;
EndSave:
GO
GO