Bu makalede sunucumuz üzerinde bulunan Disklerin boyutunu bir tabloya kaydeden daha sonra disk doluluk oranı yüzde 80 üzerine olan diskleri bizlere mail olarak bildiren yapıyı görmüş olacağız.
İlk olarak tablomuzu oluşturup daha sonra sıkıntı yaşamamak için index yapılarıını oluşturuyoruz.
USE [DBAMON]
GO
CREATE TABLE [dbo].[DiskTakip](
[instance] [nvarchar](255) NULL,
[host] [nvarchar](255) NULL,
[disc] [nvarchar](255) NULL,
[kalanAlan] [decimal](10,2) NULL,
[dolulukYuzdesi] [decimal](10,2) NULL,
[KontrolTarihi] [datetime] NULL
) ON [PRIMARY]
GO
-- İndeksleri de ekleyelim (opsiyonel)
CREATE NONCLUSTERED INDEX [IX_DiskTakip_KontrolTarihi] ON [dbo].[DiskTakip]
(
[KontrolTarihi] ASC
) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_DiskTakip_Instance_Host_Disc] ON [dbo].[DiskTakip]
(
[instance] ASC,
[host] ASC,
[disc] ASC
) ON [PRIMARY]
GO
Aşağıdaki procedure ile verilerimizi ekleme işlemi yapıyoruz. Aynı zamanda değerleri diske kaydetmiş oluyoruz.
use DBAMON
GO
CREATE OR ALTER PROCEDURE dbo.prc_DiskAlanKaydetVeUyar_HTML
AS
BEGIN
SET NOCOUNT ON;
DECLARE @HostName NVARCHAR(255) = HOST_NAME();
DECLARE @InstanceName NVARCHAR(255) = @@SERVERNAME;
DECLARE @KontrolTarihi DATETIME = GETDATE();
DECLARE @Threshold DECIMAL(5,2) = 80.00; -- %80 üzeri doluluk uyarısı eşiği
DECLARE @MailBody NVARCHAR(MAX) = N'';
DECLARE @Count INT;
;WITH DiskBilgisi AS
(
SELECT
vs.volume_mount_point AS DriveLetter,
MAX(vs.total_bytes) / 1024.0 / 1024.0 AS TotalMB,
MAX(vs.available_bytes) / 1024.0 / 1024.0 AS FreeMB
FROM sys.master_files AS f
CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.file_id) AS vs
GROUP BY vs.volume_mount_point
)
INSERT INTO dbo.DiskTakip (instance, host, disc, kalanAlan, dolulukYuzdesi, KontrolTarihi)
SELECT
@InstanceName AS instance,
@HostName AS host,
d.DriveLetter AS disc,
CAST(d.FreeMB / 1024.0 AS DECIMAL(10,2)) AS kalanAlan_GB, -- GB cinsinden
CAST(100 - ((d.FreeMB / d.TotalMB) * 100) AS DECIMAL(10,2)) AS dolulukYuzdesi,
@KontrolTarihi AS KontrolTarihi
FROM DiskBilgisi AS d;
------------------------------------------------------------
-- %80 üzeri diskleri bul
------------------------------------------------------------
SELECT @Count = COUNT(*)
FROM dbo.DiskTakip
WHERE KontrolTarihi = @KontrolTarihi
AND dolulukYuzdesi >= @Threshold;
IF (@Count > 0)
BEGIN
-- HTML tablo oluştur
SET @MailBody =
N'<html>
<head>
<style>
body { font-family: Arial, sans-serif; font-size: 13px; color: #333; }
table { border-collapse: collapse; width: 600px; }
th, td { border: 1px solid #ccc; padding: 6px; text-align: left; }
th { background-color: #0078D7; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
.high { background-color: #ffcccc; font-weight: bold; }
</style>
</head>
<body>' +
N'<h3>⚠️ Disk Doluluk Uyarısı</h3>' +
N'<p><b>Sunucu:</b> ' + @HostName + '<br>' +
N'<b>Instance:</b> ' + @InstanceName + '<br>' +
N'<b>Kontrol Tarihi:</b> ' + CONVERT(NVARCHAR(20), @KontrolTarihi, 120) + '</p>' +
N'<table>' +
N'<tr><th>Disk</th><th>Kalan Alan (GB)</th><th>Doluluk (%)</th></tr>';
-- Her disk satırını HTML'e ekle
SELECT
@MailBody = @MailBody +
N'<tr' + CASE WHEN dolulukYuzdesi >= @Threshold THEN ' class="high"' ELSE '' END + N'>' +
N'<td>' + disc + N'</td>' +
N'<td>' + CAST(kalanAlan AS NVARCHAR(20)) + N'</td>' +
N'<td>' + CAST(dolulukYuzdesi AS NVARCHAR(10)) + N'</td>' +
N'</tr>'
FROM dbo.DiskTakip
WHERE KontrolTarihi = @KontrolTarihi
AND dolulukYuzdesi >= @Threshold;
-- Tabloyu ve HTML gövdesini kapat
SET @MailBody = @MailBody +
N'</table><br><p style="color:#666;">Bu e-posta SQL Server tarafından otomatik olarak gönderilmiştir.</p></body></html>';
-- Mail gönder
exec msdb.dbo.sysmail_start_sp
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SQLProfile_NAME', -- Database Mail profili
@recipients = 'DByonetimi@xxx.gov.tr', -- Uyarı gidecek e-posta adres(ler)i
@subject = ' Disk Doluluk Uyarısı - SQL Sunucusu ',
@body = @MailBody,
@body_format = 'HTML';
END
END;
GO
İlgili procedure yapısının çalıştırılması sonucunda
exec dbo.prc_DiskAlanKaydetVeUyar_HTML
Mailimizin başarılı bir şekilde yollandığı görülmektedir.

Veritabanı altına kaydetmiş olduğumuz tablomuzu kontrol edildiğinde değerlerimizin kaydedildiği görülmektedir.

Bu makalede Sunucu üzerinde bulunan Disklerin Boyutunu Mail ile Bildirme ve Tabloya Kaydetme konusunu detaylı bir şekilde görmüş olduk. Başka makalede görüşmek dileğiyle..
“İslâm, güzel ahlâktır.”(Hadis)