Sql-Server

將作業中對驅動器的所有引用替換為另一個驅動器

  • August 10, 2018

我有一台伺服器,我的所有 sql 伺服器備份目前都保存到 G: 驅動器。

現在驅動器 G:上沒有足夠的磁碟空間來保存最近 5 天的備份。我已要求在此 G: 驅動器上再添加 100 GB,但這是不可能的,所以他們給了我另一個驅動器,即具有額外磁碟空間的 I: 驅動器,如下圖所示。

在此處輸入圖像描述

現在我需要替換下面 sql server 作業中對 G: 驅動器的所有引用,以指向新的 I: 驅動器。

在此處輸入圖像描述

假設我有 3 台伺服器處於相同的情況,我如何通過 T-SQL 實現這一點?

您可以嘗試這種游標方法從dbo.sysjobsteps讀取行,並在搜尋/替換要更改的字元串後執行sp_update_jobstep 。

這也可以改進為僅更新實際具有字元串的作業步驟。

DECLARE @cmd VARCHAR(max)
DECLARE @job_id UNIQUEIDENTIFIER
DECLARE @step_id INT
DECLARE @command NVARCHAR(max)

DECLARE _CURSOR CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT job_id
   ,step_id
   ,command
FROM msdb.dbo.sysjobsteps

OPEN _CURSOR

FETCH NEXT
FROM _CURSOR
INTO @job_id
   ,@step_id
   ,@command

WHILE @@FETCH_STATUS = 0
BEGIN
   SET @command = replace(@command, 'g:', 'I:')

   EXEC msdb.dbo.sp_update_jobstep @job_id = @job_id
       ,@step_id = @step_id
       ,@Command = @command

   FETCH NEXT
   FROM _CURSOR
   INTO @job_id
       ,@step_id
       ,@command
END --End While

CLOSE _CURSOR

DEALLOCATE _CURSOR

引用自:https://dba.stackexchange.com/questions/214586