Ola( https://ola.hallengren.com )によるSQL Server Maintenance Solutionを使用してバックアップを構成しました。
バックアップジョブで、BackupDirectoryを共有フォルダーとして指定しました(例:\ comp1\path)。問題なく動作しましたが、パスを変更する必要があります。ジョブを変更/再作成したくない場合、SQLジョブ内のパスを変更する方法はありますか?
次のステートメントを使用して、sysjobstepsテーブルのコマンド列で現在のジョブにあるパスを検索できます。
SELECT * FROM msdb.dbo.sysjobsteps AS s WHERE s.command LIKE '%\\comp1\path%'
その後、次のステートメントでsysjobstepsを更新できます。
USE msdb
GO
UPDATE sysjobsteps SET command = REPLACE(command, '<your_old_path_here>', '<your_new_path_here>')
最初にSELECTを実行して、正しいコマンドが返されているかどうかを確認するように注意する必要があります。予防策として、開始する前にmsdbをバックアップすることもできます。
安全を確保するために、ジョブを右クリックして[ジョブのスクリプトを作成|ドロップして作成|新しいクエリエディターウィンドウ]をクリックし、パスを変更して実行します。
ジョブを再作成する前に、sp_add_jobscheduleパーツの@schedule_uid=N'<GUID>'
を含む行を必ず削除してください。
補足するだけです ho2useによる素晴らしい答え
以下のクエリを使用して、バックアップの現在の場所を確認します。
USE [msdb]
GO
SELECT j.job_id,
s.srvname,
j.name,
js.step_id,
js.command,
j.enabled
FROM dbo.sysjobs j
JOIN dbo.sysjobsteps js
ON js.job_id = j.job_id
JOIN master.dbo.sysservers s
ON s.srvid = j.originating_server_id
WHERE js.command LIKE N'%BACKUP%'
私の場合は次のようになります:
EXECUTE [dbo].[DatabaseBackup]
@Databases = 'USER_DATABASES',
@Directory = N'\\homer\FullBackups\',
@BackupType = 'FULL',
@Verify = 'Y',
@CleanupTime = 72,
@CheckSum = 'Y',
@LogToTable = 'Y'
次に交換を行います:
USE msdb
GO
--do a backup of the table before the update
SELECT T.*
INTO dbo._BACKUP_OF_sysjobsteps_184413_4
FROM [dbo].[sysjobsteps] T
BEGIN TRAN T1
SELECT @@TRANCOUNT
UPDATE sysjobsteps SET command = REPLACE(command, '\\homer\FullBackups\', '\\homer\sys_vol\TS-SQLBackups')
--(14 rows affected)
COMMIT TRAN T1
SELECT @@TRANCOUNT
ジョブが新しいフォルダーを指すようになったので、古いフォルダーに以前に付与されていたすべての権限を新しいフォルダーに付与する必要があります。
これを行うためによく使用するpowershellスクリプト があります。
これはpowershell
で実行されます:
$ Acl = Get-Acl "\ homer\FullBackups" Set-Acl "\ homer\sys_vol\TS-SQLBackups" $ Acl
フォルダが存在するかどうか、必要なすべての権限があるかどうかを手動で再確認する必要がある場合があります
その後、適切なタイミングで完全バックアップジョブをチェックして、最後まで正常に実行されるかどうかを確認できます。
exec msdb.dbo.sp_start_job @job_name = 'DatabaseBackup - USER_DATABASES - FULL'