Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL Server veritabanını Suspect & Emergency modundan kurtarmak
#1
Merhaba,

Elektrik kesintisi veya donanım arızalarından kaynaklanan bazı problemler ister istemez çalışan sistemlere zarar verebiliyor. Sadece bilgisayar dosyaları ve işletim sistemi dosyaları değil, veritabanı üzerindeki MDF ve LDF dosyaları da nasibini alıyor.

Bu iki dosyanın birbirleriyle uyumsuz olmaları çeşitli uyarılar ve hatalar döndürüyor veya masterdb üzerinde bozulmalar yaşanabiliyor. Harddisk üzerine veri okuma yazma işlemlerini gerçekleştirememesi de bu sebeplerden birisidir. Bu gibi durumlarda veritabanınız SUSPECT moduna geçebiliyor.

Çözüm:

  1. Sql Management Studio'yu çalıştırın ve master db seçiliyken new query'e basın.
  2. Veritabanı üzerinde el ile ayarlar yapmanız için durum bilgisini sıfırlamanız gerekiyor. >>> EXEC sp_resetstatus 'DelphiCan_2017'
  3. Şimdi veritabanı dosyalarını emergency moduna çekelim. >>> alter database DelphiCan_2017 set emergency
  4. Veri bozukluklarını tespit edelim. (bu işlem 15gb boyutundaki db için 5~10dk civarında sürüyor) >>> dbcc checkdb ('DelphiCan_2017')
  5. Veritabanı üzerinde düzenlemeleri aktif edebilmemiz için emergency modundan çıkartıp bir tek bizim erişeceğimiz hale getiriyoruz. >>> ALTER DATABASE DelphiCan_2017 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
  6. Şimdi yarım oluşan veya oluşamayan log ve veri dosyalarını kaldırıyoruz. >>> DBCC CHECKDB ('DelphiCan_2017', REPAIR_ALLOW_DATA_LOSS)
  7. Artık normal moda döndürebilir ve kullanıcıların erişimine açabiliriz. >>> ALTER DATABASE DelphiCan_2017 SET MULTI_USER
{ talk is cheap show me the code. }
Cevapla
#2
selamlar
bende sizinkine benzer bir yapıyı script haline getirmiştim
Belki birinin işine yarar
    Declare @veritabani as nvarchar(max),
            @sql as nvarchar(max);
 
    set @veritabani='XXXXX'; --  XXXXX ile belitilen yeri kendi veritabanı adınızı yazınız
 
    set @sql='USE master;
              
              EXEC sp_resetstatus ''' + @veritabani + ''';
              
              alter database ' + @veritabani + ' set Emergency;
              
              USE ' + @veritabani + ';
              dbcc checkdb (''' + @veritabani + ''');
              
              ALTER DATABASE ' + @veritabani + ' SET EMERGENCY;
              
              ALTER DATABASE ' + @veritabani  + ' SET SINGLE_USER WITH ROLLBACK Immediate;
              
              DBCC CHECKDB(' + @veritabani + ', REPAIR_ALLOW_DATA_LOSS);
              
              USE ' + @veritabani + ';
              
              ALTER DATABASE ' + @veritabani + ' SET Multi_User
             '
    exec (@sql);
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#3
(22-12-2017, Saat: 15:31)adelphiforumz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olselamlar
bende sizinkine benzer bir yapıyı script haline getirmiştim
Belki birinin işine yarar
    Declare @veritabani as nvarchar(max),
            @sql as nvarchar(max);
 
    set @veritabani='XXXXX'; --  XXXXX ile belitilen yeri kendi veritabanı adınızı yazınız
 
    set @sql='USE master;
              
              EXEC sp_resetstatus ''' + @veritabani + ''';
              
              alter database ' + @veritabani + ' set Emergency;
              
              USE ' + @veritabani + ';
              dbcc checkdb (''' + @veritabani + ''');
              
              ALTER DATABASE ' + @veritabani + ' SET EMERGENCY;
              
              ALTER DATABASE ' + @veritabani  + ' SET SINGLE_USER WITH ROLLBACK Immediate;
              
              DBCC CHECKDB(' + @veritabani + ', REPAIR_ALLOW_DATA_LOSS);
              
              USE ' + @veritabani + ';
              
              ALTER DATABASE ' + @veritabani + ' SET Multi_User
             '
    exec (@sql);

Katkılarınız için teşekkür ederim.

Ben yine de acil'e çekme ve checkdb işlemlerinin beklemeli yapılması gerektiğine inanıyorum. Bu kadar riskli bir duruma giren riskli veritabanındaki tüm veriler bizler için çok kıymetli. O yüzden gerek tüm donanımı yoran checkdb fonksiyonu, gerekse yapılan kritik hamleler bu işlemin parça parça yapılmasını öngörmeme neden oluyor. Fonksiyonunuz verdiğim anlatımın kod üzerinde vücut bulmuş hali olmuş, elinize sağlık Shy
{ talk is cheap show me the code. }
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQL Server Üzerinden Kümülatif Toplam Gösterimi adelphiforumz 4 213 16-03-2018, Saat: 09:15
Son Yorum: esistem
  MSSQL Server Hakkında Bilmek İstedikleriniz esrehmaan 23 1.838 19-02-2018, Saat: 09:57
Son Yorum: klavye
  Sql Server Otomatik Kurulum narkotik 7 265 13-01-2018, Saat: 22:30
Son Yorum: narkotik
  SQL Server - Client Güncelleme CaglarCoskun 10 636 14-08-2017, Saat: 11:06
Son Yorum: uparlayan
  SQL Server Numarator CaglarCoskun 5 557 05-08-2017, Saat: 15:20
Son Yorum: CaglarCoskun



Konuyu Okuyanlar: 1 Ziyaretçi