次の方法で共有


suspect_pages テーブルの理解と管理

更新 : 2005 年 12 月 5 日

SQL Server 2005 では、問題のあるページに関する情報が各サーバー インスタンスの msdb データベースsuspect_pages テーブルに格納されます。suspect_pages テーブルは、復元が必要であるかどうかを判断する際に使用します。

SQL Server データベース エンジンが 824 エラー (以下の表を参照) を含むデータベース ページを読み取る場合、そのページは "問題あり" と見なされ、そのページ ID は suspect_pages テーブルに記録されます。データベース エンジンは、次のような通常の処理中に検出された問題のあるページを記録します。

  • クエリがページを読み取る必要があるとき
  • DBCC CHECKDB 操作の実行中
  • バックアップ操作の実行中

suspect_pages テーブルは、復元操作、DBCC 修復操作、データベースの削除操作などの実行中にも必要に応じて更新されます。

suspect_pages テーブルに記録されるエラー

suspect_pages テーブルには、824 エラーにより失敗したページごとに 1 行ずつ、上限を 1,000 行として格納されます 。次の 824 エラーは、suspect_pages テーブルの event_type 列にログ記録されます。

エラーの説明 event_type

不適切なチェックサムまたは破損いページ以外の 824 エラー (不適切なページ ID など)

1

不適切なチェックサム

2

正しくないページ

3

復元済み (ページは不適切と見なされた後で復元されました)

4

修復済み (DBCC によってページが修復されました)

5

DBCC による割り当て解除

7

suspect_pages テーブルには、一時的なエラーも記録されます。一時的なエラーの原因としては、I/O エラー (たとえば、ケーブルが取り外された場合) や、反復的なチェックサム テストで一時的にエラーになったページなどがあります。

データベース エンジンによる suspect_pages テーブルの更新方法

データベース エンジンは、suspect_pages テーブルに対して次のアクションを行います。

  • テーブルに空き容量がある場合は、エラーの発生を示す 824 エラーをすべて記録し、エラー カウンタの値を増やします。
  • 修復、復元、または割り当て解除による修正の後に、ページにエラーがある場合は、number_of_errors カウントの値を増やし、last_update 列を更新します。
  • リストされているページが復元や修復操作によって修正された場合は、そのページが修復 (event_type = 5) または復元 (event_type = 4) されたことを示すために suspect_pages の行を更新します。
  • DBCC チェックを実行すると、エラーのないページは修復済み (event_type = 5) または割り当て解除済み (event_type = 7) としてマークされます。

suspect_pages テーブルに対する自動更新

次に示す操作を行うと、suspect_pages テーブルの行が自動的に削除されます。

  • ALTER DATABASE REMOVE FILE。
  • DROP DATABASE。
  • DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS を実行すると、割り当て解除または修復を行った各ページを示すため suspect_pages テーブルが更新されます。
  • RESTORE でも、一覧が更新されます。完全復元、ファイル復元、またはページ復元を行うと、復元されたページのエントリが復元済みとしてマークされます。

データベース管理者が担う管理の役割

suspect_pages テーブルの管理は、主に古い行を削除することで、データベース管理者が行います。suspect_pages テーブルのサイズには制限があり、このテーブルに空き領域がなくなると新しいエラーはログに記録されません。このテーブルの空き領域が 0 に近づいてきたら、データベース管理者またはシステム管理者が、手動でこのテーブルから行を削除することによって古いエントリを削除する必要があります。データベース管理者がこの操作を行うまで、新しいエントリは追加できません。

データベース管理者は、レコードの挿入や更新も行うことができます。たとえば、問題のあるページが実際は一貫性の取れている状態であることが確かではあっても、しばらくレコードを残しておきたい場合に、行を更新できると便利です。

次の例は、suspect_pages テーブルの行の一部を削除します。

--  Select restored, repaired, or deallocated pages.
DELETE FROM msdb..suspect_pages
   WHERE (event_type = 4 OR event_type = 5 OR event_type = 7);
GO

次の例は、suspect_pages テーブルにある不適切なぺージを選択します。

-- Select nonspecific 824, bad checksum, and torn page errors.
SELECT * FROM msdb..suspect_pages
   WHERE (event_type = 1 OR event_type = 2 OR event_type = 3);
GO

参照

概念

ページ復元の実行

その他の技術情報

DROP DATABASE (Transact-SQL)
RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
DBCC (Transact-SQL)
suspect_pages (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手