HAFTA 10 Verileri Yedeklemek ve Yedekten Dönmek" Yaşar GÖZÜDELİ ygozudeli@verivizyon.com http://blog.verivizyon.com/ygozudeli «BM364» Veritabanı Uygulamaları
Konu Akışı Yedeklemeyi Anlamak Yedekten Dönmeyi Anlamak 2
Ders-1 Konu Akışı Yedekleme Gereksinimi Transaction Log İşleyişi SQL Server Otomatik Kurtarma Recovery Modelleri ve Loglama Yedekleme Tipleri Yedekleme ve Medya Yedekleme Stratejileri Sistem veritabanlarını Yedeklemek 3
Neden Yedeklemeli? Donanımsal Hatalar Disk göçmesi? Afetler Çoklu donanım bozulması Güvenlik ihlalleri(molotof, sunucunun yanması vs.) Yazılımsal Hatalar OS hataları VTYS hataları 3.parti yazılım hataları Kazara silmeler Güvenlik ihlalleri 4
Transaction Log İşlevi Logu yazılmayan hiçbir şey diske yansıtılamaz =Write-AheadLog Veriler değişecekse önce RAM(SQL Server Buffer Cash) e aktarılır. Daha sonra üstünde değişiklik yapılır. Log buffer a(ram) ilgili değişim loglanır. COMMIT gelirse veya log buffer dolarsa loglar diske yazılır. COMMIT gelirse, değişen page ler RAM den disk e yansıtılır. Bir transaction için COMMIT denmesi, gerçekten commit edildiği anlamına gelmez!. Loglar uygulandı olarak işaretlenirse COMMIT gerçekleşir.. Commit edilmeyen log lar log dosyasından silinemez! Bu yüzden bazen dosyalar çok uzayabilir. Ayrıca yedek alma modu da dosya boyutunu etkiler. 5
Yedekten Dönme İşleminin Aşamaları Yedek indirmenin iki aşaması vardır! RESTO RE 1.Restore Aşaması: yedek indirme, log işletme 2.Recover Aşaması: Yedek indirme ile ilgili son rötüşları yapıp datayı tutarlı hale sokma Faz-1 (Veri Kopyalama) Faz-2 (Redo Fazı- Rollforward) Yedekten veri kopyalanır. Transaction Loglara hiç bakılmaz Kopyalanan verilere loglar ileri doğru işletilmeye çalışılır. RECOVE R Faz-3 (Undo Fazı-Rollback) Bitmemiş transactionlara ait loglar varsa, rollback yapılır ve işlem sonlandırılarak veri tutarlı halde sunulur. 6
Otomatik Recovery Log da yansıtılmamış veri varken, sunucu kapanabilir. Bu durumda backup lar gerekmeden sunucu açılabilir Bu işleme otomatik recovery denilir. Sunucu açılınca; Log dosyasına göre COMMIT olan ama diske yansımamış transaction lar ROLLFORWARD edilir Log dosyasına bazı işlemler yansımış ama COMMIT ile bitmemiş ise bir önceki COMMIT e kadar ROLLBACK edilir. 7
Recovery Modelleri ve Loglamalar Her bir veritabanı için bir loglama seviyesi Simple Recovery Model Hiç log bilgisi yedeklenmez. Disk ile eşitlenene kadar tutulur. Readonly veya kritik değilse bakımı kolay. Full Recovery Model Her şey logda tutulur. Yedek alınana kadar loglar bekler. İstenilen noktaya dönülebilir. Bulk-Logged Recovery Model İkisinin arası Toplu işlemler loga düşmez. Full-bulk log arasında ilgili durumlarda geçiş yapılabilir. 8
Yedek Tipleri DATA BACKUP ları Full Database Backup Bütün veritabanının yedeğini almak için Partial Backup Readonly olmayan file group ları alıp readonly leri almamak (2005 ve yukarısı) File FileGroup Backup Sadece istenen file-filegroup ları alır DIFFERENTIAL BACKUP Bir Data back up tan sonra aradaki değişimi içerir Baz backup olmadan restore edilemez. LOG BACKUP Full veya bulk-logged ise şart,yoksa disk dolar. Simple ise gereksiz. İstenilen ana çekmek için şart. TAIL LOG BACKUP: göçmüş bir sisteme dokunmadan önce alınan log backup ı COPY ONLY BAKCKUP FULLTEXT BACKUP 9
Backup ve Medya Temel msdb alınan yedeklere ait bilgileri tutar. Backupfile tablosu BackupfileGroup Backupset Backupmediaset Backupmediafamily Bir medya yedekleri saklayan ortamdır Disk veya tape 10
Medyaset ve Medya Medyaset tek tip medyalardan oluşabilir Medyaset birden fazla medya aynı tür olmak üzere içerebilir. Default olarak ilkinde medya formatlanır header eklenir. Sonra yedek eklenir İkinci yedek altına eklenir. Altına eklenmesin isteniyorsa: WITH INIT ile üstüne yazılabilir. BACKUP DATABASE Dukkan TO DISK = D:\Backup\dukkan1.bak, DISK = E:\Backup\dukkan2.bak WITH MEDIANAME = dukkan_disk_media ; 11
Mirrored MediaSet Mediaset teki tüm medya tipleri eşdeğer olmalı Tape0 bozulursa 2 veya 4 ten herhangi birinin çalışması yeterli Tape1 bozulursa 3 veya 5 ten birinin çalışması yeterli BACKUP DATABASE mydatabase TO TAPE = \\.\tape0, TAPE = \\.\tape1 MIRROR TO TAPE = \\.\tape2, TAPE = \\.\tape3 MIRROR TO TAPE = \\.\tape4, TAPE = \\.\tape5 WITH MEDIANAME = mydb_mirrored_media_set ; 12
Alınan Yedekleri Görmek L:Log D:Data Yedeği=Full Yedek F:Fulltext, File,File Group I:Database Differentail USE msdb SELECT a.backup_set_id, a.media_set_id, a.database_name, b.logical_name, b.file_type FROM backupset a, backupfile b WHERE a.backup_set_id = b.backup_set_id ; 13
Yedekleme Stratejisi Kritik uygulama: Pazar Gecesi Full database yedeği al Her Çarşamba differential yedek al 30 dk da bir log yedeği al. 14
Sistem veritabanlarını yedeklemek master ve msdb: sık sık yedeklemeli Model? Değişim varsa Resources? Gerek yok-readonly 15
Ders-2 Konu Akışı Full Yedek İndirmek Fark Yedek İndirmek Log Yedek İndirmek Belli Bir Zamana Dönmek 16
Yedekten Dönme İşleminin Aşamaları Yedek indirmenin iki aşaması vardır! 1.Restore Aşaması: yedek indirme, log işletme 2.Recover Aşaması: Yedek indirme ile ilgili son rötüşları yapıp datayı tutarlı hale sokma RESTORE Faz-1 (Veri Kopyalama) Faz-2 (Redo Fazı- Rollforward) Yedekten veri kopyalanır. Transaction Loglara hiç bakılmaz Kopyalanan verilere loglar ileri doğru işletilmeye çalışılır. RECOVER Faz-3 (Undo Fazı- Rollback) Bitmemiş transactionlara ait loglar varsa, rollback yapılır ve işlem sonlandırılarak veri tutarlı halde sunulur. 17
Restore Etmek Complete Differential Yedek Restore Etmek RESTORE DATABASE <database_name> FROM <backup_device> WITH FILE = n, [RECOVERY NORECOVERY]; Log yedeğini indirmek için RESTORE LOG <database_name> FROM <backup_device> WITH FILE = n, [RECOVERY NORECOVERY]; 18
Bir restorasyon Örneği Önce Yedekleri ve Türlerini Gör USE msdb ; SELECT backup_set_id, media_set_id, position, name, type FROM backupset ; -- full backup indir RESTORE DATABASE [mydatabase] FROM mydb1_dev, mydb2_dev WITH FILE = 6, NORECOVERY ; --differential backup indir RESTORE DATABASE [mydatabase] FROM mydb1_dev, mydb2_dev WITH FILE = 7, NORECOVERY ; --log backup indir RESTORE LOG [mydatabase] FROM mydb1_dev, mydb2_dev WITH FILE = 8, NORECOVERY ; --log backup 2 yi indir RESTORE LOG [mydatabase] FROM mydb1_dev, mydb2_dev WITH FILE = 9, NORECOVERY ; -- Son log backup'i indir -- ve db'yi düzgün hale getir RESTORE LOG [mydatabase] FROM mydb1_dev, mydb2_dev WITH FILE = 10, RECOVERY ; 19
Herhangi bir Zamana Dönmek --restore db backup stopping at 1:15PM RESTORE DATABASE [mydatabase] FROM mydb1_dev, mydb2_dev WITH STOPAT = May 17, 2006 1:15 PM, NORECOVERY ; --restore records from log backup 1 RESTORE LOG [mydatabase] FROM mydblog_dev1 WITH STOPAT = May 17, 2006 1:15 PM, NORECOVERY ; --restore records from log backup 2 RESTORE LOG [mydatabase] FROM mydblog_dev2 WITH STOPAT = May 17, 2006 1:15 PM, RECOVERY ; 20
Ödev Bir adet yedekleme ve yedekten dönme örneği çalışılacak. 21
Sonuç Verileri yedekleyebiliyor olmak, veri kayıplarına karşı veritabanı yöneticisine güven verir. 22