Sql-Server
Ola Hallengren MaintenanceSolution - 差異 - 不支持 @ModificationLevel 的值
我剛剛安裝了這個很棒的工具,大多數情況下它工作正常,只是如果我為差異備份包含參數 @ModificationLevel = 50 (或其他任何東西),操作將失敗:
消息 50000,級別 16,狀態 1,過程 DatabaseBackup,第 2268 行 不支持參數 @ModificationLevel 的值。
例子:
EXECUTE [dbo].[DatabaseBackup] @Databases = 'ALL_DATABASES', @CleanupTime = 2160, @Compress = 'Y', @Directory = '\\cem01nas2\sql_backups', @BackupType = 'DIFF', @ChangeBackupType = 'Y', @ModificationLevel = 50 GO
給出錯誤,但如果我刪除 @ModificationLevel 參數它可以工作。有任何想法嗎?
這表明您正在驗證(取自 Ola Hallengren 的網站)
IF @ModificationLevel IS NOT NULL AND NOT EXISTS(SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('sys.dm_db_file_space_usage') AND name = 'modified_extent_page_count') BEGIN INSERT INTO @Errors ([Message], Severity, [State]) SELECT 'The value for the parameter @ModificationLevel is not supported.', 16, 1 END IF @ModificationLevel IS NOT NULL AND @ChangeBackupType = 'N' BEGIN INSERT INTO @Errors ([Message], Severity, [State]) SELECT 'The value for the parameter @ModificationLevel is not supported.', 16, 2 END IF @ModificationLevel IS NOT NULL AND @BackupType <> 'DIFF' BEGIN INSERT INTO @Errors ([Message], Severity, [State]) SELECT 'The value for the parameter @ModificationLevel is not supported.', 16, 3 END
請檢查條件並記住@ModificationLevel 是發生完整備份所需的差異。如果沒有足夠的差異,它將不會執行完整備份。
IF @ChangeBackupType = 'Y' BEGIN IF @CurrentBackupType = 'LOG' AND @CurrentRecoveryModel IN('FULL','BULK_LOGGED') AND @CurrentLogLSN IS NULL AND @CurrentDatabaseName <> 'master' BEGIN SET @CurrentBackupType = 'DIFF' END IF @CurrentBackupType = 'DIFF' AND (@CurrentDatabaseName = 'master' OR @CurrentDifferentialBaseLSN IS NULL OR (@CurrentModifiedExtentPageCount * 1. / @CurrentAllocatedExtentPageCount * 100 >= @ModificationLevel)) BEGIN SET @CurrentBackupType = 'FULL' END END
您尚未指定 SQL Server 的版本,但如果您使用的是早期版本的 SQL Server,則sys.dm_db_file_space_usage
modified_extent_page_count
中不存在該列。這將導致您在舊版本的 SQL Server 上看到的錯誤,因為用於計算差異金額的欄位不存在。這是原始碼中的第一個驗證,儘管錯誤消息有點誤導。
注意:文件說 SQL Server 2016 SP2 是最早的版本,但是,我針對 SQL Server 2014 SP3 實例進行了測試,並且存在此列。它在 SQL Server 2012 SP4 實例中失去。
您可以通過執行此查詢來確認這是否是問題 -
SELECT * FROM sys.dm_db_file_space_usage
- 並檢查該modified_extent_page_count
列是否存在。