|
| 1 | +-- Update database backup schedules |
| 2 | +-- Part of the SQL Server DBA Toolbox at https://github.com/DavidSchanzer/Sql-Server-DBA-Toolbox |
| 3 | +-- This script updates the schedule for the Ola Hallengren SQL Agent jobs "DatabaseBackup - USER_DATABASES - FULL" and "DatabaseBackup - USER_DATABASES - DIFF". |
| 4 | +-- The full backup will be on a random day of the week at a random time between 7pm and 11pm, and the differential backup will be likewise but daily. |
| 5 | + |
1 | 6 | SET NOCOUNT ON;
|
2 | 7 |
|
3 | 8 | -- 1. Update the schedule for the Full backup job to a random day of the week and a random time between 7pm and 11pm
|
4 | 9 | DECLARE @schedule_id INT,
|
5 | 10 | @freq_interval INT,
|
6 | 11 | @random_time INT,
|
7 |
| - @job_id UNIQUEIDENTIFIER, |
8 |
| - @name sysname, |
9 |
| - @command NVARCHAR(MAX), |
10 | 12 | @message VARCHAR(1000);
|
11 | 13 |
|
12 | 14 | -- To generate a random integer between @Upper and @Lower: ROUND(((@Upper - @Lower) * RAND() + @Lower), 0)
|
@@ -92,74 +94,3 @@ EXEC [msdb].[dbo].[sp_update_schedule] @schedule_id = @schedule_id,
|
92 | 94 |
|
93 | 95 | SET @message = 'Differential database backup job: updated schedule to every day at ' + CAST(@random_time AS CHAR(6));
|
94 | 96 | PRINT @message;
|
95 |
| - |
96 |
| --- 3. Update the @Directory parameter for all Ola Hallengren database backup jobs from <FromValue> to <ToValue> |
97 |
| -DECLARE @test TABLE |
98 |
| -( |
99 |
| - [step_id] INT NULL, |
100 |
| - [step_name] sysname NULL, |
101 |
| - [subsystem] NVARCHAR(40) NULL, |
102 |
| - [command] NVARCHAR(MAX) NULL, |
103 |
| - [flags] INT NULL, |
104 |
| - [cmdexec_success_code] INT NULL, |
105 |
| - [on_success_action] TINYINT NULL, |
106 |
| - [on_success_step_id] INT NULL, |
107 |
| - [on_fail_action] TINYINT NULL, |
108 |
| - [on_fail_step_id] INT NULL, |
109 |
| - [server] sysname NULL, |
110 |
| - [database_name] sysname NULL, |
111 |
| - [database_user_name] sysname NULL, |
112 |
| - [retry_attempts] INT NULL, |
113 |
| - [retry_interval] INT NULL, |
114 |
| - [os_run_priority] INT NULL, |
115 |
| - [output_file_name] NVARCHAR(200) NULL, |
116 |
| - [last_run_outcome] INT NULL, |
117 |
| - [last_run_duration] INT NULL, |
118 |
| - [last_run_retries] INT NULL, |
119 |
| - [last_run_date] INT NULL, |
120 |
| - [last_run_time] INT NULL, |
121 |
| - [proxy_id] INT NULL |
122 |
| -); |
123 |
| - |
124 |
| -DECLARE [job_cur] CURSOR LOCAL FAST_FORWARD FOR |
125 |
| -SELECT [job_id], |
126 |
| - [name] |
127 |
| -FROM [msdb].[dbo].[sysjobs] |
128 |
| -WHERE [name] LIKE 'DatabaseBackup%' |
129 |
| -FOR READ ONLY; |
130 |
| - |
131 |
| -OPEN [job_cur]; |
132 |
| - |
133 |
| -FETCH [job_cur] |
134 |
| -INTO @job_id, |
135 |
| - @name; |
136 |
| - |
137 |
| -WHILE @@FETCH_STATUS = 0 |
138 |
| -BEGIN |
139 |
| - DELETE FROM @test; |
140 |
| - |
141 |
| - INSERT INTO @test |
142 |
| - EXEC [msdb].[dbo].[sp_help_jobstep] @job_id = @job_id, @step_id = 1; |
143 |
| - |
144 |
| - SELECT @command = [command] |
145 |
| - FROM @test; |
146 |
| - |
147 |
| - IF CHARINDEX(N'<FromValue>', @command) > 0 |
148 |
| - BEGIN |
149 |
| - SET @command = REPLACE(@command, N'<FromValue>', N'<ToValue>'); |
150 |
| - |
151 |
| - EXEC [msdb].[dbo].[sp_update_jobstep] @job_id = @job_id, |
152 |
| - @step_id = 1, |
153 |
| - @command = @command; |
154 |
| - |
155 |
| - SET @message = @name + ': updated command to ' + @command; |
156 |
| - PRINT @message; |
157 |
| - END; |
158 |
| - |
159 |
| - FETCH [job_cur] |
160 |
| - INTO @job_id, |
161 |
| - @name; |
162 |
| -END; |
163 |
| - |
164 |
| -CLOSE [job_cur]; |
165 |
| -DEALLOCATE [job_cur]; |
0 commit comments