SQL Server Msg 605 Sorununun çözümü

SQL Sunucuzunda aşağıdaki gibi Msg 605 hatası aldıysanız aşağıdaki bilgilerle bu hatadan kurtulabilirsiniz.

Msg 605, Level 21, State 3, Line 1

Attempt to fetch logical page (1:4646581) in database 37 failed. It belongs to allocation unit 2432658505728 not to 656190132256768.

Msg 5243, Level 22, State 8, Line 1

An inconsistency was detected during an internal operation. Please contact technical support.

Yukarudaki gibi bir hata mesajı ile karşılaştığınızda yapılamsı gereken adımları izleyelim.

Öncelikle page numaralarını kesin olarak bilmeniz gerekiyor bunun için DBCC PAGE komutunu kullanın.

DBCC TRACEON(3604)
DBCC PAGE(‘VeriTabanıAdı’,1, 4646581,3)
DBCC TRACEOFF(3604)

NOTE: Parametreleri DBCC PAGE komutunun çıktısındaki alanlardan öğrenebilirsiniz. ( Bold olanlar 3 ) 0,1,2,3. Farklı iki opsiyon daha seçebilirsiniz. DBCC Page parametreleri şeklinde aratıp bulabilirsiniz.

Full Backup üzerinden hasarlı page alanının restore edilmesi için aşağıdaki adımları izleyebilirsiniz.

RESTORE DATABASE VeritabaniAdi
PAGE = ‘1:4646581’
FROM DISK = ‘D:\Yedek-Daily.bak’
WITH NORECOVERY

Genel olarak Hatayı düzeltme için aşağıdaki adımları izleyebilirsiniz.

Yedekleri kullanmadan da hasarı DBCC komutu ile onarabilirsiniz.

DBCC CHECKDB (‘VeritabaniAdi’) WITH NO_INFOMSGS
GO

Bu işlem sonucunda size hasarlı objelerin listeleri gösterilecektir. Bu hasarları toplu olarak ınarmak için REPAIR_REBUILD parametresini kullanabilirsiniz.

Note: Buna rağmen sorun çözülmez ise REPAIR_ALLOW_DATA_LOSS, parametresini kullanabilirsiniz fakat bu en son seçeneğiniz olmalıdır. Bu parametre veri kayıplarını kabul ederek onarım yap demektir.

  1. Adım SQL Sunucuyu Simle User Moduna Çekiyoruz
    ALTER DATABASE VeritabaniAdi SET SINGLE_USER
    GO
  2. Adim DBCC ile onarımı başlatıyoruz.
    DBCC CHECKDB(‘VeritabaniAdi‘, REPAIR_REBUILD)
    GO
  3. Adım Veritabanının Multi User Kullanımına Açıyoruz.
    ALTER database VeritabaniAdi SET MULTI_USER
    GO

!!! Eğer Yine aynı hataları almaya devam ederseniz son çözüm olarak veri kayıplarını kabul ederek işlem yaptırabilirsiniz. !!!

ALTER DATABASE VeritabaniAdi SET SINGLE_USER
GO
DBCC CHECKDB(‘VeritabaniAdi‘, REPAIR_ALLOW_DATA_LOSS)
GO
ALTER database VeritabaniAdi SET MULTI_USER
GO

Tek Tablo için DBCC Kullanımı

Repair işlemini Eğer sadece bir tablonuzda hasar var ise veya hasarlı tabloları biliyorsanız tüm veritabanına değilde sadece hasarlı tablolalarada uygulayabilirsiniz. Yine Sinle Mod’a geçip Tek tablo onarımı için aşağıdaki komutu kullanabilirsiniz. REPAIR_REBUILD hatayı düzeltmez ise REPAIR_ALLOW_DATA_LOSS parametresini deneyiniz.

DBCC CHECKTABLE(TabloAdi, REPAIR_REBUILD )
GO

Önemli Uyarı: Yukarıda belirtilen işlemleri Tam yedek almadan kesinlikle yapmayınız. Sistem yönetimi konusunda deneyiminiz yok ise bu komutları Canlı veritabanlarınızda asla denemeyiniz!

Teknolojik Blog
Aziz Ozdemiroglu

FacebookTwitterTumblrStumbleUponLinkedInPinterest


Bir cevap yazın

Connect with:




This site uses Akismet to reduce spam. Learn how your comment data is processed.