core.sp_purge_data (Transact-SQL)
根據保留原則,從管理資料倉儲中移除資料。 mdw_purge_data SQL Server Agent 作業會每天針對與指定之執行個體相關聯的管理資料倉儲執行這項程序。 您可以使用這個預存程序,從管理資料倉儲執行視需要的資料移除動作。
語法
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 必須是完整的執行個體名稱,其中包含採用 computername\instancename 格式的電腦名稱和執行個體名稱。 如果為 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