PAGE Restore – chirurgia bazy danych
Kiedy baza ma miliardy stron danych, pełny restore bywa jak przeszczep serca.
Ale czasem wystarczy precyzyjna operacja – przywrócenie tylko uszkodzonej strony.
PAGE restore to chirurgiczna procedura SQL Servera: przywraca fragment, nie zatrzymując całego organizmu.
🧩 Idea
Każdy obiekt w SQL Server składa się z 8-KB stron.
Gdy jedna z nich zostanie uszkodzona (błąd I/O, dysk, checksum), silnik oznacza ją jako suspect i pozwala na przywrócenie tylko tej strony z backupu — bez pełnego przywracania całej bazy czy pliku danych.
To jeden z najbardziej precyzyjnych mechanizmów Database Engine Recovery Infrastructure.
🧠 Kiedy można wykonać PAGE RESTORE
✅ Baza musi być w trybie FULL lub BULK_LOGGED.
✅ Musisz mieć:
- Full backup (lub differential, jeśli istnieje),
- Transaction log backup (aby odtworzyć zmiany po pełnym),
- Identyfikatory uszkodzonych stron (
file_id:page_id).
🔍 Diagnoza
| |
Wartość event_type:
1– 823 error (I/O),2– bad checksum,3– torn page,4– restored,5– deallocated,7– bad header.
🧪 Demo (laboratoryjne)
| |
Efekt: tylko jedna 8-KB strona została przywrócona,
baza wróciła do spójnego stanu — bez zatrzymywania całości.
📊 DMV po operacji
| |
Jeżeli pojawi się event_type = 4, oznacza to, że strona została skutecznie odtworzona.
🧰 Przydatne narzędzia diagnostyczne
| Narzędzie | Cel |
|---|---|
DBCC CHECKDB | wykrycie i raport uszkodzeń |
msdb.dbo.suspect_pages | rejestr błędów stron |
DBCC PAGE | odczyt zawartości konkretnej strony (tylko dla laboratoriów) |
RESTORE HEADERONLY / FILELISTONLY | sprawdzenie backupów przed operacją |
sys.dm_io_virtual_file_stats | I/O metryki dla potwierdzenia naprawy |
🧩 Strategia DBA
PAGE RESTORE to narzędzie ratunkowe — nie zastępuje pełnych backupów.
Warto je mieć w planie DR jako operację punktową, np.:
- przy uszkodzeniu pojedynczego obiektu w dużej bazie (>1 TB),
- gdy nie można zatrzymać instancji,
- lub gdy dane są replikowane i trzeba ograniczyć downtime.
„Sztuka naprawy polega na zrozumieniu, które fragmenty należy zostawić w spokoju.”
— inspiracja: William James
📚 Do repo:
SQLManiak/docs/PageRestore
🧩 Checklista:
- Tryb FULL / BULK_LOGGED
- Zidentyfikowane
file_id:page_id - Dostępny pełny i log backup
- Test
RESTORE VERIFYONLY -
RESTORE DATABASE … PAGE = 'X:Y' WITH NORECOVERY -
RESTORE LOG … WITH RECOVERY - Weryfikacja:
DBCC CHECKDB+suspect_pages
PAGE restore – chirurgia, nie transplantacja.
Nie naprawiasz wszystkiego, tylko to, co wymaga dotyku.