core.sp_purge_data (Transact-SQL)
适用范围:SQL Server
基于保留策略从管理数据仓库中删除数据。 此过程由mdw_purge_data
与指定实例关联的管理数据仓库执行SQL Server 代理作业每日执行。 可以使用此存储过程从管理数据仓库中执行数据的按需删除。
语法
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>\<instancename>
中的实例名称组成。 使用本地服务器上的默认实例时 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,因此视图中的列中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