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)