Bu makalede System veritabanlarının nasıl rebuild edildiğini görmüş olacağız. System veritabanlarını rebuild etmek rebuild ettiğimiz instance üzerinde her şeyin sıfırlanmasına sebebiyet verecektir. Çünkü master veritabanı altında bulunan loginler,system konfigürasyonları,linked serverlar,endpoint yapılarında sıfırlanmaya sebebiyet verecek,msdb altında bulunan alert,job gibi yapılarında kaybolmasına sebebiyet verecektir. System rebuild işlemi yapmadan önce system database yedeklerinin bulunması olmazsa olmazımızdır. Ya da alert ve job create script’leri veya login bazında sh_help_revlogin() komutu ile instance altında bulunan tüm loginlerin create scriptinin alınması gerekmektedir. Yukarıdaki işlemleri yapmayıp System dosyalarımızın backup’ını almak yeterli olacaktır.
System databaselerini rebuild ettikten sonra rebuild öncesi sql server instance’a hangi CU’ların yüklendiği veya sql server instance üzerinde hangi collation yapısının olduğunun öğrenilmesi gerekmektedir.
System veritabanlarını restore ederken bizim için önemli olan iki system dosyamız master ve msdb veritabanımızdır. Model veritabanımızın şablon veritabanı olması ayrıca tempdb veritabanınında geçici işlemler yapılması ve system her açılışında sıfırlanması bizim için önemli olmayan system databaseleridir.
Not: tempdb veritabanının backup’ı alınmaz.
System rebuild işlemine geçeden önce system databaselerinin hangi pathlerde olduğunu öğrenmemiz gerekmektedir. Aşağıdaki komut ile system databaselerinin konumunu öğrenebiliriz. Örneğin tempdb farklı bir disk altında oluşturulduğu için yolunun öğrenilmesi gerekir. Diğer system dosyalarının C disk’i altında oluşturulması tavsiye edilen yöntemdir.
SELECT name, physical_name AS current_file_location FROM sys.master_files WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
Ayrıca system konfigürasyonlarının öğrenilmesi gerekmektedir. Bu yapı master veritabanı backup alınmazsa işimize yarayacak bir yapı olarak karşımıza çıkar.
Collation ve version bilgimizi aşağıdaki komut ile öğrenebiliriz.
SELECT SERVERPROPERTY('ProductVersion ') AS ProductVersion, SERVERPROPERTY('ResourceVersion') AS ResourceVersion, SERVERPROPERTY('Collation') AS Collation;
Rebuild işlemine geçelim. Cmd komut satırı yönetici olarak çalıştırıldıktan sonra Sql Server kurulum dosyasına gidilir. Instance bazlı collation değiştirme işleminin aynısı yapılmaktadır.
Gelen Cmd ekranında sqlkurulum dosyasına gidilir.
Çünkü sql server setup ilgili klasör altında bulunmaktadır.
Aşağıdaki komut setup dosyamızda bulunan ilgili instance’ı rebuild işlemi yapmış olacağız. Yukarıdaki serverproperty kısmında almış olduğumuz collation türünün doğru girilmesi gerekmektedir. Bu işlem instance collation değiştirme işlemiyle aynı olarak karşımıza çıkmaktadır.
setup.exe /q /ACTION=RebuildDatabase /INSTANCENAME= TEST2 /SQLSYSADMINACCOUNTS=administrator /SAPWD=Yunus1994 /SqlCollation=Turkish_CI_AS
Komudu çalıştırdıktan sonra system sql server sql servisi durdurup rebuild işlemine başlamaktadır.
Rebuild işlemi bittiğinde instance bazında kontrol ettiğimizde collation yapımızın ve sql version’un rebuild öncesi ile aynı olduğunu görmüş oluyoruz.
Aşağıdaki resimde system database dosyalarının path bilgilerini kontrol ettiğimizde tempdb yapımızın disk yolunu değiştiriyoruz. Çünkü kurulum öncesi tempdb yolumuz farklı bir klasör altındaydı.
Tempdb yolunu öğrenmek için başka bir komut:
select*from sys.sysaltfiles where dbid=DB_ID('TEMPDB')
Tempdb path değişimi için tempdb disk yolunu değiştirme makalesini okumanız gerekmektedir. Tempdb disk değişim işlemini yaptıktan sonra sql servisi restart ediyorum. Sebebi tempdb file’lara yeni belirlemiş olduğum path’de oluşsun.
Tempdb veritabanımızı rebuild öncesi instance da hangi diskin altında ise ilgili diske taşıdık.
Şimdi diğer system databaselerini restore etme işleminde model ve msdb veritabanları SSMS arayüzünden yapılabilirken Master veritabanı restore işlemi ise Startup parametlerinden –m parametresiyle yapılmaktadır. Master veritabanı sql server’ın kendisi olduğu için sql system’e maintenance modunda girilmesi gerekmektedir.
Not: Master veritabanı restore etme işlemi: sql server servisimiz açılmıyorsa, master veritabanını rebuild etmek istersek veya master veritabanımız corruption olmuşsa yapılan bir işlem olarak karşımıza çıkmaktadır.
Sql Server Configuration Manager ekranından ilgili instance’a sağ tıklayıp properties ekranında Startup Parameters kısmına girilip sql server bakım modu olan –m startup parametresi yazılır. Add denilip eklenir.
Yapılan işlemi Apply deyip uyguladıktan sonra sql server servisi stop edilir. Daha sonra sql server komut satırı Run as different user ile yönetici olarak çalıştırılır.
Gelen ekranda yetkili bir kullanıcı tarafından girilir.
Cmd komut satırına bağlanıldıktan sonra ilgili komut ile cmd komut satırında çalıştırılır. Stop olan sql server yapımızı bakım modunda başlatıyoruz.
NET START MSSQL$TEST2
Servis’i başlattıktan sonra default instance için işlem yapacaksanız sadece sqlcmd yazıp enter’a basmalısınız. Eğer named instance’a bağlanacaksanız aşağıdaki gibi sqlcmd -S sunucuadı\instanceadı ya da sqlcmd -S .\instanceadı yazmalısınız.
Servisi çalıştırdıktan sonra master.bak backup’ımızı restore işlemine tabi tutuyoruz.
RESTORE DATABASE master FROM DISK = 'C:\BACKUP\master.bak' WITH REPLACE;
Restore işlemi bittiğinde SQL Server bağlantıyı otomatik olarak koparıp servisi durdurdu.
Tekrardan Sql Configuration Manager’a gidip daha önce eklediğimiz -m parametresini kaldırmamız gerekir.
Yukarıdaki kaldırma işlemi yapıp Apply denildikten sonra sql server servis’i Start edilir.
SSMS arayüzünde S2\TEST2 instance’ına girdikten sonra database,login,linked server yapımız ve sp_configure ayarlarının geldiğini görmüş oluyorum.
Master veritabanımı restore yaptıktan sonra şimdi sırası ile model ve msdb veritabanımızı restore işlemine alıyoruz. Model veritabanımız şablon veritabanıdır. Restore edilmesede olur. İlgili veritabanların data file’ları önceden kopyalanmışsa başka bir ortamdan kopyalanıp değiştirilebilir.
Model veritabanı restore komutu.
RESTORE DATABASE model FROM DISK = 'C:\BACKUP\model.bak' WITH REPLACE;
Msdb veritabanı restore komutu.
RESTORE DATABASE msdb FROM DISK = 'C:\BACKUP\msdb.bak' WITH REPLACE;
Hata mesajı almamızın sebebi Sql Agent Servisinin çalışmasından dolayıdır. Sql Agent servisi kapatılıp tekrardan yukarıdaki msdb backup komutu çalıştırılabilir.
Başarılı bir şekilde msdb veritabanını restore etmiş olduk. Şimdi sql agent servisimizi açıp önceden tanımladığımız job’ın gelip gelmediğini görelim.
Rebuild işlemi yapmadan önce rastgele oluşturmuş olduğum Job’ında geldiğini görmüş oluyorum.
Bu makalede Sql Server Rebuild işlemini kapsamlı bir şekilde görmüş olduk. Başka bir makalede görüşmek dileğiyle.
0 Yorum