DBCC UPDATEUSAGE (Transact-SQL)

報告和更正目錄檢視中不準確的頁面和資料列計數。這些不準確可能會使 sp_spaceused 系統預存程序傳回不正確的空間使用方式報表。在 SQL Server 2005 中,永遠會正確維護這些值。在 SQL Server 2005 中建立的資料庫應該永遠不會有不正確的計數,不過,升級到 SQL Server 2005 的資料庫則可能包含無效的計數。我們建議您在升級到 SQL Server 2005 之後執行 DBCC UPDATEUSAGE,來更正任何無效的計數。

主題連結圖示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 execution completed. If DBCC printed error messages, contact your system administrator.

備註

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

請利用 DBCC UPDATEUSAGE 來同步處理空間使用方式計數器。由於 DBCC UPDATEUSAGE 在大型資料表或資料庫上可能需要花一些時間來執行,通常只在您覺得 sp_spaceused 傳回的值不正確時,才應該使用它。sp_spaceused 會先接受選擇性參數來執行 DBCC UPDATEUSAGE,之後,才傳回資料表或索引的空間資訊。

升級資料庫

在舊版 SQL Server 中,資料表和索引資料列計數值與頁數計數值可能會變得不正確。在 SQL Server 2005 之前的版本中建立的資料庫可能包含不正確的計數。因此,我們建議您在升級到 SQL Server 2005 之後執行 DBCC UPDATEUSAGE,來更正任何無效的計數。

SQL Server 2005 中增強了 DBCC CHECKDB,因此,頁面或資料列計數變成負數時可以偵測得到。偵測到時,DBCC CHECKDB 輸出會包含警告及執行 DBCC UPDATEUSAGE 來處理這個問題的建議。雖然看起來像是將資料庫升級到 SQL Server 2005 造成的問題,但無效的計數其實是在升級程序之前就已經存在。

權限

需要系統管理員 (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

請參閱

參考

DBCC (Transact-SQL)
sp_spaceused (Transact-SQL)
sys.sysindexes (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)

其他資源

資料表與索引架構
如何:使用卸離與附加來升級資料庫 (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助