SQL Server 2019’da Sistem Veri Tabanlarının Bozulması ~1
SQL Server’da iş süreçlerimizi yönettiğimiz veri tabanlarının dışında veri tabanları bulunmaktadır. Bu veri tabanları içerisinde kullanıcılar, joblar, şifreler, Server seviyesindeki objeler ve SQL Server’ın kullandığı ayarlar saklanmaktadır. Yapılan herhangi bir değişiklik SQL Server’ı direk kullanılmaz hale getirebilmektedir. Büyük ölçekli Transaction’lara sahip sistemlerde her bir saniyenin önemi büyük olmakla beraber oluşabilecek bir hata durumunda üretim ve veri kaybı kaçınılmaz olacaktır. Sistem veri tabanlarını kullanmak çok istisna durumlar haricinde mantıklı bir durum değildir. Sistem veri tabanlarının bozulması kullanıcılardan kaynaklandığı gibi SQL Server’ın üzerinde barındığı sunucudan kaynaklı hatalar kaynaklı da olabilmektedir:
- Sistem veri tabanları altına başka bir veri tabanından tablo yedeklenmesi en çok yapılan işlemler arasındadır. Bu kesinlikle yapılmamalıdır. (Test sunucusunda çalışmak her zaman beklenen durumdur.)
- Server seviyesinde Trigger yazıldığında olası bir hatada direk SQL Server kullanılmaz hale gelecektir.
- Msg 823-24-25 hataları direk SQL Server’da alınan sistem kaynaklı en çok bilinen hatalardır.
- Page seviyesinde bozulmalar.
- Tabloların bozulması ile alakalı alınan hatalar.
- Metadata bilgilerinin bozulması en önemli etkenler arasında sayılabilir.
Varsayılım ki SQL Server bozuldu ve çalışamaz hale geldi. Düzeltmek için ne yapabiliriz? SQL Server setup dosyalarının olduğu dizine gitmemiz gerekiyor.
Bendeki Setup dosyaları Resim 1’deki gibi konumlandırılmış haldedir. Ben sistemimde bir dosya altında tutuyorum ama sizlerde CD olarak eklenmiş olabilir. Command Prompt’u (CMD) yönetici olarak çalıştırmanız ardından ilgili dizine gitmeniz gerekiyor.
Resim 2’deki görüldüğü üzere yönetici olarak çalıştırıp kurulum dosyalarının olduğu dizine eriştik. Şimdi çalıştırmamız gereken parametreleri tanıyalım.
- /ACTION= Setup’a gönderilecek parametrenin cinsinin belirtilmesidir. Biz bu işlem için REBUILDDATABASE kullanacağız.
- /INSTANCENAME= Hangi Instance üzerinde çalışma yapıyorsak belirtiyoruz.
- /SAPWD= Sistem üzerinde oluşturulacak olan “sa” kullanıcısının şifresini bu parametrede belirliyoruz.
- /SQLSYSADMINACCOUNTS= Sql server üzerinde AD üzerinden herhangi bir kullanıcı yada ilgili makine üzerinde login olan kullanıcı ismini verebiliriz.
- /SQLCOLLATION=Oluşturulacak yeni veri tabanlarının Collation türünü burada belirtiyoruz.
Gerekli tanımlamaları tamamladıktan sonra ekrandaki gibi komutları çalıştırıyorum;
[php]SETUP.EXE /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SAPWD=1 /SQLSYSADMINACCOUNTS=DMC /SQLCOLLATION=TURKISH_CI_AS[/php]
Çalıştırdığım örnek kodu ekledim. Çok kısa sürede bütün sistem veri tabanlarını sıfırdan oluşturuyor vs girilen sa ve admin account ile giriş sağlayabiliyorsunuz. Bu işlemi gerçekleştirdiğimizde;
- SQL Server master,model, msdn veri tabanları sıfırlanacaktır. SQL Server’ı ilk kurulumdaki halini düşünebiliriz. Kullanıcı veri tabanlarına herhangi bir zarar gelmez.
- Tüm joblar silinecektir.
- Tüm kullanıcılar silinecektir.
- Tüm historical tabloların içi boş olacaktır.
- Model veri tabanı üzerinde herhangi bir nesne eklediyseniz o nesne bu işlem sayesinde yok olacaktır. Yeni veri tabanı tanımlamlarınızda o nesne gelmeyecektir.
- Mail konfigurasyon işlemlerini baştan yapmanız gerekecektir.
- Role ve Credentials baştan oluşturmanız gerekecektir.
- Server Objeleri içerisinde yer alan Triggers, Linked Servers, Endpoints ve Backup devices kısımlarını tanımlamanız gerekecektir.
- Alerts ve Operator’leri baştan oluşturmanız gerekecektir.
Bu işlem sonrasında yukarıdaki maddeleri kesinlikle göz ardı etmeyiniz. Eğer elinizde sistem veri tabanları yedeği bulunursa restore yapabilir tüm bu nesneleri geri getirebiliriz, yoksa bütün nesneleri tek tek tanımlamak zorunda kalacaksınız. 2. yazıda sistem veri tabanlarını restore etme işlemini gerçekleştireceğiz. Görüşmek üzere.
Kaynakça:
Common SQL Database Corruption Errors, Causes and Resolutions