SQL Server Donanım & Disk Bozulması: msdb.suspect_pages, DBCC CHECKDB ile Hata Tespiti ve Page Restore Runbook'u
Depolama bozulması ve CRC hatalarının yol açtığı 823/824 hataları, suspect_pages analizi, DBCC CHECKDB acil aksiyonları ve PAGE_VERIFY CHECKSUM kalıcı koruması.
Operasyonel Doğrulama & Güvenilirlik Standardı
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
SQL Server sorgu okurken veya diske yazarken Severity 24 seviyesinde kritik bir hata üretir:
Msg 823, Level 24, State 2, Line 1
I/O error 23(Data error (cyclic redundancy check).) detected during read at offset 0x000001a4000 in file 'D:\Data\Prod.mdf'.
Msg 824, Level 24, State 2, Line 1
SQL Server detected a logical consistency-based I/O error: torn page (expected checksum: 0x8a1b2c3d; found 0x00000000).▸Sahada Ne Görürsün?
Veritabanı sayfaları bozulmuştur (corruption). İlgili tabloyu okuyan sorgular düşer. msdb.dbo.suspect_pages tablosunda 823/824 hatalı sayfalar listelenir.
▸Kök Neden Matrisi
| Olasılık | Kök Neden | Açıklama |
|---|---|---|
| %70 | Depolama / SAN Donanım Hatası | Disk sürücüsü, SAN controller veya RAID pili bozulmuş, 8KB'lık veritabanı sayfası diske yarım yazılmıştır (torn page). |
| %20 | Disk Sürücüsü (Driver) & Firmware | HBA kartı veya depolama sürücüsü işletim sistemine başarı döndürmüş ancak veriyi fiziksel diske yazamamıştır. |
| %10 | PAGE_VERIFY Ayarının CHECKSUM Olmaması | Eski veritabanlarında CHECKSUM doğrulaması açık değildir. |
▸ACİL RUNBOOK (0-5dk)
-- 1. Şüpheli ve bozuk sayfaları msdb'den listele
SELECT database_id, file_id, page_id, event_type, error_count, last_update_date
FROM msdb.dbo.suspect_pages;
-- 2. Hangi tablonun etkilendiğini tespit et (örneğin File 1, Page 2450)
DBCC PAGE ('Prod', 1, 2450, 0) WITH TABLERESULTS;
-- 3. Veritabanında fiziksel bütünlük denetimi yap
DBCC CHECKDB ('Prod') WITH NO_INFOMSGS, ALL_ERRORMSGS;
-- 4. KURTARMA: En güncel yedekten Page Restore gerçekleştir
-- RESTORE DATABASE Prod PAGE = '1:2450' FROM DISK = 'D:\Backups\Prod_Full.bak' WITH NORECOVERY;
-- RESTORE LOG Prod FROM DISK = 'D:\Backups\Prod_Log.trn' WITH RECOVERY;REPAIR_ALLOW_DATA_LOSS çalıştırmayın! Bu komut hatayı düzeltmez, bozuk verileri kalıcı olarak siler.▸KALICI BLUEPRINT
- 1PAGE_VERIFY CHECKSUM Standardı: Tüm veritabanlarında CHECKSUM zorunlu kılınmalıdır:
ALTER DATABASE Prod SET PAGE_VERIFY CHECKSUM WITH NO_WAIT;- 1Haftalık DBCC CHECKDB: Haftalık bakım planı ile tüm veritabanları taranmalıdır.
- 2Yedek Doğrulaması: Yedekler alınırken
WITH CHECKSUMparametresi kullanılmalıdır.
▸Doğrulama
SELECT name, page_verify_option_desc FROM sys.databases WHERE name = 'Prod';
SELECT count(*) FROM msdb.dbo.suspect_pages WHERE event_type IN (1, 2, 3);Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
SQL Server Error 18456: State Kodlarına Göre Gerçek Neden
18456 hatasında State numarası gerçek nedeni söyler. State 5, 8, 11, 18, 38 ve 40 için ayrı çözümler, ERRORLOG okuma komutları.
SQL Server Error 1205 Deadlock: Grafiği Bulma ve Önleme
SQL Server 1205 hatasında deadlock grafiğini system_health oturumundan çıkarma, kurban seçimini anlama ve kalıcı önleme yöntemleri.
SQL Server Pool Timeout: Bağlantı Havuzu Tükenmesi Çözümü
"Timeout expired prior to obtaining a connection from the pool" hatasının komut zaman aşımından farkı, sızıntı tespiti ve .NET tarafında kalıcı düzeltme.