손상된 페이지 찾기 (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), checksum, torn page 오류가 발생한 페이지를 나열한다. 데이터베이스 전체를 복원하지 않고 손상된 개별 페이지를 FULL 백업에서 가져와 로그로 roll forward하여 복구한다.
사용 시점
오류 로그에 823/824 오류가 있을 때, CHECKDB의 일관성 오류가 몇 페이지에 한정될 때, 또는 사용자 쿼리가 "incorrect checksum"으로 실패할 때.
주의
FULL 또는 BULK_LOGGED 복구 모델과 끊기지 않은 로그 체인이 필요하다. 온라인 페이지 복원은 Enterprise/Developer 전용이며 다른 에디션에서는 복원 중 데이터베이스가 오프라인이 된다. 할당 페이지(GAM/SGAM/PFS), 파일 헤더, boot page (1:9)는 이 방법으로 복원할 수 없다. 823/824는 보통 스토리지 문제를 의미하므로 디스크/컨트롤러/SAN을 확인하지 않고 종결하면 재발한다. 손상 페이지가 많으면 데이터베이스 전체 복원이 더 빠르다.