MSSQL Server Store Procedure ile Full Backup Kontrol

Bu makalede Mssql Server üzerinde haftalık alınan backup jobların alınıp alınmadığını son kullanıcıya mail ile html formatında bildiren job’ı görmüş olacağız. Büyük sistemlerde Backup joblarımız gereğinden fazla olabilir. Mail ile bildirim almanıza rağmen Görünür den kaçma ihtimaline karşı aşağıda bulunan stored procedure yapısını oluşturup bir job aracılığıyla çalıştırmamız gerekmektedir. Bu sayede hangi veritabanı yedeğinin belirlenen saatte alınıp alınmadığını görebiliriz.

Öncelikle procedure yapısının çalışacağı stored procedure yapımız oluşturuyoruz:

CREATE PROCEDURE [dbo].[FullBackUpKontrol]
AS
BEGIN
    SET NOCOUNT ON;
    ---------------------------------------------------------------------
    -- 1) Sorguyu temp tabloya alınır.
    ---------------------------------------------------------------------
    IF OBJECT_ID('tempdb..#sonuc') IS NOT NULL DROP TABLE #sonuc;
	
	SELECT 
        p.database_name,
        p.[D] AS FullYedek
    INTO #sonuc
    FROM (
        SELECT database_name, type, backup_start_date
        FROM msdb.dbo.backupset
    ) b
    PIVOT (
        MAX(backup_start_date) FOR type IN ([D],[I],[L])
    ) AS p
    INNER JOIN master.sys.databases d
        ON p.database_name = d.name
    WHERE p.[D] < DATEADD(DAY, -3, GETDATE())
    ORDER BY p.database_name;

    ---------------------------------------------------------------------
    -- 2) Tüm Full Yedekler alınmışsa girilecek job
    ---------------------------------------------------------------------
    IF NOT EXISTS (SELECT 1 FROM #sonuc)
    BEGIN
		EXEC msdb.dbo.sysmail_start_sp;
        EXEC msdb.dbo.sp_send_dbmail
            @profile_name='SQLProfile',  -- MAIL PROFILINI BURAYA YAZ
            @recipients='xyunusyucelx@gmail.gov.tr', -- ALICI E-POSTA
            @subject='Full Backup Durumu',
            @body='Tüm Veri Tabanlarının FULL Yedeği son 3 gün içinde alınmıştır.';
        RETURN;
    END

    ---------------------------------------------------------------------
    -- 3) HTML tablo oluştur
    ---------------------------------------------------------------------
    DECLARE @html NVARCHAR(MAX) = 
    N'<h3> FULL Backup Alınamamış Veritabanları</h3>
      <table border="1" cellpadding="5" cellspacing="0">
      <tr>
          <th>Veri Tabanı</th>
          <th>Son Full Yedek</th>
      </tr>';

    SELECT @html = @html +
        N'<tr><td>' + database_name + N'</td><td>' + CONVERT(NVARCHAR(30), FullYedek, 120) + N'</td></tr>'
    FROM #sonuc;

    SET @html = @html + N'</table>';

    ---------------------------------------------------------------------
    -- 4) Mail'i gönder
    ---------------------------------------------------------------------
        EXEC msdb.dbo.sysmail_start_sp;
        EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'SQLProfile',  -- MAIL PROFILINI BURAYA YAZ
        @recipients   = 'xyunusyucelx@gmail.gov.tr',
        @subject      = 'Full Backup Uyarı Raporu',
        @body_format  = 'HTML',
        @body         = @html;
END

Yukarıda procedure üzerinde dikkat edilirse son 3 gün önce alınan backupların kontrolü yapılmaktadır. Oluşturulan job’ında bunan göre çalışması gerekmektedir.

Bir job oluşturulup stored procedure yapısının çalıştırılması gerekmektedir. Job’ın çalışması procedure çalışma zamanıyla uyumlu olmalıdır.

İlgili job çalıştırıldığında dönen sonuç aşağıda görülmektedir.

Bu makalede mssql server üzerinde alınan backupların alınıp alınmadığını kontrol eden yapıyı görmüş olduk. Başka makalede görüşmek dileğiyle..

Emrolunduğun Gibi Dosdoğru Ol!” (Hûd: 112)

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir