MSSQL Server’da Master Database’ini Kurtarma

  • SQL Server 2008 R2
  • SQL Server 2012
  • SQL Server 2014
  • SQL Server 2016
  • SQL Server 2017
  • SQL Server 2019

Bu yazıda SQL Server 2019 sürümü kullanılmıştır.

MSSQL Serverda sistem database’lerinin backup’ının alınması çok önemlidir. Bu databaseler bizim yaptığımız bütün ayarları, kullanıcıları, yetkileri, jobları vs. tutar. Bu sebeple bu databaselerden herhangi biri bozulduğunda veya dosyaları silindiğinde, o databaseden yaptığımız ayarlara erişemez halde oluruz.

Sistem database’lerinin en önemlisi master database’idir çünkü bu database olmadan MSSQL servisini çalıştırmamız imkansızdır.

Başlamadan önce sunucumuzu inceleyelim. Senaryomuzda sunucumuzda Nortrhwind database’i mevcut,hakan ve sql_user diye iki kullanıcımız var ve configlerimize baktığımızda fill factor, min server memory vs. gibi bazı ayarlarda değişiklikler yapılmıştır. Bu ayarlar yapılırken herhangi bir best practice uygulanmamıştır tamamen değişiklikleri gösterebilmek adına kurgulanmıştır.

Master database’i bozulduğunda(corruption) yada dosyaları silindiğinde SQL servisini çalıştırmak istediğimizde aşağıdaki gibi bir hata alırız.

Hatada belirtildiği gibi Event Viewer üzerinde Windows Logs sekmesinde Application kısmına baktığımızda Cannot recover the master database. SQL Server is unable to run. Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online. şeklinde bir hata logu görürüz.

Bu hatada yazdığı üzere master database’i bozulmuş durumdadır. Yani dosyaları mevcut ancak kullanılamaz durumdadır.

İşlemlerimize başlamadan önce diğer databaselerimizin dosyalarının bir kopyasını mutlaka alınız.

Sunucunuzda SQL Server için saklanmış olan setup dosyanın nerede olduğunu bulunuz ve bulunduğu yolu(path) kopyalayınız. Benim sunucumda C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\SQL2019 yolunda bulunuyor sizin kullandığınız sürüme göre “150” kısmı ve “SQL2019” kısmı farklı olabilir.

Ardından command prompt‘u açıp cd C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\SQL2019 yazarak setup dosyasının bulunduğu yola gidin.

cd C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\SQL2019

Bu path’e geldiğiniz de aşağıdaki kodu manipule ederek sizin ayarlarınızı yazıp çalıştırın.

.\setup /ACTION=REBUILDDATABASE /INSTANCENAME=<instance_name> /SQLSYSADMINACCOUNTS=<admin_account> /SAPWD=<sa_password>

Benim sunucum için kullandığım kod aşağıdaki gibidir.

.\setup /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=WIN-4VBNMUPBBO0\Administrator /SAPWD=Passw0rd1

İşlem bittiğinde cmd sizi bir alt satıra atacaktır.

SQL Server Configuration Manager‘ı açıp SQL servisine sağ tıklayıp Start diyoruz.

Sunucuya bağlanıp kontrollerimiz yapıyoruz.

Burada göründüğü gibi Northwind database’imiz mevcut değil ,kullanıcılarımız ve yaptığımız ayarlar default hale dönmüş durumda.

Eğer master database’imizin backup’ı elimizde yoksa bu adımdan sonrasını gerçekleştiremeyiz. Bu sebeple Northwind database’ini -gerçek senaryoda bir çok database olacaktır- sunucuya Attach edip kullanıcılarımızı yeni baştan oluşturup yetkilendirmelerimiz yapmamız ve diğer ayarlamızı konfigüre etmemiz gerekmektedir.

Ancak master‘ın güncel backup‘ı elimizde ise tekrardan SQL Server Configuration Manager‘ı açıp SQL servisine sağ tıklayıp Properties‘e tıklıyoruz.

Startup Parameters sekmesinde -m parametresini Add diyip ekliyoruz.

Apply diyip servisimizi Restart ediyoruz. Eğer servis kendisini kapatırsa da Start diyerek servisi başlatıyoruz.

Şuan servisimizi single-user (tekil kullanıcı) modunda çalıştırıyoruz bu sebeple tek bir bağlantıya (connection) izin vereceğinden SQL Server Management Studio(SSMS) üzerinden bağlantı sağlamaya çalışırsak aşağıdaki hatayı çokça kez alacağız. Bu sebeple SSMS‘i kapatıp tekrardan cmd‘ye dönüyoruz.-cmd’yi kapattıysanız yenisini açabilirsiniz-

CMD’de öncelikle SQL servisininin yüklü olduğu C:\SQL\x64\MSSQL15.MSSQLSERVER\MSSQL\Binn path’ine gidiyoruz. Sizin pathiniz benden farklı olabilir.

cd C:\SQL\x64\MSSQL15.MSSQLSERVER\MSSQL\Binn

Ardından sqlcmd yazıp Enter’a basıyoruz.

Artık SQL Server’a bağlanmış bulunuyoruz. master database’imizn backup’ı her nerdeyse oradan restore edecek şekilde kodu yazıp Enter‘a basıyoruz. Size tavsiyem kodu notepad’de yazıp buraya kopyalamanız. –REPLACE kodu olmadan çalışmaz-

USE [master]
RESTORE DATABASE [master] FROM  DISK = N'C:\SQL\x64\MSSQL15.MSSQLSERVER\MSSQL\Backup\master.bak' WITH  FILE = 1,  NOUNLOAD,  REPLACE,  STATS = 5

GO

SQL Server Configuration Manager‘ı açıp SQL servisine eklediğimiz -m parametresini; servisi’e sağ tıklayıp Properties‘e tıklayarak Startup Parameteres sekmesinde -m üzerine tıklayıp Remove diyerek kaldırıyoruz.

Apply ve ardından OK tıklıyoruz.

SQL Servisimizi Restart edip bağlanıyoruz.

Gördüğünüz gibi sunucumuzun ilk olduğu haline geri getirmiş olduk.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s