SQL Server'da Veri Yedekleme

Eyl 08, 2013

SQL Server'da veri kaybını en aza indirmek için ve kaybolan veriye tekrar ulaşabilmek için veritabanlarını düzenli olarak yedeklemek gerekmektedir. 

Kullanıcı veritabanları yedeklenirken aşağıdaki adımlar göz önüne alınır.

  • Sistem "online transaction processing (OLTP)" ortamındaysa veritabanı sık sık yedeklenebilir.
  • Sistem küçük aktivitelere sahip ise veritabanı daha az sıklıkta yedeklenebilir.
  • SQL Server güncellenmediğinde, yedekler tasarlanmalıdır.

Kullanıcılar veritabanı ile çalışırken, SQL Sunucusu veritabanını yedeklemeye izin verir. SQL Sunucusu yedekleme işlemi dinamiktir. Kullanıcı bir veritabanını yedeklerken, SQL Sunucusu aşağıdakileri yedekler:

  • Şema ve dosya yapısı
  • Veri
  • Transaction Log dosyalarının bölümleri

Yedeklenen "Transaction Log" bölümleri, yedekleme işleminin başlamasından beri olan veritabanı aktivitelerini içerir.

SQL Sunucusu orjinal dosyaların yerini kaydeder ve yedeği açma sırasında, bu yedekleri orjinal yerlerine yeniden yaratır.

SQL sunucusu, veritabanını yedeklerken aşağıdaki adımları uygular:

  1. Veritabanını kontrol edip eski aktif "Transaction Log" kaydının log sıra numarasını kaydeder.
  2. Diskleri doğrudan okuyup tüm sayfaları yedekleme ünitesine yazar.
  3. "Log" sıra numarasını tuttuğu tüm "Transaction Log" kayıtlarını yazar.

Yedekleme ve Yedekleri Yerleştirme:

SQL Server'da bir veritabanını yedeklemek için, kimin yedek almaya izni olduğunu ve yedeklerin nereye yerleştirileceğini belirlemek gerekir. Transact SQL ifadelerini ve SQL Server Enterprise Manager'ı çalıştırarak veritabanı yedeklenebilir.

Aşağıdaki rol üyelerinin veritabanı yedekleme izni vardır:

Sysadmin fixed sunucu rolü 
Db_owner fixed veritabanı rolü 
Db_backupoperator fixed veritabanı rolü

Eklenen rollere de yedek alabilmeleri için izin verilebilir.

SQL Sunucusu sabit disk dosyasına veya "Named Pipe" 'e yedekleme yapar. Disk dosyaları (yerel veya ağ) yedekleri yerleştirmek için kullanılan ortak alandır.  Kullanıcıların 3. parti yazılım paketlerini yedeklemelerine ve açmalarına izin vermek için ise, SQL Sunucusu, Named Pipe'a yedek almayı sağlar.  

Sistem Veritabanlarını Yedekleme:

Sistem veritabanları, SQL Sunucusu ve tüm kullanıcı veritabanlarını hakkındaki önemli bilgileri tutar. Böylece, bunlar değiştiği zaman sistem veritabanları düzenli olarak yedeklenmelidir.

Master Veritabanının Değişimi:

Master veritabanı, SQL Sunucusu üzerinde bulunan tüm veritabanları hakkındaki bilgileri içerir. Kullanıcı tanımlı nesneler yaratıldığında, "Master" veritabanı yedeklenmelidir. Bu işlem, "Master" veritabanına bir zarar geldiğinde kullanıcı veritabanlarını kolayca açmaya olanak sağlar.

"Master" veritabanı yapılandırıldıktan ve açıldıktan sonra, diğer sistem veritabanı yedekleri açılabilir ve varolan kullanıcı veritabanlarının yedeği referans edilebilir.

Not: Kullanıcı veritabanlarına referans sağlayan "Master" veritabanının yedeği olmadan, Mssql7\Binn\rebuildm.exe çalıştırılarak sistem veritabanlarının tamamı tekrar yapılandırılmalıdır. Bu yararlı program bir parça olarak tüm sistem veritabanlarını tekrar yapılandırır.

Belirli ifadeler veya sistem saklı yordamları çalıştırılacağı zaman, SQL Sunucusu "Master" veritabanını otomatik olarak değiştirir. Bu yüzden; aşağıdakileri çalıştırılacağı zaman, "Master" veritabanının yedeğini almak gerekir.

  • Veritabanını silen, yaratan, değiştiren "Create Database", "Alter Database" veya "Drop Database" ifadeleri
  • "Transaction Log" 'u değiştiren sp_logdevice sistem saklı yordamı
  • Sunucuları ekleyen veya kaldıran sp_addserver, sp_dropserver ve sp_addlinkedserver sistem saklı yordamları

Msdb Veritabanının Değişimi:

Msdb değiştirildikten sonra yedeği alınmalıdır; çünkü Msdb SQL Server Agent tarafından kullanılan işler (joblar), uyarılar (alertler) ve operatörler hakkındaki bilgileri içerir. "Msdb" veritabanının geçerli yedeği yoksa, bir sistem başarısızlığında bütün sistem veritabanlarını yeniden yapılandırmalı ve daha sonra her bir işi, uyarıyı ve operatorü yeniden yaratmalıdır.

Model Veritabanının Değişimi:

Model veritabanı değiştirilirse, tüm yeni kullanıcı veritabanlarında geçerli konfigurasyonu sağlamak için model veritabanı yedeklenmelidir. "Master" ve "Msdb" veritabanları tekrar yapılandırıldığında tüm kullanıcı veritabanlarının da yapılandırılmasından dolayı "Model" veritabanındaki değişiklikler kaybedilir. Sistem başarısızlıklarında "Model" veritabanının yedeği açılabilir.

Kullanıcı Veritabanlarını Yedekleme:

Bir veritabanı ve index (dizin) yaratıldıktan sonra ve girişi sağlayamayan işlemler çalıştırıldığında yedekleme yapılabilir.

Veritabanlarını Yaratıldıktan Sonra :

Bir veritabanı yaratıldıktan veya veriyle yüklendikten sonra yedeklenmelidir; çünkü tüm veritabanı yedeği olmadan, "Transaction Log" yedekleri açılamaz. "Transaction Log" 'ların kullanılmış olduğu bölüme sahip olmak gerekir.

Dizinler Yaratıldıktan Sonra:

Bir dizin yaratıldığı zaman veritabanı yedeklenmelidir; çünkü bir dizin yaratıldıktan sonra, yapılan yedekleme veri ve dizin yapılarını içeren yedek dosyaları oluşturur.

Bir dizin yarattıktan sonra, sadece "Transaction Log" yedeklenirse ve gelecekte "Transaction Log" açılırsa, SQL Server içeriği yeniden yapılandırılmalıdır. Ancak dizini yeniden yaratmak için harcanan zaman, tüm veritabanının yedeğini açarken harcanan zamandan daha uzun olabilir.

Not: "Transaction Log" sadece yaratılmış dizini kaydeder.

Transaction Log Silindikten Sonra :

"Backup Log With Truncate_Only" ifadesi kullanılarak "Transaction Log" silindikten sonra, veritabanı yedeklenmelidir. Bu ifade çalıştırıldıktan sonra "Transaction Log", veritabanı aktivitelerini içermez ve değişiklikleri geri almak için kullanılmaz.

Diğer durumlar:

"Transaction Log"a kaydedilemeyen işlemler, girişi sağlanamayan (nonlogged) işlemler olarak adlandırılır. Aşağıdaki, girişi sağlanamayan işlemler tarafından yapılan değişiklikler, geri alınamayabilirler.

  • "Backup Log With No_Log" ifadesi. SQL Server bir yedek kopyası yapmadan, "Transaction Log"'un aktif olmayan bölümünü kaldırır.
  • "WriteText" ve "UpdateText" ifadesi. SQL Server Text sütunlarındaki veriyi değiştirir ve bu aktiviteleri "Transaction Log" içine kaydetmez. "With Log" seçeneği ile bu aktiviteler "Transaction Log" 'a yazılabilir.
  • "Select Into" ifadesi ve "bulk copy" programı.

Girişi sağlanamayan (nonlogged) işlemler yapıldıktan sonra veritabanı yedeklenmelidir; çünkü bir veritabanı yedeği açılırken sistem başarısız olursa, "Transaction Log", veritabanını tamamiyle açamaz.

Yedekleme Sırasında Sınırlanan Aktiviteler::

Veritabanı aktif iken yedekleme yapılabilir ancak aşağıdaki hareketler yedek almaya engel olurlar:

  • "Create Database" ve "Alter Database" ifadesi ile veritabanı yaratma ve veritabanını değiştirme 
    Not: Otomatik büyüme yedek alma işlemi sırasında meydana gelmez.
  • Dizinleri yaratma
  • Girişi sağlamayan işlemleri ve "Select Into, "Writetext" ve "Updatetext" ifadelerini çalıştırma

Aşağıdaki aktiviteler yedek alma işlemi ile uyuşmazlar:

  • Yukarıdaki aktivitelerden biri işlem içindeyken yedekleme alınırsa, yedekleme işlemi durur.
  • Bir yedek işlem içindeyse ve kullanıcı yukarıdakileri aktiviteleri çalıştırmaya kalkışırsa, SQL Server bu aktiviteleri yerine getirmez.