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
    要对其空间使用统计信息进行报告和更正的数据库的名称或 ID。如果指定 0,则使用当前数据库。数据库名称必须符合标识符规则。
  • table_name | table_id | view_name | view_id
    要对其空间使用统计信息进行报告和更正的表或索引视图的名称或 ID。表和视图的名称必须符合标识符规则。
  • index_id | index_name
    要使用的索引的 ID 或名称。如果未指定,语句将对指定的表或视图的所有索引进行处理。
  • 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 帮助