У меня странная проблема с управлением политиками в SQL Server 2016.
Предыстория: у меня были проблемы с DatabaseMail после исправления (см. ИСПРАВЛЕНИЕ: SQL Server 2016 Database Mail не работает на компьютере, на котором не установлена .NET Framework 3.5 ). Я решил это.
Проблема была обнаружена случайно. Поэтому я решил использовать политику для создания как минимум записи в журнале.
Условие, которое должно быть равно 0:
ExecuteSql('Numeric', 'SELECT COUNT(*) FROM msdb.dbo.sysmail_allitems WHERE sent_status IS NOT NULL AND sent_status <> ''sent'';')
Была настроена системная политика по расписанию.
Наконец, существует предупреждение о типе «Предупреждение о событии SQL Server», сообщающее об ошибке 34052.
Пока все хорошо. Если я оцениваю политику вручную, это нормально. Но если политика оценивается агентом задания, сообщается о нарушении политики. Почему это?
Агент заданий, который создается автоматически, имеет 2 шага:
Убедитесь, что автоматизация включена.
IF (msdb.dbo.fn_syspolicy_is_automation_enabled() != 1)
BEGIN
RAISERROR(34022, 16, 1)
END
Оценка политики. (введите PowerShell)
dir SQLSERVER:\SQLPolicy\<SERVER>\<INSTANCE>\Policies | where { $_.ScheduleUid -eq "D8E103AA-6886-4913-BB64-2662580C19E8" } | where { $_.Enabled -eq 1} | where {$_.AutomatedPolicyEvaluationMode -eq 4} | Invoke-PolicyEvaluation -AdHocPolicyEvaluationMode 2 -TargetServerName <SERVER>\<INSTANCE>
Что здесь отличается?
Большое спасибо заранее!
С уважением,
Dex