DBCC UPDATEUSAGE (Transact-SQL)

報告和更正目錄檢視中不準確的頁面和資料列計數。這些不準確可能會使 sp_spaceused 系統預存程序傳回不正確的空間使用方式報表。

主題連結圖示Transact-SQL 語法慣例

語法

DBCC UPDATEUSAGE 
(   { database_name | database_id | 0 } 
    [ , { table_name | table_id | view_name | view_id } 
    [ , { index_name | index_id } ] ] 
) [ WITH [ NO_INFOMSGS ] [ , ] [ COUNT_ROWS ] ] 

引數

  • database_name | database_id | 0
    這是要報告和更正空間使用方式統計資料之資料庫的名稱或識別碼。如果指定 0,就會使用目前的資料庫。資料庫名稱必須符合識別碼的規則。

  • table_name | table_id | view_name | view_id
    這是要報告和更正空間使用方式統計資料之資料表或索引檢視表的名稱或識別碼。資料表和檢視表名稱必須符合識別碼的規則。

  • index_id | index_name
    這是要使用之索引的識別碼或名稱。若未指定,陳述式會處理指定資料表或檢視表的所有索引。

  • WITH
    接受即將指定的選項。

  • NO_INFOMSGS
    抑制所有參考訊息。

  • COUNT_ROWS
    指定利用資料表或檢視表中目前的資料列計數來更新 row count 資料行。

備註

DBCC UPDATEUSAGE 會更正資料表或索引中的每一個資料分割的資料列、使用頁面、保留頁面、分葉頁和資料頁的計數。如果系統資料表中沒有不準確的情況,DBCC UPDATEUSAGE 不會傳回任何資料。如果找到且更正了不準確的情況,就不會使用 WITH NO_INFOMSGS,DBCC UPDATEUSAGE 會傳回系統資料表所更新的資料列和資料行。

DBCC CHECKDB 已經增強,可在頁面或資料列計數變成負數時偵測出。偵測到時,DBCC CHECKDB 輸出會包含警告及執行 DBCC UPDATEUSAGE 來處理這個問題的建議。

最佳策略

  • 永遠在從 SQL Server 2000 升級資料庫後執行 DBCC UPDATEUSAGE。頁面與資料列的計數會據此進行更正及維護。

  • 請勿針對以 SQL Server 2005 或更新版本建立的資料庫,或已透過使用 DBCC UPDATEUSAGE 更正一次的升級資料庫例行地執行 DBCC UPDATEUSAGE。DBCC UPDATEUSAGE 可能需要一些時間才能在大型資料表或資料庫上執行,因此,除非您懷疑 sp_spaceused 所傳回的值不正確,否則不應僅使用它。

  • 只有在資料庫進行頻繁的資料定義語言 (DDL) 修改 (如 CREATE、ALTER 或 DROP 陳述式) 時,才考慮例行地執行 DBCC UPDATEUSAGE (例如,每週)。

結果集

DBCC UPDATEUSAGE 會傳回 (值可能不同):

DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請連絡您的系統管理員。

權限

需要 sysadmin 固定伺服器角色或 db_owner 固定資料庫角色中的成員資格。

範例

A. 更新目前資料庫中之所有物件的頁面及 (或) 資料列計數

下列範例會在資料庫名稱中指定 0,而 DBCC UPDATEUSAGE 會報告目前資料庫的已更新頁面或資料列計數資訊。

DBCC UPDATEUSAGE (0);
GO

B. 更新 AdventureWorks 的頁面及 (或) 資料列計數,以及抑制參考訊息

下列範例會將資料庫名稱指定為 AdventureWorks,且會抑制所有參考訊息。

USE AdventureWorks;
GO
DBCC UPDATEUSAGE (AdventureWorks) WITH NO_INFOMSGS; 
GO

C. 更新 Employee 資料表的頁面及 (或) 資料列計數

下列範例會報告 AdventureWorks 資料庫中 Employee 資料表的已更新頁面或資料列計數資訊。

USE AdventureWorks;
GO
DBCC UPDATEUSAGE (AdventureWorks,"HumanResources.Employee");
GO

D. 更新資料表中特定索引的頁面及 (或) 資料列計數

下列範例會指定 IX_Employee_ManagerID 來做為索引名稱。

USE AdventureWorks;
GO
DBCC UPDATEUSAGE (AdventureWorks, "HumanResources.Employee", IX_Employee_ManagerID);
GO

變更記錄

更新的內容

已在「備註」加入「最佳作法」一節。