core.sp_purge_data (Transact-SQL)

適用於:SQL Server

根據保留原則,從管理數據倉儲中移除數據。 mdw_purge_data SQL Server Agent 作業會針對與指定實例相關聯的管理數據倉儲,每天執行此程式。 您可以使用這個預存程式,從管理數據倉儲執行隨選移除數據。

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