Mat*_*006 3 sql-server ola-hallengren
我正在寻找一种简单的方法来更新从 Ola 的 MaintenanceSolution.sql 脚本创建的作业,而不必完全删除和重新创建它们,也不必通过进入作业的属性来单独修改每个作业,然后进入步骤并修改命令。
具体来说,我正在尝试更新@CleanupTime
参数,该参数用于告诉作业何时删除旧备份。根据他的常见问题解答,每当他的脚本的新版本可用并且您想更新到该新版本时,您只需要下载 MaintenanceSolution.sql 脚本并再次运行它,@CreateJobs = 'N'
如果没有,可以选择指定 SET想创造就业机会。这告诉我,如果你离开@CreateJobs = 'Y'
,它会重新创造就业机会,但情况似乎并非如此。
例如,如果“DatabaseBackup - USER_DATABASES - FULL”作业已经存在,并且步骤中的命令显示@CleanupTime = 48
,那么我使用 重新运行 MaintenanceSolution.sql 脚本@CleanupTime = 168
,然后返回作业的步骤,它仍然显示@CleanupTime = 48
。
您可以更新步骤而无需完全重新创建所有内容,也无需在 UI 中指向和单击自己至死。您可以直接针对 msdb.dbo.sysjobsteps 编写手动查询(从发出 REPLACE() 调用的 SELECT 开始,然后当您满意时,将其更改为 UPDATE)。
SELECT REPLACE(js.command, N'foo', N'bar')
FROM msdb.dbo.sysjobsteps AS js
INNER JOIN msdb.dbo.sysjobs AS j
ON js.job_id = j.job_id
WHERE j.name = N'name of the job';
Run Code Online (Sandbox Code Playgroud)
当您感到满意时,它是正确的,只有前几行会发生变化:
UPDATE js
SET command = REPLACE(js.command, N'foo', N'bar')
FROM msdb.dbo.sysjobsteps AS js
INNER JOIN msdb.dbo.sysjobs AS j
ON js.job_id = j.job_id
WHERE j.name = N'name of the job';
Run Code Online (Sandbox Code Playgroud)
很难实现比这更高的自动化(例如一次更新多个作业),因为您要替换的字符串在所有作业步骤中可能并不完全相同,而且您也可能会得到误报。
归档时间: |
|
查看次数: |
750 次 |
最近记录: |