core.sp_purge_data (Transact-SQL)

基于保留策略从管理数据仓库中删除数据。此过程由 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 时,core.snapshots 视图中的 valid_through 列中的值决定了符合删除条件的行。

  • [@instance_name = ] 'instance_name'
    收集组的实例的名称。instance_name 是 sysname,默认值为 NULL。

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

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

  • [@duration = ] 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,因此将使用 core.snapshots 视图中的 valid_through 列中的值来确定收集组中符合删除条件的行。

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