SQL Server üzerindeki Database (veri tabanı) Backup (yedek) işlemi, Database üzerinde yer alan tüm verilerin kaybolma ve bozulma riskine karşı bir yedeğinin ya da başka bir deyişle bir kopyasının saklanmasıdır. Daha sonra bu Backup verileri, ihtiyaç duyulduğunda, Database restore (veri tabanı geri yükleme) yapılarak olası veri kayıplarının önüne geçmiş oluruz. SQL Server Management Studio ile Database (veri tabanı) Backup (yedek) alma işlemine geçmeden önce SQL Server Backup seçeneklerini bilmek gerekir. SQL Server üzerinde 3 farklı Backup çeşiti bulunmaktadır. Bunlar;
● Full Backup: Adından anlaşılacağı üzere Database (veri tabanı) Backup (yedek) anı itibariyle Database Full Backup (veri tabanı tam yedek) içine kopyalanır. Full Backup dosyası ile başka bir şeye ihtiyaç duymadan Backup (yedek) alındığı tarihe veri tabanı Restore (yedekten dönme) işlemi yapılabilir.
● Differential Backup: Çok fazla verinin bulunduğu, boyutları yüksek ve sürekli olarak data işlenen Database'in sürekli olarka Full Backup ile Backup işlemi yapmak, hem uzun işlem süresi hem de gereksiz disk kullanımlarına neden olur. Böyle durumlarda sadece değişen kısımların yedeğinin alınması Differential Backup seçeneği ile yapabilirsiniz.
● Transaction Log Backup: Transaction, ilgili Database üzerinde yapılan her işlemin bilgilerinin tutulduğu Log dosyasıdır. Yedekleme sadece bu kayıtları kapsar.
Recovery Model
SQL Server Management Studio ile Database Backup (veri tabanı yedek alma) işleminden önce yapılması gereken ilk işlem, Recovery Model yapılandırmaktır. Recovery Model yapılandırma zorunluluğumuzun sebebi, Sql Server Database Backup (Sql Server veri tabanı yedek alma) işlemi yapılırken örneğin;
● Full Recovery Model
mdf + ldf restore edeceğim, Log doayasını çok detaylı tut demektir. Backup alırken bu şekilde Backup alır. Bunun avantajı, Recovery yaparken detaylarda istediğim saate geri dönebilirim.
Örneğin Cuma gecesi bir bir Full Backup aldınız. Takip eden haftanın da Çarşamba gecesi bir Differential Backup aldınız ve 2 saatte bir de Transaction Log Backup alıyorsunuz. Perşembe günü sabah 08:20’de bir sıkıntı oldu ve uygulamacılar sizden en son yedeği yüklemenizi istiyorlar. Yapmanız gereken sırasıyla; önce Full Backup’ı, sonra Differential Backup’ı, sonrasında ise Differential Backup’tan sonra alınan tüm Log Backup’ları sırayla Perşembe 08:00’e kadar restore etmeniz olacaktır. Bu şekilde son ana kadar dönebilirsiniz.
Full Recovery Model kullanıyorsanız, mutlaka Transaction Log Backup almalısınız. Transcastion Log Backup almamanız durumunda, yapılan tüm işlemler Log'landığı ve otomatik olarak silinmediği için bir süre sonra diskinizi dolduracaktır. Transaction Log Backup aldığınızda, Log dosyasında kaydedilen bu Log'lar silineceği için aşırı büyümesini engellenecektir.
Logların silinmesi işi gözünüzü korkutuyor olabilir. Bu silinme işlemi, endişe edilecek bir durum değildir. Aksine, yapılması zorunlu bir işlemdir. Aldığınız Log Backup’ta bu veriler mevcuttur. Herhangi bir sorun anında bu Log Backup dosyalarını kullanarak yukarda anlattığım gibi istediğiniz ana dönebilirsiniz. Hangi sıklıkla Log Backup alacağınız kurumunuzun politikasıyla alakalı olup, genellikle önemli ve büyük uygulamalarda 2 saatte bir alınmaktadır.
● Bulked-Logged Recovery Model
mdf + ldf + Transaction Log kaydını da tutar ve Backup alırken bu şekilde Backup alır. Ancak Transaction Log kaydı az detaylıdır. Bunun dezavantajı, Recovery ederken detaylarda istediğim saate geri dönemiyor olmamdır. Bulk Logged Recovery Model, Full Recovery Model’den farklı olarak SELECT INTO, BULK INSERT, BCP, CREATE INDEX gibi Bulk işlemlerin tamamı Log'lanmaz ki Bulk işlemlerin yoğun olduğu veritabanlarında Transaction Log dosyasının çok büyümesi engellenmiş olacağı için, genelde tercih etmediğim bir Recovery Modeldir ama Transaction Log Backup alınabiliyor ancak, eğer son Transaction Log Backup’ta bulk işlem ile ilgili bir kayıt varsa, restore yapılamıyor. Bulk Logged Recovery Mode’u sadece geçici olarak kullanabilirsiniz. Örneğin Full Recovery Model’i kullanıyorsunuz ve büyük bir bulk işlem yığını yapacaksınız ve diskinizde yeterli alan da yer yoksa veri tabanı Recovery Model'ini Bulk Logged yapıp, işleminiz bitince tekrar Full’e çekebilirsiniz.
● Simple Recovery Model
sadece mdf kaydı tutar, ldf yoktur + Transaction Log kaydını çok çok az tutar. Recovery Model simple olan veri tabanları için Transaction Log Backup alınmaz. Özetle Recovery Model kullanmanın sebebi, Recover ederken hangi materyali (örn. mdf + ldf) kullanacaksın demektir. Bu nedenle öncelikle Recovery Model yapılandırmam gereklidir.
Recovery Model Yapılandırma
Recovery Model yapılandırmak için Database üzerinde sağ tıklanır ve Properties seçeneği seçilir.
Database Properties pencesi altında Options sekmesine tıklanır. Options sekmesinde Recovery Model ayarlaması, yukarıda belirttiğim bilgilere göre yapılandırılır.
Database Backup (veri tabanı yedekleme)
Recovery Model yapılandırmamızı tamamladıktan sonra, veri tabanı yedek alma işlemlerine başlayabiliriz. SQL Server veri tabanı yedeği iki şekilde alınabilir.
1- .bak dosyası ile SQL Server Database Backup İşlemleri
2- Backup Device ile SQL Server Database Backup İşlemleri
1- .bak dosyası ile SQL Server Database Bakcup İşlemleri
.bak dosyası ile Disk üzerine Backup alındığı zaman, Backup detaylarını göremezsiniz. Yani aldığım Backup detaylarında ne aldığım, ne zaman aldığım (Full Backup, Differential Backup ya da Transaction Log Backup) gibi bilgileri göremem. Bu, .bak dosyası ile Database yedek alma işleminin dezavantajıdır.
1.1- .bak dosyası ile veri tabanı yedeği almak için SQL Server Management Studio'da ilgili Database üzerinde sağ tuş Tasks > Backup seçeneğine tıklıyorum.
1.2- Back Up Database – DATABASE001 ekranı açılıyor. Bu ekranda General sekmesinde;
a- Source
b- Backup Component
c- Destination
bölümleri bulunmaktadır.
a- Source Ayarları:
a.1- Database: SQL Server üzerinde hangi Database üzerinde Backup almak istiyorsak onu seçebilirsiniz.
a.2- Recovery Model: Recovery Model; yukarıda detaylıca belirttiğim gibi, mdf, ldf ve Transaction Log'larının nasıl kaydedileceği ile ilgili ayarları içerir. SQL Server üzerinde üç farklı Recovery Model seçeneği bulunduğundan bahsetmiştim. Hatırlayacak olursak bunlar; Full, Simple ve Bulk Logged seçenekleridir.
● Full Backup: Adından anlaşılacağı üzere Backup anı itibariyle Database'im tüm Backup bilgisi içine kopyalanır. Full Backup dosyası ile başka bir şeye ihtiyaç duymadan Backup alındığı tarihe, Recovery Model Full yapıldıysa, veri tabanı Restore işlemi yapılabilir.
● Differential Backup: Çok fazla verinin bulunduğu, boyutları yüksek ve sürekli olarak data işlenen Database'i sürekli olarka Full Backup ile Backup işlemi yapmak, hem uzun işlem süresi hem de gereksiz disk kullanımlarına neden olur. Böyle durumlarda sadece değişen kısımların yedeğinin alınmasını Differential Backup seçeneği ile yapabilirsiniz.
● Transaction Log Backup: Transaction, ilgili Database üzerinde yapılan her işlemin bilgilerinin tutulduğu Log dosyasıdır. Yedekleme sadece bu kayıtları kapsar.
● Copy only Backup: Bu Backup alma işleminin Backup zincirine dahil edilip edilmeyeceği ile ilgili ayardır.
NOT: Şahsi tavsiyem; veri tabanı yedeğinizi Transaction Log Backup olarak alacaksanız, Recovery Model'inizi Full tutmanız yönünde olacaktır.
a.3- Backup Type: Backup türlerine konunun başında değinmiştim. Full Backup almak istediğimizi belirterek ilerleyeceğim.
b- Backup Component Bölümü Ayarları:
b.1- Database: Tüm Database üzerinde Backup alınacaksa, bu seçenek seçilir.
b.2- Files and filegroups: Database'e ait bir File Group Backup (yedek) alınacaksa, bu seçenek seçilir.
c- Destination Ayarları:
c.1- Backup To: Bu bölümde alınan Backup nerede saklanacağıyla ilgili ayarlar yapılandırabilirsiniz. Disk ve Tape seçenekleri ile, alt kısımda alınan yedeğin nereye kopyalanacağı ile ilgili dosya ayarlarını yapabilirsiniz. Disk seçeneği seçili iken varsayılan olarak C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup dizini altına almaktadır. Dilerseniz Add butonuna tıklayarak bu dizini değiştirebilirsiniz.
1.3- Yine aynı ekranda Backup Options sekmesinde;
a- Backup set bölümü ayarları:
a.1- Name: Yedeğimize bir isim veriyoruz.
1.2- Description: Backup ilgili bir açıklama eklemek isterseniz bu bölümü kullabilirsiniz.
a.3- Backup set will expire: Alınan Backup hangi tarihe kadar geçerli olacağıyla ilgili ayarın yapıldığı bölümdür.
1.4- Gerekli ayaları yapılandırdıktan sonra OK tuşuna bastığınızda, eğer herhangi bir hata almadıysanız, işlem başarılı bir şekilde tamamlanacaktır.
1.5- Veri tabanı yedek alma işleminden sonra Destination yolunu değiştirmediyseniz C:\Program Files/Microsoft SQL Server/MSSQL12.MSSQLSERVER/MSSQL/Backup dizi altında .bak uzantılı yedeğiniz hazır olacaktır.
2- Backup Device ile SQL Server Database Bakcup İşlemleri
Backup Device ile Backup alındığında, alınan Backup'ın detaylarını görebilirsiniz. Yani aldığım Backup detaylarında ne zaman aldığım, ne aldığım (Full Backup, Differential Backup ya da Transaction Log Backup) gibi bilgileri görebilme şansına sahibim. Bu, .bak dosyası ile Database yedek alma işleminin dezavantajıdır. Backup Device ile Backup almak için;
2.1- Server Objects üzerinde sağ tıklıyorum ve sırası ile New > Backup Device... seçeneğine tıklıyorum.
2.2- Backup Device penceresi açılacaktır. Backup Device penceresi altında oluşturmak istediğim Backup Device'a Device name alanında bir isim veriyorum.
Verdiğim isim, Full-DEVICE01. Destination alanında ise Backup Device'ın nereye kaydedileceğini belirliyorum. Normal şartlarda bu Path, sizin Storage cihazınız olabilir.
2.3- Görüldüğü gibi, Server Objects > Backup Devices altında oluşturmuş olduğum Full-DEVICE01 adındaki Backup Device'ım oluşmuştur.
Full Backup Alma
Adından anlaşılacağı üzere Database (veri tabanı), Backup (yedek) anı itibariyle Database Full Backup (yedek) içine kopyalanır. Full Backup dosyası ile başka bir şeye ihtiyaç duymadan Backup (yedek) alındığı tarihe Database Restore (veri tabanı geri yükleme ) işlemi yapılabilir. Daha önceden de belirttiğim gibi mdf + ldf yedeğini alacaktır.
2.4.1- SQL Server Management Studio'da Database üzerinde sağ tuş Tasks > Backup seçeneğine tıklıyorum.
2.4.2- Back Up Database – DATABASE001 ekranı açılıyor. Bu ekranda daha önce .bat dosyası ile Database (veri tabanı) Backup (yedek) alma işleminde anlattığım gibi Source bölümündeki ayarları yapılandırdıktan sonra Destination alanında Add... butonuna basıyorum.
2.4.3- Select Backup Destination penceresinde Backup Device seçeneğini seçiyorum ve daha önceden oluşturduğum Full- DEVICE001 ismindeki Full Backup Device'ımı seçerek OK butonuna basıyorum.
NOT: Buradaki File Name alanı da dikkatinizi çekmiş olmalı. .bat dosyası ile Database Backup işleminde .bat dosyasının Path'i buradadır. Dilerseniz bunu da değiştirebilirsiniz.
2.4.4- Görüldüğü gibi Backup Device üzerine veri tabanı yedek alma işlemini gerçekleştirdim.
2.4.5- Veri tabanı yedeğimi Backup Device üzerine aldıktan sonra, oluşturduğum Full-DEVICE001 ismindeki Full Backup Device'ım üzerinde sağ tıklayarak Properties seçeneğini seçiyorum.
2.4.6- Back Up Database – DATABASE001 ekranı açılıyor. Bu pencerede Select a page altında bulunan Media Contents'e tıkladığımızda, Backup sets altında DEVICE001 ismindeki Full Backup Device'ımın detaylarını görüntülüyorum.
Bu makalemde detaylı bir biçimde SQL Server veri tabanı yedek alma işlemini anlatmaya çalıştım. Bir sonraki makalemde ise SQL Server Database (veri tabanı) Recovery (Yedekten dönme) konusuna değiniyor olacağım.
Faydalı olması dileğiyle...
Her türlü görüş ve önerilerinizi aşağıdaki yorum panelinden bırakabilir, kafanıza takılanları veya merak ettiklerinizi sorabilirsiniz.