Bu makalede ise veritabanımızın oluşturulmuş olduğu disk yolunun değiştirilmesi işlemini ele almış olacağız. Bazen veritabanımız performans anlamında sıkıntılar yaşayabilir ve mevcut disk alanımızda yetmeyebilir. Bu gibi durumlarda farklı disklere ihtiyaç duyulmaktadır. Mevcut veritabanımızın performans sağlanması açısından disk yolu değiştirilir.
Şimdi uygulamalı bir şekilde işlemlerimize geçelim.
Gerçek sistemlerde başlangıç adımı olarak veritabanımızın disk yollara değişeceği zaman Data,Log,Temp için yeni disk alanlarının tahsis edilmesi gerekmektedir. Tahsis edilen bu disk alanlarının kurulması gerekmektedir.
Gerçek sistemde veritabanı kesintisinin minumum seviyede olması için hali hazırsa koşan veritabanının full,diff ve log backuplarının olması gerekmektedir. AdventureWorks veritabanı üzerinde bu işlemi yapmış olacağım mantığını anlayacağımız ümidindeyim.

Mevcut veritabanımızın data ve log disklerinin nerede olduğu aşağıdaki komut yardımıyla öğrenilmektedir.
NOT: Aşağıdaki komutlarla Data File yollarını öğrenebiliriz.
USE AdventureWorks2012
sp_helpfile
File name kısmında data ve log dosyasının yolunu öğrenebiliriz.

Aşağıdaki komutta dosya yollarını öğrenmek için kullanılır.
USE AdventureWorks2012
select * from sys.database_files
Yukarıdaki bilgi notundan sonra veritabanımızın disk yollarını değiştirelim.
İlgili veritabanımızda almış olduğumuz full,diff,log backup komutlarını veritabanımıza yeni disk yollarıyla restore işlemini gerçekleştiriyoruz.
Databases sekmesi üzerine sağ tıklayıp Restore Databases’a tıklıyoruz.

Gelen ekranda Device bölümün yanındaki 3 noktaya tıklayarak backup alınmış veritabanı dosyalarımızı seçebiliriz. Her dosya uzantısını NORECOVERY ile yapmakta mümkün ben aşağıdaki resimde görüldüğü full,diff ve log backup dosyalarımı seçiyorum.
Destination kısmında aynı database isminde mevcutta database olduğunu ismini AdventureWorks_ABC yapıyorum. En sonra işlemimizde gerçek veritabanı ile ismini değiştirmiş olacağız.

Yukarıdaki işlemleri tamamladıktan sonra Files sekmesine gelinir. Asıl önemli olan burasıdır. Burada veritabanımızın hangi disk üzerinde büyümesini istiyorsak o yol seçilir.
Gelen ekranda Relocate all files folder kısmına Data File folder ve Log file folder kısımlarında yeni oluşturulan yeni data ve log disk uzantıları değiştirilir. Yeni oluşturacağımız data yolunu Data File folder kısmından değiştirirsek .mdf ve .ndf dosyalarına yeni path uygulanır. Biz sadece mdf dosyasının yolunun değişmesini istediğimiz için Restore As kısmından bu işlem yapılır. Log file folder kısmından log dosyasının path’i değiştirilebilir. Çünkü sadece 1 tane log dosyası aktifdir.
Bununla uğraşacağınıza Restore As kısmından değiştirilmesi daha mantıklıdır. Bunun için Relocate all files folder kısmı ile bir şey yapılmaz
NDF uzantısınında değişmesi lazım çünkü ndf dosyamız aynı yerde var.

Options bölümünde recovery state kısmında restore işleminde veritabanımızın ayağa kalkıp kalkmayacağını belirleriz. Gerçek veritabanından loginlerin disable edilip veri akışının olmadığı durumlarda gerçek veritabanında en son log backup alınarak bu yaptığım yöntemdeki gibi recovery modda yapılabilir. Tail log backup işaretini kaldırıp çalıştırıyoruz. Bu tail log kısmının işaretli olması aktif çalışan veritabanlarının restore işleminde log yedeği alınmamış veritabanının son yedeğini almaktadır. Bu ifade ile veri bütünlüğü garanti altına alınmış olur.

Artık veritabanımız oluşmuş oldu.

Yeni isimle oluşturmuş olduğumuz veritabanını(AdventureWorks2012_ABC) restoring modunda bırakmıştık. Gerçek veritabanının(AdventureWorks2012) tail log backup’ını aldıktan sonra gerçek veritabanımız(AdventureWorks2012) restoring moduna düşecek ve yeni oluşturmuş olduğumuz veritabanının(AdventureWorks2012_ABC) üzerine tail log backup’ı restore işlemini gerçekleştirmiş olacaktık.
Şu da yapılabilir. Yukarıda yaptığımız gibi veritabanının Full Diff Log backupları norecovery modda restore edilir. Gerçek veritabanının altında bulunan loginler disable edilir ve ardından log backup alınır. Bu son alınan log backup restoring modda olan veritabanının üzerine recovery modda restore edilerek iki veritabanı eşit seviyeye getirilir.
Buraya kadar anlaşıldığına inanıyorum . Şimdi veritabanlarımızın isimlerini değiştiriyoruz.
ALTER DATABASE AdventureWorks2012 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
sp_renamedb AdventureWorks2012, AdventureWorks2012_ESKI
GO
ALTER DATABASE AdventureWorks2012_ESKI SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE AdventureWorks2012_ESKI SET READ_ONLY
ALTER DATABASE AdventureWorks2012_ABC SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
sp_renamedb AdventureWorks2012_ABC,AdventureWorks2012
GO
ALTER DATABASE AdventureWorks2012 set MULTI_USER WITH ROLLBACK IMMEDIATE
Not: Yukarıdaki kod bloğunda veritabanımızın ismininin AdventureWorks2012_ESKI olarak değiştirilip daha sonra read_only moduna alınarak herhangi bir sıkıntı anından bu veritabanına dönülebilir. Eski veritabanımızın hemen silinmesi tercih edilmez.
Bu işlemlerden sonra AdventureWorks2012 veritabanımızın disk yolunu değiştiğini görmüş oluyoruz.

Eğer yapmış olduğumuz senaryoda loginlerimiz disable çekilmişse tekrar enable hale getirilir. Büyük sistemlerde genellikle bu yöntem tercih edilmektedir.
Yukarıdaki veritabanı disk değiştirme yöntemi haricinde bir diğer yöntem ise Detach Attach etmek olabilir.
Bunun için ilgili veritabanı üzerine sağ tıklanır. TASK>DETACH kısmına tıklanır.

Gelen ekranda Drop Connections ifadesini seçtikten sonra Script ile veritabanı sql serverdan koparılır.
USE [master]
GO
ALTER DATABASE [AdventureWorks2012] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N'AdventureWorks2012'
GO
Bu yöntemle veritabanının sql serverdan koparmadan önce veritabanı file dosyasının olduğunu yerler öğrenilir.
Bu yöntem ile veritabanını sql server ile bağlantısını kesmiş oluruz.
USE AdventureWorks2012
select * from sys.database_files

Not: Detach işlemi yapmadan önce veritabanına bir istek gelmediğinden emin olmak için veritabanına bağlı loginlerin disable edilmesi gerekmektedir.
Detach işlemi yaptğımız veritabanını attach işlemi yapıyoruz. Attach işleminde yeni disk yolumuzu seçme işlemini yapıyoruz.
Detach işlemi tamamlandıktan sonra veritabanı dosyalarından taşımak istediklerinizi istediğiniz diskte windows üzerinden taşıma işlemini copy paste yöntemiyle gerçekleştirmeniz gerekiyor.
Taşıma işlemi bittikten sonra aşağıda görüldüğü gibi SSMS üzerinden Databases’e sağ tıklayarak Attach diyoruz.

Gelen ekranda Add diyerek mdf uzantılı data dosyamızı seçiyoruz. Bu seçimle birlikte veritabanı altındaki log ve diğer ndf dosyalarımız gelmiş oluyor.
Sadece ndf dosyamızı seçtikten sonra ldf dosyamızın yerinide değiştirmemize rağmen güncel yeri gelmiyor veritabanında ilk oluşturulduğunda nerede ise orası gelmekte.
Alt bölümde bulunan Current File Path kısmında 3 noktaya tıklayarak ndf ve log dosyalarını nereye taşımışsak ilgili klasör altında o dosyalar seçilmektedir.

Add diyerek veritabanımızın mdf file’ının olduğu path’e giderek mdf file’ına çift tıklıyoruz. Mdf file’ı seçtikten sonra SQL Server otomatik olarak diğer file’ları eski path’lerini gösterecek şekilde listeleyecektir. CurrentFilePath sekmesinden dosyaları kopyaladığımız yeni path’i göstererek ok’e tıklıyoruz. Ve daha sonra login’i disable ettiğimiz yerden tekrar enable ederek işlemi tamamlamış oluyoruz. Bu yöntem her ne kadar basit gözükse de büyük veritabanlarında kesinti süresi çok uzun süreceği için tercih edilmez.
Not: Veritabanımızı başka bir ortama taşıdığımızda veritabanın bulunduğu eski ortamında veri gelme ihtimali olabildiği için detach yapılmalıdır. Detach yapılmadan dosya yolunun kaydedilmesi gerekmektedir. Bu yöntemde yapılması dosya yolunun büyük sistemlerde kaybedilmesine sebebiyet verdiği için veritabanı Ofline moduna alınır. Veritabanının üzerine sağ tıklanır Task>Take offline ibaresine tıklanır. Online’a almak için tekrardan aynı işlemler yapılmaktadır.
USE [master]
GO
ALTER DATABASE [AdventureWorksDW2008R2] SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
TEKRAR online’a almak için aşağıdaki yol izlenir.

USE [master]
GO
ALTER DATABASE [AdventureWorksDW2008R2] SET ONLINE WITH ROLLBACK IMMEDIATE
GO
Bu makalede veritabanımızın büyümesinden dolayı diski değiştirme işlemini gerçekleştirmiş olduk. Başka bir makalede görüşmek dileğiyle.
“O su ile sizin için ekinler, zeytinlikler, hurma ağaçları, üzüm bağları ve her türden daha nice ürünler yetiştirir. Şüphesiz ki bunda sistemlice düşünen bir toplum için elbette tevhidi gösteren kesin bir delil vardır.” Nahl-11