Makale Özeti

Gerek performans gerek de depolama alanın değiştirilmesi gereksinimleri ile veritabanı dosyalarının yerlerinin değiştirilmesi veritabanı kullanıma alındıktan uzunca bir süre sonra da gündeme gelebilir, peki bu şekilde bir senaryoda nasıl bir çözüme gideceğiz?

Makale

SQL Server'da yer alan veritabanlarınları verileri .mdf ya da .ndf uzantılı dosyalarda saklarlar ancak SQL Server'ın mimarisi gereği .ldf uzantılı bir dosya da logları yazmak amacı ile mutlaka kullanılır. Bu dosya tiplerinden .mdf ve .ldf uzantılı olanları bir veritabanında mutlaka yer alıyor olmalıdır. Veriler mdf uzantılı dosyada saklanacak ve gerçekleştirilecek olan her transaction'ında da ldf mutlaka kullanılıyor olacaktır. Gerek performans gerek de depolama alanın değiştirilmesi gereksinimleri ile bu dosyaların yerlerinin değiştirilmesi veritabanı kullanıma alındıktan uzunca bir süre sonra da gündeme gelebilir, peki bu şekilde bir senaryoda nasıl bir çözüme gideceğiz? Kullanıcı veritabalarında bu durumu iki farklı şekilde çözebiliriz, eğer veritabları farklı bir instance'a alınacak ise Detach ve Attach çözüm olacaktır ancak aynı eğer instance değişmiyor ise tek çözüm Detach - Attach değildir ki keza sistem veritabanlarını detach edemezsiniz. Sistem veritabanlarının dosyalarını ve bu dosyaların fiziksel adreslerini görüntülemek için aşağıdaki kodları kullanabilirsiniz, tabi ki kullanıcı veritabanlarında da aşağıda açıkladığımız kodlar çalışmaya devam edeceklerdir. SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO Yukarıdaki kodlar TempDB'nin dosyalarını ve bu dosyaların bulunduğu fiziksel adresleri listeliyor olacaktır. Kodlar çalıştırıldıktan sonra aşağıdaki gibi bir sonuç kümesi ile karşılaşacaksınız. Dosyaların lokasyonunu değiştirmek için ise aşağıdaki kodlar çalıştırılabilir. Aşağıdaki kodlarda yer alan FILENAME sözcüğü aracılığı ile belirtilen bölüm dosyaların yeni lokasyonu olacaktır.

USE master; GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf'); GO
SQL Server'ın servisi restart edilmeden bu ayarlar geçerli olmayacaktır. Bu kodlar çalıştırıldıktan sonra servis durdurulup dosyalar yeni lokasyonlarına taşınmalıdır, ardından servis yeniden start edildikten sonra tempdb'nin dosyalarının yeni yeri ayarlanmış olacaktır.
Yukarıdaki kodlar yardımı ile kullanıcı veritabanları ile sistem veritabanlarının dosyalarının yerlerini sorunsuz bir şekilde değiştirebilirsiniz ancak kodları dikkatle incelerseniz USE master şeklinde başladığını göreceksiniz peki Master veritabanının dosyalarının yeri nasıl değişecektir? Master veritabanı üzerinde gerçekleştirilecek olan değişikliklerin pek çoğu startup parametreleri ile gerçekleştirilir, yani servis start edilirken ayarlanır. Startup parametrelerine erişip değiştirmek ya da yenilerini eklemek için Start Menü'den All Programs-->Microsoft SQL Server 2008-->Configuration Tools aracılığı ile gerekli kısa yolları görüntüleyip oradan da SQL Server Configuration Manager'ı açabilirsiniz. SQL Server Configuration Manager SQL Server'ın servislerini listeliyor olacaktır burada ayarlama yapılmak istenen instance'ın DataBase Engine servisinin üzerinde sağ tıklayıp, özellikleri görüntülendikten sonra açılan pencerede Advanced tabına geçilir. Advanced tabında da Startup Parameters bölümü değiştirilebilir. Bu bölümde zaten bir takım ayarların yapılmış olduğu gözlenmenecektir.
-dC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf; -eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\LOG\ERRORLOG;
-lC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
Bu parametrelerden -d Master veritabanın data dosyasının fiziksel adresini, -l log dosyasının fiziksel adresini ve -e parametresi de hata loglarının yer alacak olduğu dizini belirtir. Bu parametreler yenileri ile değiştirilip ayarları kaydedip ardından servisi durdurduktan sonra, master veritabanının dosyalarını yeni yerine taşınır. Servis yeniden start edildikten sonra master veritabanı belirtilen yeni path'deki dosyaları kullanıyor olacaktır.
Kaynak: MSDN