MS SQL Server’da Veritabanı geri yükleme (restore) geçmişi

Merhabalar, bu makalede, Microsoft SQL Server üzerindeki veritabanlarının yedekleme geçmişi hakkında bilgi edinmenin yanı sıra bu kritik bilgilerin sıralanmasi, raporlanmasi ve dışa aktarilmasi için katma değerli araçlar ve özelliklere değiniyor olacağım.

Veritabanını production ortamından – test ortamına geri yüklemek için bir işlemi otomatikleştirdiğinizi varsayalım. Bu durumda aşağıdaki soruların yanıtlarını almak için veritabanı geçmişini almamız gerekebilir.

  • Son veritabanı geri yükleme tarihi nedir?
  • Veritabanı geri yüklemesinin ayrıntıları nedir? (Kaynak yedekleme dosyası, yedekleme dosyası oluşturma tarihi)
  • Veritabanı geri yüklemesini kim gerçekleştirdi?

Microsoft SQL veritabanındaki sistem tablolarını kullanarak veritabanı geri yükleme bilgilerini alabilirsiniz. Aşağıda, veritabanı geri yükleme geçmişi için MSDB veritabanındaki tablolar verilmiştir.

SELECT  
  [restore_date]
      ,[destination_database_name]
      ,[user_name]
      ,[backup_set_id]
      ,[restore_type]
      ,[replace]
      ,[recovery]
      ,[restart]
  FROM [msdb].[dbo].[restorehistory]

Bu çıktı yer alan tablolar ve bilgileri ;

  • restore_date: veritabanının geri yükleme tarih ve saat bilgisini  verir.
  • destination_database_name: hedef veritabanı adı bilgisini verir.
  • user_name: Söz konusu veritabanı için geri yüklemeyi gerçekleştiren kullanıcı adını verir.
  • backup_set_id: Yedekleme dosyası hakkında bilgi almak için bu sütuna backupset tablosundaki bilgiler ile kontrol edebilirsiniz.
  • restore_id: Bu sütunu, belirli bir veritabanında gerçekleştirilen veritabanı geri yükleme türünü bilmek için kullanabiliriz.
    • D -> Database
    • I -> Differential
    • L -> Log
    • V -> Verify-Only
  • replace: bir veritabanı geri yükleme komutu yürüttüğümüzde, mevcut hedef veritabanını değiştirmek için bu seçenek kullanılır.
    • 0 -> Not specified
    • 1 -> Specified
  • recovery : Veritabanı geri yükleme sorgusunda, veritabanını kullanıcılar için açıp açmamak için Kurtarma ve Kurtarmama seçeneğini de belirtiriz.
    • 0 -> Kurtarılmadı (No-Recovery)
    • 1 -> Kurtarıldı (Recovery)
  • restart: Geri yükleme işleminin yeniden başlat seçeneğini belirtip belirtmediğini gösterir.
    • 0 -> yeniden başlatma (no restart)
    • 1 -> yeniden başlat (restart)

Aşağıdaki sorgu ile iç tabloları kullanarak MSDB bilgi getirelim. Bu sorguda, tam bilgi almak için restrehistory ve restorefile tablolarını yedekleme geçmişi bilgi tablolarıyla birleştiriyoruz.

SELECT
 rh.destination_database_name AS [Database],
  CASE WHEN rh.restore_type = 'D' THEN 'Database'
  WHEN rh.restore_type = 'F' THEN 'File'
   WHEN rh.restore_type = 'I' THEN 'Differential'
  WHEN rh.restore_type = 'L' THEN 'Log'
    ELSE rh.restore_type 
 END AS [Restore Type],
 rh.restore_date AS [Restore Date],
 bmf.physical_device_name AS [Source], 
 rf.destination_phys_name AS [Restore File],
  rh.user_name AS [Restored By]
FROM msdb.dbo.restorehistory rh
 INNER JOIN msdb.dbo.backupset bs ON rh.backup_set_id = bs.backup_set_id
 INNER JOIN msdb.dbo.restorefile rf ON rh.restore_history_id = rf.restore_history_id
 INNER JOIN msdb.dbo.backupmediafamily bmf ON bmf.media_set_id = bs.media_set_id
ORDER BY rh.restore_history_id DESC
GO