天天看點

YourSQLDba 配置——修改備份路徑

    公司一直使用YourSQLDba做本地備份,錄音帶機将本地備份檔案上帶做異地容災備份。近期整理、驗證備份時發現本地備份目錄命名五花八門

<a href="http://images.cnitblog.com/blog/73542/201407/152317287718047.png"></a>

其中有曆史原因,也有無規劃化的緣故,看着這些五花八門的目錄,越看越不順眼。于是想統一規範化。備份目錄統一為DB_BACKUP,完整備份位于FULL_BACKUP子目錄,事務日志備份位于LOG_BACKUP子目錄下。例如如下所示:

    完整備份目錄    :G:\DB_BACKUP\FULL_BACKUP\

    事務日志備份目錄:G:\DB_BACKUP\LOG_BACKUP\

于是需要修改YourSQLDba備份路徑,本來是一個簡單的事情,但是在測試過程中,發現了一些小問題,特此記錄一下:

<b></b> 

<b>問題1:在哪裡修改備份路徑? 修改是否立即生效?</b>

    修改YourSQLDba的備份路徑,需要修改兩個作業YourSQLDba_FullBackups_And_Maintenance 和YourSQLDba_LogBackups的配置. 即修改調用的存儲過程Maint.YourSqlDba_DoMaint中的@FullBackupPath和@LogBackupPath參數。如下所示:

<a href="http://images.cnitblog.com/blog/73542/201407/152317350066242.png"></a>

YourSQLDba_FullBackups_And_Maintenance作業

YourSQLDba_LogBackups作業

将@FullBackupPath和 @LogBackupPath 從D:\backup\修改為G:\DB_BACKUP\FULL_BACKUP\與G:\DB_BACKUP\LOG_BACKUP\後,修改後是否立即生效?  修改過後,如果沒有先做一次完整備份,事務日志備份檔案(事務日志備份有可能半小時。一小時一次等多種選擇)并不會在新目錄G:\DB_BACKUP\LOG_BACKUP\生成,依然還是在舊目錄G:\backup\下生成。直到完整備份備份後,事務日志備份才在新目錄生效。這樣就導緻我必須等到舊目錄資料檔案完全上帶後才能删除舊目錄。但是為什麼會這樣呢?

從Maint.YourSqlDba_DoMaint追查開始,發現其調用[yMaint].[Backups]做備份,做事務日志備份的一段代碼如下

其中@fileName = yMaint.MakeBackupFileName(@DbName, 'L', @LogBackupPath, @Language, @LogBkExt)取值取決于@LogBackupPath, 而@LogBackupPath來源于Maint.JobHistory中(如下所示)。每次全備在Maint.JobHistory中生成一條記錄,而全備後不管事務日志備份多少次,隻會在第一次事務日志備份時生成記錄,是以即使修改了@FullBackupPath和 @LogBackupPath這兩個參數的值,Maint.JobHistory表中最後一次事務日志備份記錄的值依然為修改前的舊值。進而出現上面描述的問題。

<b>問題2:修改備份路徑後,原路徑下的備份檔案能否在保留期後自動删除?</b>

<b></b>

如下所示,在存儲過程[yMaint].[Backups]裡面删除過期備份時,@Path參數來自于@FullBackupPath 和@LogBackupPath

<a href="http://images.cnitblog.com/blog/73542/201407/152317375686027.png"></a>

<a href="http://images.cnitblog.com/blog/73542/201407/152317400998353.png"></a>

這兩個參數的值來源于表Maint.JobHistory, 而當修改了YourSQLDba備份路徑後,如果沒有做一次全備,對應記錄FullBackupPath 與LogBackupPath字段的值都是原先的路徑(因為事務日志備份的路徑從Maint.JobHistory最後一次事務日志記錄取值,也即原先的路徑),做了一次全備後,其值都是修改後路徑,這樣就會導緻以前備份删除不了的情況。此時隻能手工删除。

<b>問題3:輸出日志檔案MaintenanceReport.txt路徑在哪裡修改?</b>

YourSQLDba的輸出日志檔案MaintenanceReport.txt并不會随着@FullBackupPath和 @LogBackupPath 的修改會儲存到新目錄。這個檔案的輸出目錄的值放置在msdb.dbo.sysjobsteps表中,對應記錄的output_file_name字段。

可以通過兩種方式來修改:

1 SQL腳本方式:

EXEC msdb.dbo.sp_update_jobstep @job_id=N'41662692-c7b2-47ae-8e07-df3eb12e1fe2', @step_id=1 ,

  @output_file_name=N'G:\DB_BACKUP\MaintenanceReport.txt'

2:UI圖形界面:

<a href="http://images.cnitblog.com/blog/73542/201407/152317424746194.png"></a>

<b>問題4:是否可以用其它方式</b><b>。</b>

可以修改@FullBackupPath和 @LogBackupPath參數值後,将舊備份檔案拷貝到對應新目錄,不過對備份比較大的伺服器,會産生一定的IO消耗。修改修改Maint.JobLasstBkpLocations記錄中的LastLogBkpFile和LastFullBkpFile字段, 以及Maint.JobHistory中最後一條記錄的FullBackupPath與LogBackupPath。

<a href="http://images.cnitblog.com/blog/73542/201407/152317448657265.png"></a>