SQL Server'da Database Backup işlemi, sistemin veri güvenliği ve sürekliliği açısından kritik bir rol oynar. Özellikle büyük ölçekli sistemlerde veri kayıplarını önlemek ve olası bir felaket durumunda hızlı bir şekilde kurtarma yapılabilmesini sağlamak için yedekleme süreçlerinin doğru yapılandırılması şarttır. SQL Server, veritabanı yedekleme işlemi sırasında geniş bir esneklik sunar ve farklı yedekleme türleri ile veri kaybı riskini minimize eder. Yedekleme türleri arasında FULL Backup, Differential Backup ve Transaction Log Backup yer alır. Her yedekleme türü, veritabanının farklı anlık durumlarını koruma altına alır ve gerektiğinde bu anlık görüntülere geri dönülerek veri kurtarılmasını sağlar. FULL Backup işlemi, veritabanının tamamının bir yedeğini oluşturur. Bu işlem sırasında veritabanında yer alan tüm veri, nesneler (tablolar, görünümler, saklı yordamlar, indeksler, tetikleyiciler vb.) ve yapılandırmalar yedeklenir. FULL Backup, veri kurtarma işlemlerinin temel taşıdır; çünkü olası bir felaket durumunda sistemin geri döndürülmesi için en güncel ve eksiksiz yedek bu dosya üzerinden yapılır. FULL Backup dosyası genellikle .bak uzantısı ile saklanır ve SQL Server bu dosyayı kullanarak geri yükleme işlemi gerçekleştirir.
SQL Server'da yedekleme işlemi sırasında Backup Device kullanımı, yedeklerin belirli bir diskte ya da ağ üzerindeki bir depolama alanında saklanmasını sağlar. Backup Device, yedeklerin depolanacağı fiziksel veya sanal bir ortamı temsil eder ve bu ortam DISK, TAPE gibi farklı türlerde olabilir. Backup Device kullanarak yedekleme işlemi yapılırken, SQL Server yedekleme cihazına belirlenen dosya adında bir yedek oluşturur. Yedekleme sırasında yedek dosyasının adı, konumu ve türü dikkatlice seçilmelidir. Yedekleme cihazları verinin güvenli bir şekilde saklanmasını sağlarken, aynı zamanda düzenli olarak alınan yedeklerin merkezi bir noktada tutulmasına olanak tanır.
Differential Backup işlemi ise, en son FULL Backup alındıktan sonra yapılan tüm değişiklikleri içerir. FULL Backup'tan sonra veritabanında yapılan güncellemeler, eklemeler veya silme işlemleri Differential Backup ile yedeklenir. Bu yöntem, FULL Backup'ın sürekli alınmasına gerek kalmadan daha küçük boyutlu yedek dosyaları oluşturarak verilerin korunmasına yardımcı olur. Differential Backup, geri yükleme sürecinde FULL Backup ile birlikte kullanılır ve veritabanını daha kısa bir süre içinde eski haline döndürmeyi mümkün kılar.
SQL Server'ın bir diğer kritik yedekleme türü olan Transaction Log Backup, veritabanındaki her işlemin bir kaydını tutar ve veritabanında yapılan her değişikliği loglar. Transaction Log Backup, veritabanının yalnızca en son yedekleme anından bu yana gerçekleşen işlemlerini içerir ve bu sayede veri kayıplarını en aza indirir. Transaction Log dosyaları, geri yükleme işlemi sırasında FULL Backup ve Differential Backup ile birlikte kullanılarak, veri tabanının belirli bir ana kadar olan tüm işlemlerinin geri getirilmesini sağlar. Özellikle uzun süreli çalışan ve sürekli işlem gören veritabanlarında bu yedekleme türü büyük önem taşır. Transaction Log Backup işlemi sırasında STOPAT parametresi kullanılarak, veritabanının geri yükleneceği kesin bir zaman dilimi seçilebilir. Bu sayede, istenmeyen bir değişikliğin veya hatanın gerçekleştiği zamana kadar olan veriler kurtarılabilir.
SQL Server, yedekleme işlemi sırasında verinin bütünlüğünü ve güvenliğini sağlamak amacıyla çeşitli doğrulama ve güvenlik seçenekleri sunar. Örneğin, CHECKSUM ve VERIFYONLY gibi komutlar, yedekleme sırasında ve sonrasında dosyanın bozulup bozulmadığını kontrol eder. CHECKSUM, yedekleme işlemi sırasında dosyanın veri bütünlüğünü doğrularken, VERIFYONLY ise yedek dosyasının geri yüklenmeye uygun olup olmadığını kontrol eder. Bu kontroller, özellikle büyük boyutlu ve kritik veritabanlarının yedeklenmesinde, veri kayıplarını önlemek amacıyla kullanılır.
SQL Server'da yedekleme işlemleri, sadece manuel olarak değil, aynı zamanda zamanlanmış görevler aracılığıyla otomatik olarak da yapılabilir. SQL Server Agent kullanılarak yedekleme görevleri düzenli aralıklarla çalışacak şekilde yapılandırılabilir ve böylece sistem sürekli olarak güncel yedeklerle korunmuş olur. Bu, özellikle sürekli çalışan sistemlerde veri kaybını en aza indirir ve acil bir durumda sistemin hızla geri yüklenmesini sağlar.
SQL Server üzerinde 3 farklı Backup çeşiti bulunmaktadır. Bunlar;
1- Full Backup
Full Backup, adından da anlaşılacağı gibi veritabanının o anki durumunun tam bir kopyasını alır. Bu işlem sırasında veritabanında yer alan tüm veri, nesneler (tablolar, saklı yordamlar, indeksler, tetikleyiciler vb.) ve yapılandırmalar Full Backup dosyasına dahil edilir. Bu yedekleme yöntemi, veri kaybı durumunda veritabanının tam bir kopyasını geri yükleme imkanı sunar. Full Backup, diğer yedekleme türlerinin temelini oluşturur; çünkü diğer yedekleme işlemleri bu yedek üzerinden çalışır. Full Backup dosyası genellikle .bak uzantısıyla kaydedilir ve herhangi bir ek yedekleme türüne ihtiyaç duymadan veritabanı geri yüklenebilir. Ancak büyük veritabanlarında bu işlem zaman alıcı olabilir ve fazla disk alanı kullanabilir. Bu nedenle, Full Backup'lar genellikle haftalık veya aylık olarak alınır ve arada Differential Backup ve Transaction Log Backup ile desteklenir.
2- Differential Backup
Differential Backup, en son alınan Full Backup'tan sonra yapılan tüm değişiklikleri yedekler. Bu yedekleme yöntemi, sürekli olarak Full Backup almanın gereksiz disk kullanımı ve zaman kaybına neden olabileceği durumlarda büyük bir avantaj sağlar. Differential Backup, yalnızca Full Backup alındıktan sonra veritabanında yapılan değişiklikleri içerdiği için daha küçük boyutlarda olur ve daha hızlı bir yedekleme süreci sunar. Ancak Differential Backup'ların geri yüklenebilmesi için mutlaka en son alınan Full Backup'a ihtiyaç vardır. Restore işlemi sırasında önce Full Backup, ardından en son alınan Differential Backup geri yüklenir. Differential Backup, disk alanından ve zamandan tasarruf sağlarken, veritabanının daha sık yedeklenmesini mümkün kılar. Özellikle sürekli değişiklik yapılan veritabanlarında, bu yöntem çok daha verimli ve etkili bir yedekleme stratejisi sunar.
3- Transaction Log Backup
Transaction Log Backup, veritabanında yapılan her işlemin kaydını tutan Transaction Log dosyasının yedeğini alır. Transaction Log, veritabanındaki tüm değişikliklerin işlendiği ve kaydedildiği bir dosyadır. Transaction Log Backup'ın amacı, veritabanında yapılan işlemleri yedeklemek ve gerektiğinde bu işlemleri geri yükleyebilmektir. Transaction Log Backup, veritabanını belirli bir zamana kadar geri döndürmek için kullanılır. Transaction Log dosyası, Full Backup ve Differential Backup ile birlikte kullanılarak, veritabanının son durumuna kadar olan tüm işlemleri geri getirir. Transaction Log Backup işlemi sırasında, STOPAT parametresi kullanılarak veritabanının tam olarak hangi zamana kadar geri yükleneceği belirlenebilir. Bu, özellikle istenmeyen değişikliklerin veya hataların geri alınmasında son derece etkili bir yöntemdir. Transaction Log Backup'lar düzenli olarak alındığında, veri kaybı riski en aza indirgenir ve veritabanının sürekli olarak güncel bir yedeği tutulmuş olur.
Yedekleme Stratejisi ve Kombinasyonlar
SQL Server'da verimli bir yedekleme stratejisi oluşturmak için bu üç yedekleme türü bir arada kullanılır. Örneğin, haftalık bir Full Backup alındıktan sonra her gün Differential Backup alınabilir ve her saat başı Transaction Log Backup ile veritabanındaki işlemler kaydedilebilir. Bu yedekleme stratejisi, geri yükleme işlemlerini hızlandırırken, veri kaybı riskini en aza indirir. Transaction Log Backup’lar sayesinde, veritabanı sadece belirli bir zamana kadar geri döndürülebilir ve bu sayede kritik bir hatadan önceki işlemlere geri dönmek mümkün hale gelir.
Recovery Model
SQL Server'da Recovery Model, Database Backup ve Database Recovery işlemleri sırasında nasıl davranacağını belirleyen önemli bir yapılandırmadır. Veritabanının hangi Recovery Model ile çalışacağını doğru bir şekilde yapılandırmak, hem veri kayıplarını minimize eder hem de Recovery (geri yükleme) işlemlerini daha esnek hale getirir. SQL Server’da üç temel Recovery Model bulunmaktadır: Full Recovery Model, Bulk-Logged Recovery Model ve Simple Recovery Model. Bu modeller, Transaction Log dosyasının nasıl tutulacağını, ne kadar detaylı olacağını ve Recovery (geri yükleme) işlemlerinde hangi veritabanı dosyalarının kullanılacağını belirler.
Full Recovery Model
Full Recovery Model, veritabanındaki tüm işlemleri detaylı bir şekilde Transaction Log dosyasında tutar. Bu modelde, hem mdf (veritabanı dosyası) hem de ldf (Transaction Log dosyası) yedeklenir. Full Recovery Model kullanarak bir veritabanını yedeklediğinizde, sadece veri değil, aynı zamanda her bir işlemin log kaydı da yedeklenmiş olur. Bu modelin avantajı, herhangi bir zamanda Recovery (geri yükleme) yaparken çok detaylı bir log kaydına sahip olmanızdır, bu sayede belirli bir saat veya dakikaya kadar geri dönebilirsiniz. Örneğin, Cuma gecesi bir Full Backup aldıysanız ve ardından her iki saatte bir Transaction Log Backup yapıyorsanız, herhangi bir veri kaybı durumunda önce Full Backup'ı, ardından Transaction Log Backup dosyalarını geri yükleyerek tam olarak istediğiniz zamana geri dönebilirsiniz.
Ancak, Full Recovery Model kullanıyorsanız, mutlaka düzenli aralıklarla Transaction Log Backup almak zorundasınız. Eğer Transaction Log Backup alınmazsa, log dosyası sürekli büyür ve zamanla diskte çok fazla yer kaplar. Bu nedenle, log dosyalarının düzenli olarak yedeklenip temizlenmesi gerekir. Transaction Log Backup aldığınızda, log dosyasındaki eski kayıtlar temizlenir ve bu şekilde disk alanı verimli bir şekilde kullanılır. Log dosyalarının temizlenmesi, korkulacak bir durum değildir; aksine zorunlu bir işlemdir. Bu log dosyaları, yedeklerde zaten saklanmaktadır ve herhangi bir sorun durumunda bu log dosyalarını kullanarak istediğiniz zamana geri dönebilirsiniz. Transaction Log Backup sıklığı, genellikle sistemin kritikliği ve veri işleme yoğunluğuna bağlı olarak belirlenir. Büyük sistemlerde ve sürekli veri işleyen uygulamalarda genellikle 2 saatte bir Transaction Log Backup alınır.
Bulk-Logged Recovery Model
Bulk-Logged Recovery Model, veritabanındaki büyük veri işleme işlemlerini daha verimli bir şekilde yönetmek için kullanılır. mdf, ldf ve Transaction Log dosyalarını tutar, ancak Full Recovery Model'e kıyasla Transaction Log dosyasına daha az detay kaydedilir. Bulk-Logged Recovery Model, özellikle SELECT INTO, BULK INSERT, BCP, CREATE INDEX gibi büyük veri işlemlerinin loglanmasını minimize eder. Bu sayede, büyük işlemlerin gerçekleştiği zamanlarda Transaction Log dosyasının aşırı büyümesi engellenir. Ancak bu modelin dezavantajı, log dosyası daha az detay içerdiği için Recovery (geri yükleme) sırasında tam olarak belirli bir zamana geri dönmenin mümkün olmamasıdır. Bulk-Logged Recovery Model, büyük veri yükleme işlemlerinin sık yapıldığı ortamlarda tercih edilebilir, ancak bu modelde alınan son Transaction Log Backup'ta büyük bir işlem varsa, Recovery (geri yükleme) sırasında bu işlem geri getirilemez.
Bulk-Logged Recovery Model genellikle geçici olarak kullanılır. Örneğin, sürekli olarak Full Recovery Model ile çalışan bir veritabanınız varsa ve büyük bir veri işleme yükü altında kalacaksanız, geçici olarak Bulk-Logged Recovery Model'e geçip işlem bittiğinde tekrar Full Recovery Model'e dönebilirsiniz. Bu yöntem, disk alanı tasarrufu sağlamak için tercih edilebilir.
Simple Recovery Model
Simple Recovery Model, en temel yedekleme modelidir ve Transaction Log dosyasının neredeyse hiç kullanılmadığı bir yapıya sahiptir. Bu modelde yalnızca mdf dosyası kaydedilir ve log dosyasına minimum düzeyde bilgi yazılır. Transaction Log Backup işlemi bu modelde yapılamaz, çünkü log dosyası sürekli olarak temizlenir ve sadece minimum işlem bilgileri tutulur. Simple Recovery Model, veritabanında çok fazla işlem yapılmadığı, veri kurtarma gereksinimlerinin çok kritik olmadığı senaryolarda kullanılır. Bu modelin dezavantajı, log dosyasının tutulmaması nedeniyle sadece Full Backup ve Differential Backup kullanarak veri kurtarabilmenizdir. Transaction Log Backup'ın olmaması, Recovery (geri yükleme) sırasında veri kaybı riskini artırabilir, bu nedenle kritik olmayan veritabanlarında tercih edilir.
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.