Ana içeriğe geç
Kesit SQL
İleri · Veritabanı Yönetimi (DBA)

Yedekleme ve geri yükleme: recovery model, RPO ve RTO

Tam, fark ve günlük yedekleri; zincir; belirli bir ana geri dönmek.

Uygulamada aç, 4 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Önce iki soru: RPO ve RTO

Yedekleme stratejisi bu iki sayıdan türetilir. “Her gece tam yedek” stratejisinin RPO'su 24 saattir.

Recovery model

ModelGünlük yedeğiBelirli bir ana dönüşKullanım
SIMPLEYok; günlük kendiliğinden temizlenirHayır, yalnızca son yedeğeTest, geliştirme, kaybı tolere edilebilen veri
FULLVar ve zorunluEvet (point-in-time)Canlı sistemler
BULK_LOGGEDVarKısmenBüyük toplu yüklemeler sırasında geçici
FULL modelde günlük yedeği almamak.ldf dosyası sürekli büyür ve diski doldurur. Bu, en sık görülen DBA acil durumlarındandır.

Yedek türleri

BACKUP DATABASE anadolu TO DISK = N'D:\yedek\anadolu_full.bak' WITH COMPRESSION, CHECKSUM;
BACKUP DATABASE anadolu TO DISK = N'D:\yedek\anadolu_diff.bak' WITH DIFFERENTIAL, COMPRESSION, CHECKSUM;
BACKUP LOG anadolu TO DISK = N'D:\yedek\anadolu_1015.trn' WITH COMPRESSION, CHECKSUM;

Geri yükleme sırası

Örnek strateji: Pazar 00:00 tam, her gece fark, her 15 dakikada günlük yedeği. Çarşamba 10:20'de bir tablo yanlışlıkla silindi; 10:19'a dönmek istiyoruz:

Veritabanı hâlâ ayaktaysa ilk iş son günlük yedeği (tail-log backup) almaktır: son günlük yedeğinden sonraki işlemler başka yerde yoktur, geri yükleme başlayınca kaybolur. WITH NORECOVERY veritabanını geri yüklemeye hazır duruma alır; dosyalar hasarlıysa NO_TRUNCATE eklenir.

BACKUP LOG anadolu TO DISK = N'...tail.trn' WITH NORECOVERY;   -- önce son günlük yedeği
RESTORE DATABASE anadolu FROM DISK = N'...full.bak' WITH NORECOVERY;   -- Pazar tam
RESTORE DATABASE anadolu FROM DISK = N'...diff_sali.bak' WITH NORECOVERY;  -- son fark (Salı gecesi)
RESTORE LOG anadolu FROM DISK = N'...0000.trn' WITH NORECOVERY;  -- farktan sonraki tüm günlükler, sırayla
-- ...
RESTORE LOG anadolu FROM DISK = N'...1030.trn'
    WITH STOPAT = '2025-03-12 10:19:00', RECOVERY;  -- belirli ana kadar, sonra aç

NORECOVERY, veritabanını sonraki yedekleri kabul edecek şekilde açık bırakır; son adımda RECOVERY ile kullanıma açılır.

Altın kurallarGeri yüklenmemiş yedek, yedek değildir: düzenli olarak test sunucusuna geri yükle. 3-2-1 kuralı: 3 kopya, 2 farklı ortam, 1'i başka bir konumda. CHECKSUM ile yedek bozulmalarını erken yakala.
SQL türüAraçlar
PostgreSQLpg_dump (mantıksal), pg_basebackup + WAL arşivi (fiziksel, belirli ana dönüş)
MySQLmysqldump, binlog ile belirli ana dönüş; büyük sistemlerde Percona XtraBackup
OracleRMAN (Recovery Manager)
Alıştırmalara geç (4)