SQL Backup,Restore and Recovery Models

— Backup, backup, backup. Çok önemli çok, DB oluşturmadan önce bile backup al 🙂

— Şşt şşt backup lazım mı?

Backup; Türkçe karşılığı yedek olan bir kelimedir.
Restore; geri yüklemek, eski haline getirmek.
Recovery; kurtarma.

— Fasa fiso kısmı geçtiğimize göre, konumuza gelelim.

Recovery Model

Kurtarma modelleri, kullanılacak yedekleme mekanizmasına göre ayarlanması gereken seçenekler sunar. 3 tane Recovery Model vardır. Bunlara bakalım şimdi;

recovery model

    1. Full : Bütün işlem ve verileri, işlem günlüğüne kaydedilmesini sağlar. Sonrasında SQL Server’da bir hata veya bozulma olduğunda istenilen ana dönebilirsin. Point-in-time yapabilirsin, zaman makinesi gibi 😛 Eğer bu model kullanılıyor ise log dosyasında büyüme olacaktır, log yedeği alarak kullanmak faydalı olacaktır. (Bkz: Transaction Log Backup)

Neden Full Recovery Model kullanmalıyım?

      • Veri kayıp ve bozulmalarını önlemek için.
      • İstenilen ana geri dönebilmek için.
      • Database mirroring kullanmak için.

Neler yapabilirim?

      1. Complete backups
      2. Differential backups
      3. File and/or Filegroup backups
      4. Partial backups
      5. Copy-Only backups
      6. Transaction log backups

Full Model’e almak;

ALTER DATABASE NORTHWND SET RECOVERY FULL
GO

 

    1. Simple : İşlemler yine günlüğe kaydedilir ancak yeni işlemler eskileri üzerinde değiştirme yaparlar. Bu sebeple point-in-time yapamazsın. Bu sebeple database bozulma durumda sonra Full backup + Differential backup ile kurtarabildiğin kadarını kurtarabilirsin.

Neden Simple Recover Model kullanmalıyım?

      • Database test yada geliştirme için ise,
      • Verilere kolayca başka bir şekilde ulaşılıyor ise,
      • Verilerin önem derecesi kritik değil ise,
      • Son yedekten itibaren güncellenen verileri kaybetmek sorun değil ise.

Neler yapabilirim?

      • Complete backups
      • Differential backups
      • File and/or Filegroup backups
      • Partial backups
      • Copy-Only backups

Simlpe Model’e almak;

ALTER DATABASE NORTHWND SET RECOVERY SIMPLE
GO

 

    1. Bulk-Logged : Bulk bildiğin gibi toplu demek. Bu sebeple adından anlaşılacağı gibi, Bulk işlemler yaparken log dosyasının büyümediği modeldir. Bulk işlemler dışında bütün işlemler loglanır ancak bulk işlemler yapılırken her işlem için bir kayıt değil, tüm bulk işlemi için bir kayıt loglanır.

Neden Simple Recover Model kullanmalıyım?

      • Veriler kritik değil ise,
      • Bulk işlemler yapılırken Transaction Log şişmesi istenmiyorsa

Neler yapabilirim?

      • Complete backups
      • Differential backups
      • File and/or Filegroup backups
      • Partial backups
      • Copy-Only backups
      • Transaction log backups

Bulk-Logged Model’e almak;

ALTER DATABASE NORTHWND SET RECOVERY BULK_LOGGED
GO

 

Backup Types

MSSQL’de 3 tane farklı backup tipi var. Bunları tek tek inceleyeceğim.

    1. Full : DB’de ne var ne yoksa hepsinin toplandığı backup tipi, adından da anlaşılacağı üzere. Full Backup’larda ek bir şeye ihtiyaç yoktur. Restore edildiğinde alındığı tarihe kadar DB’de yapılan herşey geri yüklenecektir.

Backup almak ve istersen isim vermek;

BACKUP DATABASE [NORTHWND] TO DISK = N'D:\NORTHWND.bak'
WITH NAME = N'NORTHWND-Full Database Backup'
GO

 

Backup’ı bölerek farklı disklere atmak;

BACKUP DATABASE NORTHWND
TO DISK = 'C:\NORTHWND_1.BAK',
DISK = 'D:\NORTHWND_2.BAK',
DISK = 'E:\NORTHWND_3.BAK'
GO

 

Backup alırken şifrelemek;

BACKUP DATABASE NORTHWND
TO DISK = 'C:\NORTHWND.BAK'
WITH PASSWORD = '!Qwe123'
GO

 

Backup alırken ilerleme yüzdesi görmek, 10ar 10ar gösterir, değiştirmek istersen STATS=1, query çalıştırıldığında Messages kısmında görürsün.

BACKUP DATABASE NORTHWND
TO DISK = 'D:\NORTHWND.BAK'
WITH STATS
GO

 

Mirror backup;

BACKUP DATABASE NORTHWND
TO DISK = 'C:\NORTHWND.BAK'
MIRROR TO DISK = 'D:\NORTHWND_Mirror.BAK'
WITH FORMAT
GO

 

COPY_ONLY özelliği ile backup almak;

BACKUP DATABASE NORTHWND
TO DISK = 'C:\NORTHWND.BAK'
WITH COPY_ONLY
GO

 

    1. Transaction Log : Son transaction log yedeğinin alındığı andan itibaren veritabanında gerçekleşen tüm işlemlerin (transactions) yedeğini alır.  Transactin Log backup’ları istenilen zamana geri dönüş imkanı sunar. Yanlış data giriş/çıkışlarından kaynaklanan sorunları çözmek için çok uygun. Her backup’tan sonra sanal log’lar silineceği için en son alınan Transaction Log’dan sonraki arasındaki işlemlerin backup’ını alabileceksin. Bu işlem ancak DB’de Full Recovery Model etkin ise yapılır. Simple Recovery Model’de Transaction Log backup’ı alamazsın. Transaction Log backup alınabilmesi için önce bir Full backup alınmış olmalıdır.
BACKUP LOG NORTHWND
TO DISK = 'C:\NORTHWND.TRN'
GO

 

    1. Differential : Farklı olan, fark gibi anlamları vardır. En son alınan Full backup’tan itibaren değişen verileri kapsayan backup’tır. Sadece farklı olan verileri alacağı için küçük ve hızlı alınabilirler. Full backup’tan sonra periyodik olarak kullanmaya gayet uygundur. Differential backup restore edilirken Full backup ile birlikte edilmelidir. İstenilen güne dönmek için Full backup + istenilen gün backup’ı beraber kullanılmalıdır. Differential backup alınabilmesi için önce bir Full backup alınmış olmalıdır.
BACKUP DATABASE NORTHWND TO DISK='D:\DIFFBACKUP.BAK' WITH DIFFERENTIAL

 

Yedekleme işlemlerinde bütünlük önemlidir. Her backup’ın planlanmış ve zamanında alınıyor olması gerekir. Plansız alınan bir Full backup, Differential backup en son alınan Full backup tarihini baz aldığından işleyişi bozacaktır. Bunun içinde bir şey düşünülmüş, backup alırken COPY_ONLY özelliği kullanılır ise backup sıralaması bozulmaz bu sayede Differential backup’lar asıl alınan backup tarihinden itibaren olan farkları alacaklardır.

Backup sıralamasını kontrol etmek.

SELECT * FROM sys.master_files
WHERE database_id=DB_ID('NORTHWND')

 

Ayrıca alınan backup’ların restore verifyonly (doğruluk, bozukluk kontrolü) işleminden geçer not alması gerekir. Örneğin 10 gün boyunca günlük alınan Transaction Log’ların 3. gün alınan backup’ın bozulması durumunda sonraki 7 Transaction Log da işlevselliğini yitirecektir.

–Bunlarda fasülyeler.

  • File
  • Filegroup
  • Partial

Restore

Geri yükleme, alınan backupları tekrar yükleme işlemleridir.

Backup bilgilerini görme yöntemleri;
**Ayrıca bkz

RESTORE HEADERONLY FROM DISK = 'C:\NORTHWND.BAK'
GO

RESTORE LABELONLY FROM DISK = 'C:\NORTHWND.BAK'
GO

RESTORE FILELISTONLY FROM DISK = 'C:\NORTHWND.BAK' WITH FILE = 1
GO


--Backup doğrulamak;

RESTORE VERIFYONLY FROM DISK = C:\NORTHWND.BAK
GO

 

Backup restore;

RESTORE DATABASE NORTHWND FROM DISK = 'C:\NORTHWND.BAK'
WITH RECOVERY
GO

 

MDF ve LDF dosyalarının yerini belirterek backup restore;

RESTORE DATABASE [NORTHWND] FROM DISK = N'D:\Backup\Northwind.bak' WITH
MOVE N'Northwind' TO N'D:\Backup\NORTHWND.MDF',
MOVE N'Northwind_log' TO N'D:\Backup\NORTHWND_log.ldf'

 

Transaction Log tek başına restore edilemediği için Full backup ile restore;

RESTORE DATABASE NORTHWND FROM DISK = 'C:\NORTHWND.BAK'
WITH NORECOVERY
GO
RESTORE LOG NORTHWND FROM DISK = 'C:\v.TRN'
WITH RECOVERY
GO[/code_block_prettify]

Differential + Transaction Log + Full backup restore;
[code_block_prettify]
RESTORE DATABASE NORTHWND FROM DISK = 'C:\NORTHWND.BAK'
WITH NORECOVERY
GO
RESTORE DATABASE NORTHWND FROM DISK = 'C:\NORTHWND.DIF'
WITH NORECOVERY
GO
RESTORE LOG NORTHWND FROM DISK = 'C:\NORTHWND.TRN'
WITH NORECOVERY
GO
RESTORE LOG NORTHWNDFROM DISK = 'C:\NORTHWND.TRN'
WITH RECOVERY
GO[/code_block_prettify]

Backup alırken olduğu gibi restore ederken ilerleme yüzdesi görmek;
[code_block_prettify]
RESTORE DATABASE 'NORTHWND' FROM DISK = 'C:\NORTHWND.BAK' WITH STATS = 1
GO[/code_block_prettify]

İçerdeki database'i değiştirerek restore etmek;
[code_block_prettify]
RESTORE DATABASE NORTHWNDFROM DISK = 'C:\NORTHWND.BAK'
WITH REPLACE
GO[/code_block_prettify]

Transaction Log backup'taki belli bir zamana restore etmek;

[code_block_prettify]
RESTORE DATABASE NORTHWNDFROM DISK = 'C:\NORTHWND.BAK'
WITH NORECOVERY
GO
RESTORE LOG NORTHWNDFROM DISK = 'C:\NORTHWND.TRN'
WITH RECOVERY,
STOPAT = 'Mar 23, 2009 05:31:00 PM'
GO

 

Leave a Comment.