Sistem Veritabanlarını Rebuild Etmek
Sistem veritabanlarında oluşan problemler nedeniyle bazen rebuild etmek gerekir.(Başınıza hiç gelmeyebilir fakat her dba bu işin nasıl yapılacağını bilmelidir) Rebuild işlemi sistem veritabanlarını sıfırlayarak sistemin temiz bir şekilde açılmasını sağlar. Ama rebuild işlemi sistem veritabanlarının içindeki bütün verileri de sıfırlayacağından, öncelikle sistem veritabanlarının sağlıklı son backup’larının elinizde olduğundan emin olmanız gerekir. Eğer elinizde backup olmadan sistem veritabanlarını rebuild ederseniz bütün loginleriniz, joblarınız gider. Ve instance üzerindeki veritabanlarınızı instance’ı açtığınızda göremezsiniz. Instance’ını yeni kurulmuş bir instance gibi olur. Fakat veritabanı dosyalarını attach etme yöntemiyle bu yeni instance’a ekleyebilirsiniz. “Veritabanı file(dosya)’larının disklerini değiştirmek” isimli makalemde veritabanı dosyalarınızı nasıl attach edeceğinizi bulabilirsiniz.
Aşağıda rebuild öncesi ve sonrası yapılması gerekenleri ve rebuild işleminin etkilerini maddeler halinde anlattım;
- Model veritabanı genelde sıfırlansa bile çok problem oluşturmaz.
- Msdb veritabanı sıfırlansa job’larınızın gitmesi sizin için sıkıntı oluşturabilir. Bu yüzden job’larınızın create script’lerini de ayrı bir yerde tutmanızı öneririm.
- Master veritabanınız giderse login bilgilerinin gitmesi en büyük probleminiz olacaktır. Bu yüzden instance üzerindeki login’lerin sid’leri ile birlikte create script’lerini de ayrı bir yerde tutmanız faydalı olacaktır. “Loginleri başka bir instance’ a taşımak” isimli makalemde loginlerin sid’leri ile birlikte create script’lerini nasıl alacağınızı anlattım.
- Rebuild sonrası sql server service packleri ve hotfix’leri tekrar yüklemeniz gerekecektir. Bu yüzden aşağıdaki script sonucunu böyle durumlara hazırlıklı olmak adına saklamanızı öneririm.
SELECT SERVERPROPERTY('ProductVersion ') AS ProductVersion, SERVERPROPERTY('ProductLevel') AS ProductLevel, SERVERPROPERTY('ResourceVersion') AS ResourceVersion, SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime, SERVERPROPERTY('Collation') AS Collation;
- Aşağıdaki script’i kullanarak da bütün veritabanı data ve log dosyalarınızın şu anki path’lerini tutmalısınız. Bu sayede attach etmeniz gerekirse hangi veritabanının dosyalarının hangi path’lerde olduğunu bileceksiniz.
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'));
- Aşağıdaki script sonucu ile server seviyesinde ki konfigürasyonlarınızında yedeğini almanız her duruma hazırlıklı olmanızı sağlayacaktır.
SELECT * FROM sys.configurations;
- Rebuild işlemin geçmeden önce aşağıda görünen msdb ve model veritabanı dosyalarınızın backup’ı yoksa başka bir klasör’e kopyalamanızı öneririm.
Peki sistem veritabanları nasıl rebuild edilir?
Öncelikle sunucu üzerinde sql server kurulum dosyası olmalıdır. Daha sonra cmd komut satırını admin olarak çalıştırmalısınız.
Daha sonra cmd komut satırından aşağıdaki gibi cd komutunu kullanarak sql server kurulum dosyasının olduğu path’e geliyoruz.
Daha sonra aşağıdaki script’i çalıştırmalısınız. Aşağıdaki script’i yeni kurulum yaptığınız bir instance’ta server collation’ı değiştirmek için de kullanabilirsiniz.
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=rebuildedilecekinstanceadı /SQLSYSADMINACCOUNTS=sysadminhakkındasahipbirkullanıcı /SAPWD=’sysadminhakkındasahipkullanıcınınparolası‘ /SQLCOLLATION=servercollationadı
Rebuild işlemi bittikten sonra instance’ı açtığınızda sanki yeni bir kurulum yapmış gibi boş bir instance bulacaksınız. Bu aşamadan sonra, master, model ve msdb veritabanlarını teker teker restore edeceksiniz ya da bu makalede anlattığımız konfigurasyon ayarlarını teker teker yeniden set edeceksiniz.
Master veritabanının restore işlemlerini yapmak için;
“Master Veritabanını Restore Etmek” isimli makalelerimi okumanızı tavsiye ederim. Ayrıca msdb ve model veritabanlarınızı da restore etmelisiniz.
Msdb ve model veritabanının restore işlemlerini normal veritabanı restore işlemi gibi yapabilirsiniz. Ekstra bir ayar yoktur. Sadece msdb veritabanını restore edebilmeniz için SQL Server Configuration Manager’dan SQL Server Agent Servisini durdurmalısınız.
Msdb ve model sistem veritabanlarının script’lerini aşağıda bulabilirsiniz.
Model için;
RESTORE DATABASE model FROM DISK = 'C:\MSSQL\model2subat.bak' WITH REPLACE;
Msdb için;
RESTORE DATABASE msdb FROM DISK = 'C:\MSSQL\msdb2subat.bak' WITH REPLACE;
Eğer elinizde model ve msdb veritabanlarının backup’ları yoksa, sql server servisini durdurduktan sonra rebuild öncesi kopyaladığınız dosyaları mevcut msdb ve model veritabanı dosyalarının üzerinde yapıştırırsanız servisi tekrar açtığınızda job’larınızı görebilirsiniz. Ama en sağlıklı yöntemin backup’tan dönmek olduğunu belirtmek isterim.