Backup Restore İşlemleri
SQL Server veritabanlarının yedeğini alma işlemine backup denir. Bu yedeği SQL Server Instance üzerine yükleme işlemine de restore denir. Backup Restore işlemini bir çok işlem için kullanabiliriz. Aşağıda en çok kullanma sebeplerimizi bulabilirsiniz.
- Düzenli bir yedek almak için
- Anlık bir seferlik yedek almak için
- Bozulmuş bir veritabanını backup’ı kullanarak yeniden yüklemek için
- Veritabanını başka bir instance’a ya da başka bir diske taşımak için
3 tip backup alabiliriz.
Full Backup: Genel anlamda backup alma ifadesinin karşılığıdır diyebiliriz. Veritabanının tamamının backup’ını alır.
Differential Backup: En son alınan Full Backup’tan sonraki fark backup’ı alır.
Log Backup: Transaction Log dosyasının backup’ını alır.
Örnek bir senaryo ile Bu backup çeşitlerini nasıl kullanabileceğimizi anlatayım.
Senaryomuzda haftada bir kere full backup alındığını, her akşam 20:00’de differential backup alındığını, 2 saatte bir kere de log backup alındığını düşünün.
Çarşamba günü öğlen 3 de bir sıkıntı yaşandığını ve veritabanının yanlışlıkla silindiğini söylediler. Sizden en son backup’a dönüş yapmanızı istiyorlar.
Dönüşümüz şu şekilde olacaktır. En son alınmış full backup’ı norecovery mode’da restore ederiz. Sonra Salı akşam 20:00’daki differential backup’ı restore ettiğimiz veritabanının üzerine yine norecovery’i mode’da restore ederiz. Sonra da Differential Backup’tan sonra alınmış tüm log backup’ları norecovery mode’da restore ettikten sonra son log backup’ı recovery mode’da restore ederek işlemi tamamlarız.
Backup ve Restore işlemlerini SSMS üzerinden de ya da script aracılığı ile yapabilirsiniz.
Full Backup için: SSMS üzerinden veritabanına sağ tıklayıp Task->Backup diyerek Destination kısmında Sağ tarafta Add yazan yere tıklıyoruz. Ve aşağıdaki gibi backup’a .BAK uzantılı bir isim veriyoruz ve ok’e tıklıyoruz.
Daha sonra aşağıdaki gibi Media Options’dan Verify backup when finished’ı tikliyoruz. Bu işlem backup bittikten sonra backup’ın doğru alındığı Restore HeaderOnly ifadesi ile teyit edecektir. Korkmayın teyit ederken restore işleminin kendisini yapmıyor. Fakat backup bittikten sonra yaklaşık restore süresi kadar işleminizi uzatacaktır.
Sp_configure üzerinden backup compression default ayarını yapmadıysanız aşağıdaki gibi Backup Options üzerinden Set backup compression’ı Compress Backup seçmenizde fayda var. Bu şekilde alacağınız backup boyutunu küçültebilirsiniz.
Sp configure ile ilgili detayları “sp_configure(SQL Server’da Server Seviyesinde Konfigurasyonlar)” isimli makalemde bulabilirsiniz.
Bütün bu işlemleri yaptıktan sonra ok’e tıklarsanız backup’ı alacaktır. Ya da yukarıdaki resimde sol üstte gördüğünüz Script’e tıklarsanız size yapacağı işlemlerin script’ini verecektir. Ben bütün işlemleri script’ini alarak ve daha sonra bu script’i çalıştırarak gerçekleştiriyorum size de aynısını tavsiye ederim.
Yaptığımız işlemlerin script’i de aşağıdaki gibi.
BACKUP DATABASE [testDB] TO DISK = N'C:\Backup\testDB.BAK' WITH NOFORMAT, NOINIT, NAME = N'testDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10 GO declare @backupSetId as int select @backupSetId = position from msdb..backupset where database_name=N'testDB' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'testDB' ) if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''testDB'' not found.', 16, 1) end RESTORE VERIFYONLY FROM DISK = N'C:\Backup\testDB.BAK' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND GO
Differential ve Log Backup için: Birkaç farkla aynı işlemleri gerçekleştiriyoruz. Task->Backup dedikten sonra Backup Type kısmından Log Backup için Transaction Log’u, Differential Backup için Differential’ı seçiyoruz.
Birde backup ismi verirken Log backup alacaksak uzantısını .trn olarak yazıyoruz.
Restore: SSMS üzerinde Databases’a sağ tıklayıp restore database diyoruz ve açılan sekmede source kısmında device’ı seçerek sağ tarafran add diyoruz. Hangi backup’ı yükleyeceksek o backup dosyasını bulup ok diyoruz ve karşımıza aşağıdaki gibi bir ekran çıkıyor.
Database’i seçersek msdb üzerindeki alınmış backup tarihçesinden istediğimiz backup’ı seçerek restore işlemini gerçekleştirebiliriz. Fakat backup belirtilen path üzerinde hala bulunmuyorsa restore işlemi fail edecektir.
Mesela aynı instance üzerine farklı bir isimle kaydedelim. Yeni ismi prodDB olsun. Yukarıdaki ekranda Destiantion daki Database kısmına prodDB yazıyoruz ve Files sekmesine geçiyoruz. Files kısmında Restore As’den oluşacak file’ların pathlerini değiştirebilirsiniz. Ya da test amaçlı bir restore yapacaksanız ve bir sürü file’ınız varsa ve bütün file’ların değişik disklere dağıtmak yerine tek bir diskte olmasını istiyorsanız aşağıdaki gibi Relocate all files to folder deyip tek bir diski gösterebilirsiniz. Log dosyası için ayrıca Log file folder’ı seçmeniz gerekiyor.
Options kısmına geçiyoruz. Aşağıda gördüğünüz Overwrite the existing ile başlayan seçenek mevcut var olan bir veritabanının üzerine yazmak istediğinizde seçmeniz gereken seçenek. Recovery State’ten Recovery ya da Norecovery mode’da restore etmek istediğinizi seçiyorsunuz. Makalenin başındaki örnek senaryoda bu işleme neden ihtiyacımız olabileceğiniz anlatmıştım.
Script’ini aldığımızda karşımıza aşağıdaki gibi bir script çıkıyor.
USE [master] RESTORE DATABASE [prodDB] FROM DISK = N'C:\Backup\testDB.BAK' WITH FILE = 1, MOVE N'testDB' TO N'C:\test\prodDB.mdf', MOVE N'testDB_log' TO N'C:\test\prodDB_log.ldf', NOUNLOAD, STATS = 5 GO
Merhabalar,Makaleleriniz sayesinde backup / restore işlemlerini problemsiz başarmış bulunmaktayiz.Emeğiniz için tsk ederim.
Rica ederim Ali Rıza Bey. işinize yaradıysa ne mutlu bize.
Çok güzel bir anlatım teşekkürler.
Rica ederim. Güzel yorumunuz için ben teşekkür ederim.
merhaba, bir makalenizde tranaction log backup ın, ldf\’in size\’ını düşüreceğini okumuştum, bunu denedim, ancak ldf boyutunda hernangi bir değişim olmadı. Sonrasında da bunu araştırınca bazı formlarda, log back\’ın ldf\’in boyutunu düşürmeyeceğini okudum. Bu neden acaba? bilgi verebilirseniz seviinrim.
Merhaba,
Transaction log backup ldf’in içini truncate eder. Bu da transaction log’u shrink edilebilir hale getirir. Transaction log’un boyutunu küçültme shrink işlemidir.