Bu makalede Sql Server’da Alert oluşturma konusunu ele almış olacağız. Alert, SQL Server’daki belirli olaylar için otomatik bir uyarı sistemi kurularak, önemli olayların takip edilmesi sağlanır.
Sql Server Agent altında bulunur. Şimdi uygulamalı bir şekilde Alert oluşturalım. Gerekli olan açıklamaları yapalım.
SSMS’den Sql Server Agent sekmesi altında bulunan Alert kısmına sağ tıklanıp New Alert denilir.

Gelen ekranda sol kısımda bulunan bölümler karşımıza çıkmaktadır. Şimdi gelelim bu bölümlerin açıklamasına:
General: Burada, genel uyarı bilgileri girilir.
Response: Burada, Alert tetiklendiğinde hangi eylemin yapılacağı ayarlanır. Örneğin, eposta gönderme veya belirli bir SQL sorgusunu çalıştırma gibi.
Options: Uyarı için ek ayarlar yapılabilir.
Yukarıdaki küçük bilgilendirmeden sonra General sekmesindeki bölümlerin açıklamasını yapalım.

1-Name: Buraya, oluşturacağınız uyarının adını yazmanız gerekiyor. Açıklayıcı olması Alert’in okunabilirliği açısından faydalıdır.
2-Type: Bu alan, uyarı türünün seçildiği alandır. Burada 3 seçenek karşımıza çıkmaktadır. Bunları açıklayalım.
SQL Server event alert: SQL Server’da belirli olayların veya hataların oluştuğunda uyarı vereceği anlamına gelir.
SQL Server performance condition alert: Performans sorunlarına dayalı uyarılar oluşturur. Örneğin, CPU veya bellek kullanımı gibi belirli performans ölçütlerine dayalı bir uyarı tanımlanabilir.
WMI event alert: Windows Management Instrumentation (WMI) ile ilgili sistem olaylarını izler ve belirli olaylar meydana geldiğinde uyarı oluşturur.
3-Event Alert Definition: Bu alanda hangi olay türünün uyarıyı tetikleyeceği tanımlanıyor. Burada SQL Server veya performans koşulları için uyarılar tanımlanmış.

Database name: Uyarının hangi veritabanı için geçerli olduğunu seçebileceğiniz kısım. Şu anda all databases seçili, yani bu uyarı tüm veritabanları için geçerli olacaktır.
Alerts will be raised based on kısmında uyarılar aşağıdaki verilere göre tetiklenecektir.
Error number: Belirli bir hata numarasına göre uyarı oluşturmak için bu seçenek kullanılabilir. Örneğin, belirli bir SQL Server hata kodu tetiklendiğinde uyarı verir. Burada kendimiz bir SQL hata kodu belirtebiliriz. Microsoft sayfasında hata kodunu öğrenip Error Number kısmına yazılabilir. Bu makalemizde Hatalı giriş yapan kullanıcıları bize Alert üzerinden Mail işlemine tabi tutacağız.
Severity: Tanımlamış olduğumuz Alert’in hata şiddetini göstermektedir. SQL Server’daki olayların ne kadar kritik olduğunu gösterir. Herhangi bir seçeneği işaretleyerek hata şiddet seviyesine göre uyarı verecek şekilde ayarlanmış durumda.
Şimdi Severity kısmındaki bazı hata kodlarını inceleyelim:

Burada, SQL Server’da meydana gelen olayların ciddiyet seviyeleri listelenmiştir. Her olay bir numarayla belirtilir. Bu ekrandaki tüm şiddet (severity) numaralarının ve olayların ne anlama geldiklerini tek tek açıklayayım:
001 Miscellaneous System Information: Sistemle ilgili çeşitli bilgi mesajlarını ifade eder. Önemli hata değil, sistemin genel durumu hakkında bilgi verir.
002 Reserved: Bu numara, ileride kullanılmak üzere ayrılmıştır. Şu an herhangi bir olay tanımlanmış değildir.
003 Reserved: Bu numara da ileride kullanılmak üzere ayrılmıştır. Şu an aktif bir anlamı yoktur.
004 Reserved: Gelecekteki kullanımlar için ayrılmış bir numara.
005 Reserved: İleride kullanılmak üzere ayrılmıştır.
006 Reserved: Gelecekteki kullanımlar için ayrılmış bir olay numarası.
007 Notification: Status Information: Sistem durumu hakkında bilgilendirici bir mesajdır. Önemli bir hata değil, sadece durum güncellemesidir.
008 Notification: User Intervention Required (Bildirim: Kullanıcı Müdahalesi Gerekiyor): Kullanıcının müdahale etmesi gereken bir durumu bildirir. Örneğin, bir işlemin manuel olarak onaylanması gerektiği gibi durumlar.
009 User Defined: Kullanıcı tarafından tanımlanan özel hata veya olay mesajları için kullanılır. Standart olaylardan farklı olarak, kullanıcı tarafından belirlenir.
010 Information: Bilgi amaçlı olay mesajıdır. Bir hataya işaret etmez, sadece bilgilendirme sağlar.
011 Specified Database Object Not Found (Belirtilen Veritabanı Nesnesi Bulunamadı): Belirtilen veritabanı nesnesinin (örneğin, tablo, sütun veya index) bulunamadığını belirten bir hatadır.
012 Unused: Bu numara şu anda kullanılmamaktadır.
013 User Transaction Syntax Error (Kullanıcı İşlem Sözdizim Hatası): Kullanıcının bir SQL sorgusunda veya işleminde yaptığı söz dizim hatasını ifade eder.
014 Insufficient Permission (Yetersiz İzin): Kullanıcının bir işlemi gerçekleştirebilmek için yeterli izne sahip olmadığını belirten hata mesajıdır.
015 Syntax Error in SQL Statements (SQL Cümlelerinde Sözdizim Hatası): SQL sorgusundaki sözdizimi hatalarını ifade eder.
016 Miscellaneous User Error (Çeşitli Kullanıcı Hataları): Kullanıcının çeşitli nedenlerden kaynaklanan hatalarını ifade eder. Belirli bir kategoriye girmeyen kullanıcı hatalarını kapsar.
017 Insufficient Resources (Yetersiz Kaynaklar): Veritabanı işlemi için yeterli sistem kaynaklarının (CPU, bellek, disk alanı vb.) bulunmadığını gösterir.
018 Nonfatal Internal Error (Ölümcül Olmayan Dahili Hata): Sistem içinde oluşan ancak sistemi çökertmeyen veya veri kaybına neden olmayan bir hatadır. Genellikle küçük bir hata olarak kabul edilir.
019 Fatal Error in Resource (Kaynakta Ölümcül Hata): Sistem kaynaklarından birinde (CPU, bellek, disk) oluşan ölümcül hatayı ifade eder. Genellikle sistemde ciddi bir sorun anlamına gelir.
020 Fatal Error in Current Process (Mevcut İşlemde Ölümcül Hata): Mevcut işlem sırasında oluşan ciddi bir hata. Bu hata genellikle işlemin başarısız olmasına neden olur.
021 Fatal Error in Database Processes (Veritabanı İşlemlerinde Ölümcül Hata): Veritabanı işlemleri sırasında meydana gelen büyük bir hatayı ifade eder. Bu hatalar genellikle veri bozulması veya kaybı gibi ciddi sonuçlara yol açabilir.
022 Fatal Error: Table Integrity Suspect (Tablo Bütünlüğü Şüpheli: Ölümcül Hata): Bir tablonun veri bütünlüğünün bozulmuş veya bozulma riski altında olduğunu gösteren bir hatadır. Tablo verilerinde tutarsızlık olabilir.
023 Fatal Error: Database Integrity Suspect (Veritabanı Bütünlüğü Şüpheli: Ölümcül Hata): Veritabanının bütünlüğünde bir sorun olduğunu, veri bozulması riskinin bulunduğunu ifade eder. Ciddi veri hatalarına yol açabilir.
024 Fatal Error: Hardware Error (Donanım Hatası: Ölümcül Hata): Sistem donanımında meydana gelen bir hatayı işaret eder. Bu hata, disk arızası veya bellek sorunu gibi fiziksel donanım arızalarından kaynaklanabilir.
025 Fatal Error (Ölümcül Hata): Genel bir ölümcül hata mesajıdır. Kritik bir hata meydana geldiğinde tetiklenir ve genellikle işlemin başarısız olmasına neden olur. Bu liste, SQL Server’da meydana gelebilecek olayların ve hataların ciddiyet seviyelerini gösterir. Daha düşük seviyeli olaylar genellikle bilgi amaçlıyken, daha yüksek numaralı ve “fatal” (ölümcül) olarak adlandırılanlar kritik sistem veya veri hatalarına işaret eder ve acil müdahale gerektirir.
Local sistemde çalıştığım için Alert mesajını görmek için yukarıdaki hata mesajlarını kullanmıyorum. Çünkü alert almam zor olur çalışan bir yapısı yok Local’imin. Bunun için Loginlerin failed ettikten sonra Alert çalışmasını sağlayacak 18456 ve 18487 Error Number’lar belirlenebilir. Bu hata kodu yetkisi olmayan kişilerin durumunu takip etmek içindir.
Not: Aşağıdaki sorgu yardımıyla Sql Server altında bulunan Alert’leri parantez içerisinde bulmak istediğimiz alert başlığını belirterek bulabiliriz. Ya da herhangi bir language_id aralığındaki değerleri bulabiliriz. language_id = 1055 olursa text kısmında türkçe açıklamaları yazmaktadır. Sadece loginlerle ilgili alertleri getirmektedir.
use master
go
select message_id as ErrorNumber, text
from sys.messages
where text LIKE ('%login%')
and language_id = 1033

Yukarıdaki açıklamalardan sonra devam edebiliriz.
Raise alert when message contains: Error Number seçeneği işaretlendiğinde, hata mesajında belirli bir metin veya ifade geçtiğinde uyarı verebilir. Bu, özel hata mesajlarına odaklanmak için kullanışlıdır. Yukarıda belirtilmiş Error Number yazılır.

Yukarıdaki bölümde general sekmesinde açıklamaları yaptıktan sonra sol tarafta bulunan diğer sekmelerin içeriklerini inceleyelim.
Response kısmında alert tetiklendiğinde hangi eylemin yapılacağı ayarlanır. Örneğin, eposta gönderme veya belirli bir SQL sorgusunu çalıştırma gibi.
Execute job kısmında yeni bir job oluştura bildiğimiz gibi mevcut olan job’ıda çalıştırabiliyorum.

Çerçeve içine alınmış bölümü seçerek önceden oluşturmuş olduğum Job’ı çalıştırmış olacağım. Önceden oluşturmuş olduğum TEST_JOB’ı seçiyorum.

Daha sonra Notify operators kısmında önceden oluşturmuş olduğum DbOperator karşıma geliyor ve E-mail kısmını seçiyorum. Ya da herhangi bir operatör elinizde yoksa aşağıda kısımda New Operator diyerek yeni bir operatör oluşturabiliriz.

Yukarıdaki konfigürasyonda hem Job’ı çalıştırmış olacağız. Hem de mail gönderim işlemini gerçekleştirmiş olacağız.
Response seçeneğinde ayarlamaları yaptıktan sonra Options bölüme geçilir.

Options bölümünde uyarı alındığında nasıl bildirimler yapılacağı ve ek seçenekler ayarlanıyor.
Include alert error text’in altında iki seçenek bulunmaktadır.
E-mail: Uyarı oluştuğunda bir e-posta ile bildirimin yapılmasını sağlar. Eğer bu seçeneği işaretlerseniz, belirlediğiniz e-posta adresine uyarı ile ilgili hata metni gönderilecektir.
Pager: Günümüzde fazla kullanılmasa da, uyarı metninin eski usül çağrı cihazlarına (pager) gönderilmesi seçeneğidir.
Additional notification message to send: Bu alana uyarı ile birlikte gönderilecek ek bir mesaj yazabilirsiniz. Örneğin, uyarıyı alan kişiye bir talimat ya da yönlendirme eklemek için kullanılabilir. Burada yazılan mesaj, e-posta veya pager ile birlikte gönderilecek metnin bir parçası olur.
Delay between responses: Uyarılar arasında ne kadar süre gecikme olacağını belirler. Eğer bir uyarının birkaç kez gönderilmesi gerekiyorsa, bu süreler arası zaman farkı ayarlanabilir. Minutes (Dakika) ve Seconds (Saniye) alanlarıyla, iki bildirim arasındaki süreyi ayarlayabilirsiniz. Örneğin, 1 dakika arayla uyarı almak istiyorsanız, buraya 1 dakika girebilirsiniz.

Yukarıdaki tüm ayar ve konfigürasyondan sonra Alert oluşturma adımımızı OK deyip tamamlıyoruz. Arayüz üzerinde yapmış olduğumuz bu işlemin Script’ini alalım.
USE [msdb]
GO
EXEC msdb.dbo.sp_update_alert @name=N'ALERT_23',
@message_id=18456,
@severity=0,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@database_name=N'',
@notification_message=N'ALERT_1 den LOGIN FAILED HATASI ALDIN. BIRI SISTEME GIRMEYE CALISIYOR.',
@event_description_keyword=N'',
@performance_condition=N'',
@wmi_namespace=N'',
@wmi_query=N'',
@job_id=N'8dab544b-36f2-43a8-ae89-881ea41dbb31'
GO
EXEC msdb.dbo.sp_update_notification @alert_name=N'ALERT_1', @operator_name=N'DbOperator', @notification_method = 1
GO
Sql Server Agent altında ALERT_1 oluşmuş durumda.

Sağ tıklanıp Disable yapılabilir veya Properties bölümünden Alert üzerinde düzenleme yapabiliriz.

Alert sonucunda Mail alabilmemiz için Sql Server Agent sağ tıklayıp Properties ekranından Alert System kısmından Enable mail profil aktif edilmesi gerekmektedir.

Öncelikle belirtmek gerekirse yukarıda oluşturduğumuz Alert Login girişlerini kontrol işlemi yapıyor. Hata mesajı alırsa tanımlanmış olan operatör’e mail işlemi gerçekleştiriyor. Aynı zamanda yukarıda tanımladığımız bölümde bir job çalıştırması gerekiyor.
Şimdi Sql Server’ımız üzerinde olan bir kullanıcıyla bağlanmaya çalışalım. Tabi burada şifremizi yanlış girmiş olacağız.

Şifremiz yanlış olduğu için hata mesajıyla karşılaşmış olduk.

Operatör altında tanımladığımız Mail adresine bakalım. Alert’ten bize herhangi bir mail gelmiş mi ?

Evet uyarı mesajım gelmiş durumda. Alert altında belirtmiş olduğumuz Job’ın başarılı bir şekilde çalıştığını görmüş oluyoruz.
Aşağıdaki resim hangi yanlış kullanıcı ile şifre denemesi yaptığımız Login’i göstermektedir.

Job’ımızın başarılı bir şekilde çalıştığını görmüş oluyoruz.

Not: Alert ile ilgili sürekli kullanımda olan Hata Numaraları belirtebiliriz. Aşağıdaki resimde Önemli diyebileceğimiz alert’leri görebiliriz.

9002: Transaction Log dosyasının dolduğunu göstermektedir.
41144: Availability group kaldırıldı.
41142: Availability group oluşturuldu.
19406: Secondary replica bağlantısı koptu.
3402: Veritabanı restoring modunda.
41074: Cluster quorum kaydedildi. WSFC node sayısı yetersiz veya iletişim kopmuş.
18456: Sql Aut. ile yapılan bağlantlılarda yapılan hata mesajıdır.
18452: Windows aut. bağlantılarında alınan hata mesajıdır.
4060: Giriş başarılı ama kullanıcı belirli veritabanı iznine sahip değil.
Aşağıdaki komut ile Alert konfigürasyonu yapılır.
USE msdb
EXEC msdb.dbo.sp_add_alert
@name = N'ALERT23',
@message_id = 1480,
@severity = 0,
@enabled = 1,
@delay_between_responses = 0,
@include_event_description_in = 1;
GO
EXEC msdb.dbo.sp_add_notification
@alert_name = N'ALERT23',
@operator_name = N'DbOperator',
@notification_method = 1;
GO
Aşağıdaki komut ile sql server üzerinde hata kodları çözülebilir.
exec sp_readerrorlog 0,1, '18456';
Not: Alwayson yapılarında primary sunucusunda oluşturulan 18456 error number numarasına sahip alert belirli aralıklarla secondary sunucularında bağlantı hatası alıyorum şeklinde mesaj düşerse mail ortamımıza yapmamız gereken işlemler secondary sunucularının hesap bilgisi primary sunucusuna eklenmesi gerekmektedir. Aynı zaman secondary sunucularının çalıştığı sql configuration manager ekranında bulunan servis hesabınından primary sunucusuna eklenmesi gerekmektedir. Primary sunucusunda login bölümünde aşağıdaki komutlar çalıştırılır.
CREATE LOGIN [YCL2025\SECONDARY1$] FROM WINDOWS;
CREATE LOGIN [YCL2025\SECONDARY2$] FROM WINDOWS;
Not: $ makina windows bilgisayar hesabı olduğunu göstermektedir.
Yukarıdaki bilgisayar hesaplarımı ekledikten sonra şimdi bu secondary hesaplara bazı role yetkilerinin verilmesi gerekmektedir.
ALTER SERVER ROLE [sysadmin] ADD MEMBER [YCL2025\SECONDARY1$];
ALTER SERVER ROLE [sysadmin] ADD MEMBER [YCL2025\SECONDARY2$]
Yukarıdaki role yetkisini tamamladıktan sonra artık alert yapımız secondary sunucularında belirli bir süre sonra bağlanamadığına dair bir hata mesajı üretmeyecektir.
Tekrar söylemek gerekirse secondary servis hesapları eğer primary üzerinde tanımlı değilse oluşturulması gerekmektedir.
Bu makalede Sql Server Agent altında bulunan Alert kısmında yapmış olduğumuz örnek üzerinde Alert işlemini görmüş olduk. Başka bir makalede görüşmek üzere..
“Çoklukla övünmek, sizi kabirlere varıncaya kadar oyaladı.“Tekasür-1-2
1 thought on “MSSQL Server Agent – Alert Configuration”