Veritabanının Farklı İsimle Restore Edilmesi
SQL Server da sık karşılaştığım sorulardan bir tanesi sistemde var olan bir veritabanının farklı isimle kopyasını nasıl oluşturabileceğiydi. Aynı soruyla bir forumda da karşılaştıktan sonra bu konuyu yazmam gerektiği kanaatine vardım. Öncelikle elimizde var olan bir sql server backup dosyası restore edilirken aksi belirtilmediği sürece SQL Server backup alınırken kullanılan data ve log dosyaları ile aynı lokasyonda aynı isimle yine data ve log dosyası oluşturmaya çalışır. Eğer fiziksel olarak o lokasyona erişemiyorsa veya ilgili dosyalar başka bir uygulama tarafından kullanılıyorsa hata verecektir. Bu neden aynı makine üzerine farklı bir isimle bir backup dosyasını restore etmek istiyorsak SQL servera data ve log dosyalarını varsayılandan farklı olarak farklı konumda oluşturmasını söylememiz gerekir. Bunun içinde Restore komutuyla beraber MOVE seçeneğini kullanmamız gerekiyor. Şimdi bu seneryoyo Microsoft’un örnek veritabanı olan AdventureWorks2012 üzerinde gerçekleştirelim.
İlk adımda aşağıdaki gibi AdventureWorks2012 veritabanının Full backupını alıyorum.
BACKUP DATABASE [AdventureWorks2012] TO DISK='C:\AdventureWorks2012_full.bak'
WITH INIT
Backup işlemimiz bittikten sonra sıra bu backup dosyasını farklı isimle restore etmeye geldi. Öncelikle Restore komutunu Move parametresiyle çalıştırmak için backup aldığım veritabanına ait Logical Name değerlerine ihtiyacım var. Onları elde etmek için Restore Filelistonly komutun aşağıdaki gibi çalıştırıyorum.
RESTORE FILELISTONLY FROM DISK='C:\AdventureWorks2012_full.bak'
Yukarıdaki komutumuzun çıktısı şöyle olacaktır.

Yukarıdaki resimde gördüğümüz gibi aksi belirtilmedikce restore işlemi Physical Name kolonundaki lokasyona yapılacaktır ki bu lokasyondaki dosyalarda zaten şuan SQL server tarafından kullanııyor. Bu nedenle farklı bir lokasyona data ve log dosyalarını taşımamız gerekiyor. Bunun için SQL Servera Restore işlemi sırasında bunu aşağıdaki gibi belirtmeliyiz.
RESTORE DATABASE AdventureWorks_Temp FROM DISK='C:\AdventureWorks2012_full.bak'
WITH
MOVE 'AdventureWorks2012_Data' TO 'c:\AdventureWorks_Temp\AdventureWorks2012_Data.mdf',
MOVE 'AdventureWorks2012_Log' TO 'c:\AdventureWorks_Temp\AdventureWorks2012_Log.ldf'
Yukardaki Restore komutunda gördüğümüz gibi MOVE ile kullandığımız ilk parametre veritabanının Restorefilelistonly komutuyla elde ettiğimiz Logical name değerleridir. Bu şekilde veritabanımı AdventureWorks_Temp olarak restore edebiliyorum. Aşağdıaki resimde görüldüğü gibi veritabanım Object Explorer pencersinde görünecektşr.