DBCC UPDATEUSAGE (Transact-SQL)
カタログ ビューのページと行数の情報に不一致がある場合、それらをレポートおよび修正します。情報に不一致があると、sp_spaceused システム ストアド プロシージャによって間違った領域使用状況レポートが返される原因となります。SQL Server 2005 では、値が常に正しく保たれます。SQL Server 2005 に作成したデータベースのカウントに誤りはありませんが、SQL Server 2005 にアップグレードしたデータベースのカウントは誤っている場合があります。SQL Server 2005 にアップグレードした後は、DBCC UPDATEUSAGE を実行して無効なカウントを修正することをお勧めします。
構文
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 を実行すると時間がかかるので、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)