DBAtlas · データベース運用アトラス

破損ページを特定し (suspect_pages)、単一ページをリストアする

SQL Serverリストアと復旧

コマンド

-- Pages that hit 823/824 or checksum errors:
SELECT DB_NAME(sp.database_id) AS db, sp.file_id, sp.page_id,
       CASE sp.event_type WHEN 1 THEN '823/824 error' WHEN 2 THEN 'bad checksum'
            WHEN 3 THEN 'torn page'     WHEN 4 THEN 'restored'
            WHEN 5 THEN 'repaired'      WHEN 7 THEN 'deallocated by DBCC' END AS event_desc,
       sp.error_count, sp.last_update_date
FROM   msdb.dbo.suspect_pages sp
ORDER BY sp.last_update_date DESC;

-- Page restore (example 1:336): FULL + later logs + a new log backup
RESTORE DATABASE [Musteri] PAGE = '1:336'
FROM DISK = N'D:\Backup\Musteri_full_20261008.bak' WITH NORECOVERY;
RESTORE LOG [Musteri] FROM DISK = N'D:\Backup\Musteri_log_1200.trn' WITH NORECOVERY;
BACKUP LOG [Musteri] TO DISK = N'D:\Backup\Musteri_log_pagetail.trn' WITH INIT;
RESTORE LOG [Musteri] FROM DISK = N'D:\Backup\Musteri_log_pagetail.trn' WITH RECOVERY;

-- Verify:
DBCC CHECKDB (N'Musteri') WITH NO_INFOMSGS, ALL_ERRORMSGS;

概要

msdb.dbo.suspect_pages から、I/O (823/824)、チェックサム、破損ページ (torn page) エラーが発生したページを一覧表示する。データベース全体をリストアせずに、個々の破損ページを FULL バックアップから取り出し、ログでロールフォワードして修復する。

使用する場面

エラーログに 823/824 エラーがある場合、CHECKDB で少数のページに限定された整合性エラーがある場合、またはユーザークエリが "incorrect checksum" で失敗する場合。

注意

FULL または BULK_LOGGED 復旧モデルと、途切れのないログチェーンが必要。オンラインのページリストアは Enterprise/Developer のみ。他のエディションではリストア中にデータベースがオフラインになる。割り当てページ (GAM/SGAM/PFS)、ファイルヘッダー、ブートページ (1:9) はこの方法でリストアできない。823/824 は通常ストレージの問題を意味する。ディスク / コントローラー / SAN を確認せずに対応を終えると再発する。破損ページが多い場合は、データベース全体のリストアの方が速い。

DBAtlas で開く →

関連項目