web-dev-qa-db-ja.com

ジョブ内のドライブへのすべての参照を別のドライブに置き換えます

すべてのSQLサーバーのバックアップ が現在G:ドライブに保存されているサーバーがあります。

ドライブGには、過去5日間のバックアップを保持するのに十分なディスク容量がありません。このG:ドライブにさらに100 GBを追加するように依頼しましたが、それは不可能でした。そのため、下の図に示すように、代わりにI:ドライブにディスク容量を追加してもらいました。

enter image description here

次に、新しいI:ドライブを指すように、以下のSQL ServerジョブのG:ドライブへのすべての参照を置き換える必要があります。

enter image description here

同じ状況で3台のサーバーがあるとすると、T-SQLでこれを実現するにはどうすればよいですか?

1

このカーソルアプローチを試して、 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
3
Scott Hodgin

完全を期すために(スクリーンショットから、Olaのバックアップソリューションを使用しているため)、Olaのスクリプトの新しいバージョンには ディレクトリ構造を指定する機能 があります。

デフォルトのディレクトリ構造:{ServerName} $ {InstanceName} {DirectorySeparator} {DatabaseName} {DirectorySeparator} {BackupType}{Partial}{CopyOnly}

問題- DatabaseBackup-構成可能なフォルダー名 は閉じられます。

1
Kin Shah

msdb..sysjobstepsテーブルを更新できます。

UPDATE s
SET command = Replace(command, 'G:\', 'I:\')
FROM msdb..sysjobsteps s
    JOIN msdb..sysjobs o ON s.job_id = o.job_id
WHERE o.[name] LIKE 'DatabaseBackup%'
0
Denis Rubashkin

もう1つは、必要なジョブをスクリプト化し、SSMSを介して実行できるドライブの場所を変更するためのものです。 SQLServerエージェントのジョブをクリックします。

enter image description here

次に、[オブジェクトエクスプローラーの詳細を表示]をクリックするか、を押します F7enter image description here

そのウィンドウに入ったら、 ctrlleft click 必要な仕事のために

script jobsを選択し、drop and createをクリックします。 enter image description here

これにより、ドロップが作成され、すべてのジョブのスクリプトが1つのスクリプトで作成されます。これが生成されたら、それを確認してドライブの場所を手動で新しい場所に変更するか、SSMSでFind and Replaceを実行できます。
スクリプトを実行して、必要なパラメーターを使用して新しいジョブを作成します。

0
Biju jose