了解 Ola Hallengren 的 SQL Server 腳本中與 FULL 備份和 LOG 備份相關的 CleanupTime
我無法理解Ola Hallengren 伺服器維護解決方案
CleanupTime
中的選項究竟有什麼期望。我正在尋找一些相關的問題和詳盡的答案,但這些解釋仍然讓我有些困惑。具體來說:
我每週進行一次 FULL 備份、每日 DIFF 備份和每小時 LOG 備份。FULL 備份使用預設
CleanupTime
的 24 小時。DIFF 和 LOG 備份的 NULL 為CleanupTime
.從CleanupTime 參數的文件中,我無法理解是否將
CleanupTime
設置設置為BackupType
FULL 備份,也會刪除較舊的 DIFF 和 LOG 備份文件,或者僅刪除FULL 備份文件。指定刪除備份文件的時間(以小時為單位)。如果沒有指定時間,則不會刪除備份文件。
後一段讓我認為設置FULL
CleanupTime
備份BackupType
也會刪除舊的事務日誌。然而,尚不清楚這一段是否僅適用於BackupType
LOG 的備份,或者也適用於BackupType
FULL 的備份。DatabaseBackup 會檢查以確認比最新的完整備份或差異備份更新的事務日誌備份不會被刪除。
我想要實現的是,我可以進行長達 1 週的時間點恢復。(我們有一個變化非常緩慢的數據庫,所以這是可行的)按照我現在的理解,這需要一周前的完整備份和一周的事務日誌備份。由於完全備份和差異備份只能用於恢復到一個特定的時間點。
那麼,我應該將
CleanupTime
我的 FULL 備份作業的選項設置為24*7
嗎?我現在猜測的是,將其設置為 24 小時,將導致下一次完整備份刪除所有較舊的完整、差異和事務日誌備份文件,使我的時間點恢復視窗為 … 0 小時。對?
@CleanupTime
始終為特定備份作業指定。例如,如果您創建完整備份作業、差異備份作業和事務日誌備份作業,則@CleanupTime
始終與作業的擴展相關。讓我們看一個完整備份範例。
完全備份
如果您創建完整備份作業,則通常會添加以下一個或多個參數:
@Databases
: 備份哪些數據庫(與此範例無關)@Directory
: 存放備份的目錄@BackupType
: 全, 差分, TLog@CleanupTime
: 要保留多少小時的備份@FileExtensionFull
:備份的副檔名。因此,您有一個備份作業,它將根據您為 at 作業定義的計劃創建**完整備份。**讓我們假設以下內容:
- 此作業在 20:00(晚上 8 點)執行
@FileExtensionFull
已設置為'BAK'
@Directory
已設置為'F:\SQLBACKUP'
@CleanupTime
已設置為24
(小時)如果我們查看該
MaintenanceSolution.sql
文件,您將找到參數的描述:SET @CleanupTime = NULL -- Time in hours, after which backup files are deleted. If no time is specified, then no backup files are deleted.
嗯,這沒有多大幫助。與網站上的官方文件相同。讓我們進一步探勘。如果您瀏覽腳本,您最終會找到如下所示的部分:
腳本已被包裝以增加可讀性
如果 @BackupSoftware 為空 開始 SET @CurrentCommandType02 = 'xp_delete_file' 設置@CurrentCommand02 = '聲明@ReturnCode int 執行@ReturnCode = [master].dbo.xp_delete_file 0, N''' + REPLACE(@CurrentDirectoryPath,'''','''''') + ''', -- 第一個參數 ''' + @CurrentFileExtension + ''', --第二個參數 ''' + CONVERT(nvarchar(19),@CurrentCleanupDate,126) + ''' -- 第三個參數 IF @ReturnCode 0 RAISERROR(''刪除文件出錯。'', 16, 1)' 結尾
所以 Ola 基本上是利用 SQL Server 的內置
xp_delete_file function
在某個時間刪除一個文件根據:
@CurrentDirectoryPath
@CurrentFileExtension
@CurrentCleanupDate
但是等等,例如,
@CurrentCleanupDate
是什麼?如果我們在腳本中返回一點,您可以找到如下所示的部分:插入@CurrentCleanupDates(CleanupDate,鏡像) 選擇 DATEADD(hh,-(@CleanupTime),GETDATE()), 0
啊,所以是從和 目前時間
@CurrentCleanupDate
計算的日期加法。涼爽的。(……我們可能剛剛在程式碼中發現了一個錯字,因為普通數據庫和鏡像數據庫的部分都包含**在程式碼中。)@CleanupTime``GETDATE()
Mirror
那麼相關部分是做什麼用的
@CurrentFileExtension
呢?讓我們再搜尋一下。我們發現:選擇 @CurrentFileExtension = 案例 當@CurrentBackupType = 'FULL' 那麼@FileExtensionFull 當@CurrentBackupType = 'DIFF' 那麼@FileExtensionDiff 當@CurrentBackupType = 'LOG' 那麼@FileExtensionLog 結尾
所以你有它。
概括
如果您的完整備份作業的參數設置為
@FileExtensionFull='BAK'
並且您設置了 a,@CleanupTime=24
則該過程將刪除至少一天(24 小時)之前的所有完整備份文件。被執行的
@CurrentCommand02
基本上是:xp_delete_file 0, 'F:\SQLBACKUP', 'BAK', '2018-08-20 20:00:00.045'
所以它不會觸及任何其他備份文件。(當然,除非您已定義
'BAK'
為所有備份類型的擴展,在這種情況下您會失去)。