web-dev-qa-db-ja.com

バックアップディレクトリパスの変更Olaメンテナンススクリプト

Ola( https://ola.hallengren.com )によるSQL Server Maintenance Solutionを使用してバックアップを構成しました。

バックアップジョブで、BackupDirectoryを共有フォルダーとして指定しました(例:\ comp1\path)。問題なく動作しましたが、パスを変更する必要があります。ジョブを変更/再作成したくない場合、SQLジョブ内のパスを変更する方法はありますか?

2
Syakur Rahman

次のステートメントを使用して、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>'を含む行を必ず削除してください。

4

補足するだけです 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%'

enter image description here

私の場合は次のようになります:

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

enter image description here

フォルダが存在するかどうか、必要なすべての権限があるかどうかを手動で再確認する必要がある場合があります

その後、適切なタイミングで完全バックアップジョブをチェックして、最後まで正常に実行されるかどうかを確認できます。

exec msdb.dbo.sp_start_job @job_name = 'DatabaseBackup - USER_DATABASES - FULL'
2