sp_syspolicy_delete_policy_execution_history (Transact-SQL)

适用范围:SQL Server

在基于策略的管理中删除策略的执行历史记录。 您可以使用此存储过程删除特定策略或所有策略的执行历史记录,也可以删除特定日期前的执行历史记录。

Transact-SQL 语法约定

语法

sp_syspolicy_delete_policy_execution_history
    [ @policy_id = ] policy_id
    , [ @oldest_date = ] 'oldest_date'
[ ; ]

参数

[ @policy_id = ] policy_id

要为其删除执行历史记录的策略的标识符。 @policy_id为 int,并且是必需的。 可以为 NULL

[ @oldest_date = ] 'oldest_date'

要保留策略执行历史记录的最旧日期。 先于此日期的所有执行历史记录都将被删除。 @oldest_date为日期/时间,并且是必需的。 可以为 NULL

返回代码值

0(成功)或 1(失败)。

注解

必须在系统数据库的上下文msdb中运行sp_syspolicy_delete_policy_execution_history

若要获取@policy_id的值以及查看执行历史记录日期,可以使用以下查询:

SELECT a.name AS N'policy_name',
    b.policy_id,
    b.start_date,
    b.end_date
FROM msdb.dbo.syspolicy_policies AS a
INNER JOIN msdb.dbo.syspolicy_policy_execution_history AS b
    ON a.policy_id = b.policy_id;

如果为一个值或两个值指定 NULL ,则适用以下行为:

  • 若要删除所有策略执行历史记录, NULL 请同时指定 @policy_id@oldest_date

  • 若要删除特定策略的所有策略执行历史记录,请指定@policy_id的策略标识符,并指定NULL@oldest_date

  • 若要删除特定日期之前所有策略的策略执行历史记录,请NULL指定@policy_id,并指定@oldest_date日期。

若要存档策略执行历史记录,可以在对象资源管理器中打开策略历史记录日志,并将执行历史记录导出到文件中。 若要访问策略历史记录日志,请展开 “管理”,右键单击“ 策略管理”,然后选择“ 查看历史记录”。

权限

需要 PolicyAdministratorRole 固定数据库角色的成员身份。

重要

可能的凭据提升:PolicyAdministratorRole 角色中的用户可以创建服务器触发器和计划策略执行,这些触发器可能会影响数据库引擎实例的操作。 例如,PolicyAdministratorRole 角色中的用户可以创建一个策略,以防止在数据库引擎中创建大多数对象。 由于这种可能的凭据提升,PolicyAdministratorRole 角色应仅授予信任控制数据库引擎配置的用户。

示例

以下示例在 ID 为 7 的策略的特定日期之前删除策略执行历史记录。

EXEC msdb.dbo.sp_syspolicy_delete_policy_execution_history
    @policy_id = 7,
    @oldest_date = '2019-02-16 16:00:00.000';
GO