Нарушение политики: ложное срабатывание - PullRequest
0 голосов
/ 11 сентября 2018

У меня странная проблема с управлением политиками в SQL Server 2016.

Предыстория: у меня были проблемы с DatabaseMail после исправления (см. ИСПРАВЛЕНИЕ: SQL Server 2016 Database Mail не работает на компьютере, на котором не установлена ​​.NET Framework 3.5 ). Я решил это.

Проблема была обнаружена случайно. Поэтому я решил использовать политику для создания как минимум записи в журнале.

  1. Условие, которое должно быть равно 0:

    ExecuteSql('Numeric', 'SELECT COUNT(*) FROM msdb.dbo.sysmail_allitems WHERE sent_status IS NOT NULL AND sent_status <> ''sent'';')
    
  2. Была настроена системная политика по расписанию.

  3. Наконец, существует предупреждение о типе «Предупреждение о событии SQL Server», сообщающее об ошибке 34052.

Пока все хорошо. Если я оцениваю политику вручную, это нормально. Но если политика оценивается агентом задания, сообщается о нарушении политики. Почему это?

Агент заданий, который создается автоматически, имеет 2 шага:

  1. Убедитесь, что автоматизация включена.

    IF (msdb.dbo.fn_syspolicy_is_automation_enabled() != 1)
        BEGIN
            RAISERROR(34022, 16, 1)
        END
    
  2. Оценка политики. (введите 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

...