core.sp_purge_data (Transact-SQL)
適用於:SQL Server
根據保留原則,從管理數據倉儲中移除數據。 SQL Server Agent 作業會每天針對 mdw_purge_data
與指定實例相關聯的管理數據倉儲執行此程式。 您可以使用這個預存程式,從管理數據倉儲執行隨選移除數據。
語法
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,因此會使用檢視中數據行中的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