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 Otomatik Kurulum narkotik 7 152 13-01-2018, Saat: 22:30
Son Yorum: narkotik
  SQL Server - Client Güncelleme CaglarCoskun 10 434 14-08-2017, Saat: 11:06
Son Yorum: uparlayan
  SQL Server Numarator CaglarCoskun 5 400 05-08-2017, Saat: 15:20
Son Yorum: CaglarCoskun
  MS-SQL Server Procedure Tavsiyeleriniz Fesih ARSLAN 21 1.119 28-07-2017, Saat: 08:21
Son Yorum: Fesih ARSLAN
  SQL Server Management Studio Nasıl Onarılır ? DelphiCanR 0 406 03-05-2017, Saat: 10:46
Son Yorum: DelphiCanR



Konuyu Okuyanlar: 1 Ziyaretçi