core.sp_purge_data (Transact-SQL)

适用于:SQL Server

基于保留策略从管理数据仓库中删除数据。 此过程由mdw_purge_data SQL Server 代理作业每天针对与指定实例关联的管理数据仓库执行。 可以使用此存储过程从管理数据仓库中执行数据的按需删除。

Transact-SQL 语法约定

语法

core.sp_purge_data
    [ [ @retention_days = ] retention_days ]
    [ , [ @instance_name = ] 'instance_name' ]
    [ , [ @collection_set_uid = ] 'collection_set_uid' ]
    [ , [ @duration = ] duration ]
[ ; ]

参数

[ @retention_days = ] retention_days

管理数据仓库表中的数据的保留天数。 删除了时间戳早于 @retention_days 的数据。 @retention_days为 smallint,默认值为 NULL. 如果指定,该值必须是正数。 如果为 NULL,视图中valid_through列中 core.snapshots 的值将确定符合删除条件的行。

[ @instance_name = ] 'instance_name'

收集组实例的名称。 @instance_name为 sysname,默认值为 NULL.

instance_name必须是完全限定的实例名称,该名称由计算机名和窗体 computername\实例名称中的实例名称组成。 为 NULL 时,使用本地服务器上的默认实例。

[ @collection_set_uid = ] 'collection_set_uid'

收集组的 GUID。 @collection_set_uid是 uniqueidentifier,默认值为 NULL. 为 NULL 时,将删除所有收集组中的限定行。 若要获取此值,请查询 syscollector_collection_sets 目录视图。

[ @duration = ] 持续时间

清除操作应当运行的最长分钟数。 @duration为 smallint,默认值为 NULL. 如果指定,则该值必须是零或正整数。 为 NULL 时,操作将一直运行,直到删除所有符合条件的行或手动停止操作。

返回代码值

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

注解

此过程在视图中根据保留期选择符合删除条件的行 core.snapshots 。 所有符合删除条件的行都会从 core.snapshots_internal 表中删除。 删除位于前面的行将在所有管理数据仓库表中触发级联删除操作。 通过使用 ON DELETE CASCADE 子句可以完成此操作,该子句是为用于存储收集的数据的所有表定义的。

每个快照及其关联的数据都将在显式事务中删除,然后提交。 因此,如果手动停止清除操作或超出指定的 @duration 值,则仅保留未提交的数据。 此数据可以在下一次运行作业时删除。

必须在管理数据仓库数据库的上下文中执行此过程。

权限

要求mdw_admin(具有 EXECUTE 权限)固定数据库角色的成员身份。

示例

A. 在没有参数的情况下运行sp_purge_data

以下示例在不 core.sp_purge_data 指定任何参数的情况下执行。 因此,默认值 NULL 及关联行为将用于所有参数。

USE <management_data_warehouse>;
EXECUTE core.sp_purge_data;
GO

B. 指定保留期和持续时间值

下面的示例从管理数据仓库中删除超过 7 天的数据。 此外, @duration 还指定了参数,使操作的运行时间不超过 5 分钟。

USE <management_data_warehouse>;
EXECUTE core.sp_purge_data @retention_days = 7, @duration = 5;
GO

°C 指定实例名称和集合集

以下示例从 SQL Server 的指定实例上给定集合集的管理数据仓库中删除数据。 由于 @retention_days 未指定,因此,视图中valid_through列中 core.snapshots 的值用于确定符合删除条件的集合集的行。

USE <management_data_warehouse>;
GO
-- Get the collection set unique identifier for the Disk Usage system collection set.
DECLARE @disk_usage_collection_set_uid uniqueidentifier = (SELECT collection_set_uid
    FROM msdb.dbo.syscollector_collection_sets WHERE name = N'Disk Usage');

EXECUTE core.sp_purge_data @instance_name = @@SERVERNAME, @collection_set_uid = @disk_usage_collection_set_uid;
GO