Sql-Server

Ola Hallengren MaintenanceSolution - 差異 - 不支持 @ModificationLevel 的值

  • June 10, 2020

我剛剛安裝了這個很棒的工具,大多數情況下它工作正常,只是如果我為差異備份包含參數 @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_usagemodified_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列是否存在。

引用自:https://dba.stackexchange.com/questions/268817