{"id":801,"date":"2013-06-16T20:59:36","date_gmt":"2013-06-17T03:59:36","guid":{"rendered":"http:\/\/3.209.169.194\/blogs\/glenn\/?p=801"},"modified":"2019-03-18T12:17:48","modified_gmt":"2019-03-18T19:17:48","slug":"the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/","title":{"rendered":"The Accidental DBA (Day 17 of 30): Configuring Alerts for High Severity Problems"},"content":{"rendered":"<p><em>This month the SQLskills team is presenting a series of blog posts aimed at helping Accidental\/Junior DBAs &#8216;keep the SQL Server lights on&#8217;. It&#8217;s a little taster to let you know what we cover in our\u00a0<a href=\"https:\/\/www.sqlskills.com\/sql-server-training\/ie0\/?utm_source=accidentaldba&amp;utm_medium=blogs&amp;utm_campaign=training\">Immersion Event for The Accidental\/Junior DBA<\/a>, which we present\u00a0<a href=\"https:\/\/www.sqlskills.com\/sql-server-training\/immersion-events-schedule\/?utm_source=accidentaldba&amp;utm_medium=blogs&amp;utm_campaign=training\">several times each year<\/a>. You can find all the other posts in this series at\u00a0<a href=\"https:\/\/www.SQLskills.com\/help\/accidentaldba?utm_source=accidentaldba&amp;utm_medium=blogs&amp;utm_campaign=training\">https:\/\/www.sqlskills.com\/help\/AccidentalDBA<\/a>. Enjoy!<\/em><\/p>\n<p>One necessary part of being a responsible, pro-active DBA is to try to configure your SQL Server instances in such a manner so they will be as reliable as possible. This begins with how you initially install and configure the operating system and SQL Server, and what you do over time to maintain and monitor your SQL Server instances. I previously wrote a three part series about how to provision a new SQL Server instance that is available on the <a href=\"https:\/\/www.red-gate.com\/simple-talk\/\">SimpleTalk web site<\/a>. Part One <a href=\"https:\/\/www.red-gate.com\/simple-talk\/sql\/database-administration\/provisioning-a-new-sql-server-instance-part-one\/\">is here<\/a>, Part Two <a href=\"https:\/\/www.red-gate.com\/simple-talk\/sql\/database-administration\/provisioning-a-new-sql-server-instance-part-two\/\">is here<\/a>, and Part Three <a href=\"https:\/\/www.red-gate.com\/simple-talk\/sql\/database-administration\/provisioning-a-new-sql-server-instance-part-three\/\">is here<\/a>. If you read and follow my recommendations in those three articles, you will have a very good installation and configuration foundation to build on going forward.<\/p>\n<p>One subject that I touched on in Part Three of that series was how to use some T-SQL to quickly create SQL Server Agent Alerts for a number of critical error conditions. SQL Server Agent Alerts are often confused with SQL Server Agent job notifications, but they are actually quite different. SQL Server Agent job notifications allow you to send an e-mail or page to a SQL Server Operator when an Agent job fails, succeeds or completes. The most common usage is to send an e-mail to your SQL Server Operator (which can be an e-mail distribution list) whenever a SQL Server Agent job fails. You really should make sure each of your SQL Server Agent Jobs has a proper SQL Server Agent job notification so that someone in your organization knows whenever a SQL Server Agent job fails, so that the problem can be investigated and corrected. The Notification tab for a SQL Server Agent Job is shown in Figure 1.<\/p>\n<p><a href=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image4.png\"><img fetchpriority=\"high\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb4.png\" alt=\"image\" width=\"644\" height=\"419\" border=\"0\" \/><\/a><\/p>\n<p><strong>Figure 1: SQL Server Agent Job Notification Tab<\/strong><\/p>\n<p>While these Agent Job notifications are important, they are <strong><em>not the same thing<\/em><\/strong> as a SQL Server Agent Alert. A SQL Server Agent Alert will trigger an action (such as notifying an Operator by sending an e-mail) whenever certain errors occur or certain other performance conditions exist (that are detected from Windows Performance Monitor objects values or Windows Management Instrumentation (WMI) queries). You can also execute a SQL Server Agent Job in response to a SQL Server Agent Alert, in addition to simply notifying an Operator. This is much better than finding out about a problem by stumbling across it in the SQL Server Error Log or finding about it when it has led to some problem that is affecting your availability or data integrity. Figure 2 shows the General tab for a SQL Server Agent Alert. Figure 3 shows the Response tab for for a SQL Server Agent Alert.<\/p>\n<p><a href=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image5.png\"><img decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb5.png\" alt=\"image\" width=\"549\" height=\"484\" border=\"0\" \/><\/a><\/p>\n<p><strong>Figure 2: SQL Server Agent Alert General Tab<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image6.png\"><img decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb6.png\" alt=\"image\" width=\"563\" height=\"484\" border=\"0\" \/><\/a><\/p>\n<p><strong>Figure 3: SQL Server Agent Alert Response Tab<\/strong><\/p>\n<p>Paul Randal previously wrote about the <a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/easy-monitoring-of-high-severity-errors-create-agent-alerts\/\">importance of creating SQL Server Agent Alerts<\/a>. I wanted to make it even easier to create a set of very important SQL Server Agent Alerts by just running a relatively simple T-SQL script. The code below automatically picks up the server name and uses that as part of the alert name. It also uses variables for the operator name and for the alert category name. In this script, the delay between responses is set to 900 seconds, which is 15 minutes. That might be a little on the long side, but I did not want the operator to get spammed with e-mail alerts every couple of minutes. You can always adjust that value to whatever you see fit.<\/p>\n<p>You need to make sure that you have a SQL Operator defined for your instance (and that you change the name of the operator in the script below to match your Operator name). You also need to make sure that you have Database Mail properly configured and enabled, so that you will actually get an e-mail when one of your SQL Server Agent Alerts is triggered.<\/p>\n<pre class=\"csharpcode\"><span class=\"rem\">-- Add important SQL Agent Alerts to your instance<\/span>\r\n<span class=\"rem\">-- Change the @OperatorName as needed<\/span>\r\n\r\n<span class=\"kwrd\">USE<\/span> [msdb];\r\n<span class=\"kwrd\">GO<\/span>\r\n\r\n<span class=\"rem\">-- Make sure you have an Agent Operator defined<\/span>\r\n<span class=\"rem\">-- Change @OperatorName as needed<\/span>\r\n<span class=\"kwrd\">DECLARE<\/span> @OperatorName sysname = N<span class=\"str\">'SQLDBAGroup'<\/span>;\r\n\r\n<span class=\"rem\">-- Change @CategoryName as needed<\/span>\r\n<span class=\"kwrd\">DECLARE<\/span> @CategoryName sysname = N<span class=\"str\">'SQL Server Agent Alerts'<\/span>;\r\n\r\n<span class=\"rem\">-- Add Alert Category if it does not exist<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span> (<span class=\"kwrd\">SELECT<\/span> *\r\n               <span class=\"kwrd\">FROM<\/span> msdb.dbo.syscategories\r\n               <span class=\"kwrd\">WHERE<\/span> category_class = 2  <span class=\"rem\">-- ALERT<\/span>\r\n               <span class=\"kwrd\">AND<\/span> category_type = 3\r\n               <span class=\"kwrd\">AND<\/span> name = @CategoryName)\r\n    <span class=\"kwrd\">BEGIN<\/span>\r\n        <span class=\"kwrd\">EXEC<\/span> dbo.sp_add_category @<span class=\"kwrd\">class<\/span> = N<span class=\"str\">'ALERT'<\/span>, @type = N<span class=\"str\">'NONE'<\/span>, @name = @CategoryName;\r\n    <span class=\"kwrd\">END<\/span>\r\n\r\n<span class=\"rem\">-- Get the server name<\/span>\r\n<span class=\"kwrd\">DECLARE<\/span> @ServerName sysname = (<span class=\"kwrd\">SELECT<\/span> @@SERVERNAME);\r\n\r\n<span class=\"rem\">-- Alert Names start with the name of the server <\/span>\r\n<span class=\"kwrd\">DECLARE<\/span> @Sev19AlertName sysname = @ServerName + N<span class=\"str\">' Alert - Sev 19 Error: Fatal Error in Resource'<\/span>;\r\n<span class=\"kwrd\">DECLARE<\/span> @Sev20AlertName sysname = @ServerName + N<span class=\"str\">' Alert - Sev 20 Error: Fatal Error in Current Process'<\/span>;\r\n<span class=\"kwrd\">DECLARE<\/span> @Sev21AlertName sysname = @ServerName + N<span class=\"str\">' Alert - Sev 21 Error: Fatal Error in Database Process'<\/span>;\r\n<span class=\"kwrd\">DECLARE<\/span> @Sev22AlertName sysname = @ServerName + N<span class=\"str\">' Alert - Sev 22 Error Fatal Error: Table Integrity Suspect'<\/span>;\r\n<span class=\"kwrd\">DECLARE<\/span> @Sev23AlertName sysname = @ServerName + N<span class=\"str\">' Alert - Sev 23 Error: Fatal Error Database Integrity Suspect'<\/span>;\r\n<span class=\"kwrd\">DECLARE<\/span> @Sev24AlertName sysname = @ServerName + N<span class=\"str\">' Alert - Sev 24 Error: Fatal Hardware Error'<\/span>;\r\n<span class=\"kwrd\">DECLARE<\/span> @Sev25AlertName sysname = @ServerName + N<span class=\"str\">' Alert - Sev 25 Error: Fatal Error'<\/span>;\r\n<span class=\"kwrd\">DECLARE<\/span> @Error825AlertName sysname = @ServerName + N<span class=\"str\">' Alert - Error 825: Read-Retry Required'<\/span>;\r\n\r\n<span class=\"rem\">-- Sev 19 Error: Fatal Error in Resource<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span> (<span class=\"kwrd\">SELECT<\/span> name <span class=\"kwrd\">FROM<\/span> msdb.dbo.sysalerts <span class=\"kwrd\">WHERE<\/span> name = @Sev19AlertName)\r\n    <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_alert @name = @Sev19AlertName, \r\n                  @message_id=0, @severity=19, @enabled=1, \r\n                  @delay_between_responses=900, @include_event_description_in=1,\r\n                  @category_name = @CategoryName, \r\n                  @job_id=N<span class=\"str\">'00000000-0000-0000-0000-000000000000'<\/span>;\r\n\r\n<span class=\"rem\">-- Add a notification if it does not exist<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> *\r\n          <span class=\"kwrd\">FROM<\/span> dbo.sysalerts <span class=\"kwrd\">AS<\/span> sa\r\n          <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> dbo.sysnotifications <span class=\"kwrd\">AS<\/span> sn\r\n          <span class=\"kwrd\">ON<\/span> sa.id = sn.alert_id\r\n          <span class=\"kwrd\">WHERE<\/span> sa.name = @Sev19AlertName)\r\n    <span class=\"kwrd\">BEGIN<\/span>\r\n        <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_notification @alert_name = @Sev19AlertName, @operator_name=@OperatorName, @notification_method = 1;\r\n    <span class=\"kwrd\">END<\/span>\r\n\r\n<span class=\"rem\">-- Sev 20 Error: Fatal Error in Current Process<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span> (<span class=\"kwrd\">SELECT<\/span> name <span class=\"kwrd\">FROM<\/span> msdb.dbo.sysalerts <span class=\"kwrd\">WHERE<\/span> name = @Sev20AlertName)\r\n    <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_alert @name = @Sev20AlertName, \r\n                  @message_id=0, @severity=20, @enabled=1, \r\n                  @delay_between_responses=900, @include_event_description_in=1,\r\n                  @category_name = @CategoryName, \r\n                  @job_id=N<span class=\"str\">'00000000-0000-0000-0000-000000000000'<\/span>\r\n\r\n<span class=\"rem\">-- Add a notification if it does not exist<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> *\r\n          <span class=\"kwrd\">FROM<\/span> dbo.sysalerts <span class=\"kwrd\">AS<\/span> sa\r\n          <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> dbo.sysnotifications <span class=\"kwrd\">AS<\/span> sn\r\n          <span class=\"kwrd\">ON<\/span> sa.id = sn.alert_id\r\n          <span class=\"kwrd\">WHERE<\/span> sa.name = @Sev20AlertName)\r\n    <span class=\"kwrd\">BEGIN<\/span>\r\n        <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_notification @alert_name = @Sev20AlertName, @operator_name=@OperatorName, @notification_method = 1;\r\n    <span class=\"kwrd\">END<\/span>\r\n\r\n<span class=\"rem\">-- Sev 21 Error: Fatal Error in Database Process<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span> (<span class=\"kwrd\">SELECT<\/span> name <span class=\"kwrd\">FROM<\/span> msdb.dbo.sysalerts <span class=\"kwrd\">WHERE<\/span> name = @Sev21AlertName)\r\n    <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_alert @name = @Sev21AlertName, \r\n                  @message_id=0, @severity=21, @enabled=1, \r\n                  @delay_between_responses=900, @include_event_description_in=1,\r\n                  @category_name = @CategoryName, \r\n                  @job_id=N<span class=\"str\">'00000000-0000-0000-0000-000000000000'<\/span>;\r\n\r\n<span class=\"rem\">-- Add a notification if it does not exist<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> *\r\n          <span class=\"kwrd\">FROM<\/span> dbo.sysalerts <span class=\"kwrd\">AS<\/span> sa\r\n          <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> dbo.sysnotifications <span class=\"kwrd\">AS<\/span> sn\r\n          <span class=\"kwrd\">ON<\/span> sa.id = sn.alert_id\r\n          <span class=\"kwrd\">WHERE<\/span> sa.name = @Sev21AlertName)\r\n    <span class=\"kwrd\">BEGIN<\/span>\r\n        <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_notification @alert_name = @Sev21AlertName, @operator_name=@OperatorName, @notification_method = 1;\r\n    <span class=\"kwrd\">END<\/span>\r\n\r\n<span class=\"rem\">-- Sev 22 Error: Fatal Error Table Integrity Suspect<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span> (<span class=\"kwrd\">SELECT<\/span> name <span class=\"kwrd\">FROM<\/span> msdb.dbo.sysalerts <span class=\"kwrd\">WHERE<\/span> name = @Sev22AlertName)\r\n    <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_alert @name = @Sev22AlertName, \r\n                  @message_id=0, @severity=22, @enabled=1, \r\n                  @delay_between_responses=900, @include_event_description_in=1,\r\n                  @category_name = @CategoryName, \r\n                  @job_id=N<span class=\"str\">'00000000-0000-0000-0000-000000000000'<\/span>;\r\n\r\n<span class=\"rem\">-- Add a notification if it does not exist<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> *\r\n          <span class=\"kwrd\">FROM<\/span> dbo.sysalerts <span class=\"kwrd\">AS<\/span> sa\r\n          <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> dbo.sysnotifications <span class=\"kwrd\">AS<\/span> sn\r\n          <span class=\"kwrd\">ON<\/span> sa.id = sn.alert_id\r\n          <span class=\"kwrd\">WHERE<\/span> sa.name = @Sev22AlertName)\r\n    <span class=\"kwrd\">BEGIN<\/span>\r\n        <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_notification @alert_name = @Sev22AlertName, @operator_name=@OperatorName, @notification_method = 1;\r\n    <span class=\"kwrd\">END<\/span>\r\n\r\n<span class=\"rem\">-- Sev 23 Error: Fatal Error Database Integrity Suspect<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span> (<span class=\"kwrd\">SELECT<\/span> name <span class=\"kwrd\">FROM<\/span> msdb.dbo.sysalerts <span class=\"kwrd\">WHERE<\/span> name = @Sev23AlertName)\r\n    <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_alert @name = @Sev23AlertName, \r\n                  @message_id=0, @severity=23, @enabled=1, \r\n                  @delay_between_responses=900, @include_event_description_in=1,\r\n                  @category_name = @CategoryName, \r\n                  @job_id=N<span class=\"str\">'00000000-0000-0000-0000-000000000000'<\/span>;\r\n\r\n<span class=\"rem\">-- Add a notification if it does not exist<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> *\r\n          <span class=\"kwrd\">FROM<\/span> dbo.sysalerts <span class=\"kwrd\">AS<\/span> sa\r\n          <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> dbo.sysnotifications <span class=\"kwrd\">AS<\/span> sn\r\n          <span class=\"kwrd\">ON<\/span> sa.id = sn.alert_id\r\n          <span class=\"kwrd\">WHERE<\/span> sa.name = @Sev23AlertName)\r\n    <span class=\"kwrd\">BEGIN<\/span>\r\n        <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_notification @alert_name = @Sev23AlertName, @operator_name = @OperatorName, @notification_method = 1;\r\n    <span class=\"kwrd\">END<\/span>\r\n\r\n<span class=\"rem\">-- Sev 24 Error: Fatal Hardware Error<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span> (<span class=\"kwrd\">SELECT<\/span> name <span class=\"kwrd\">FROM<\/span> msdb.dbo.sysalerts <span class=\"kwrd\">WHERE<\/span> name = @Sev24AlertName)\r\n    <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_alert @name = @Sev24AlertName, \r\n                  @message_id=0, @severity=24, @enabled=1, \r\n                  @delay_between_responses=900, @include_event_description_in=1,\r\n                  @category_name = @CategoryName, \r\n                  @job_id=N<span class=\"str\">'00000000-0000-0000-0000-000000000000'<\/span>;\r\n\r\n<span class=\"rem\">-- Add a notification if it does not exist<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> *\r\n          <span class=\"kwrd\">FROM<\/span> dbo.sysalerts <span class=\"kwrd\">AS<\/span> sa\r\n          <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> dbo.sysnotifications <span class=\"kwrd\">AS<\/span> sn\r\n          <span class=\"kwrd\">ON<\/span> sa.id = sn.alert_id\r\n          <span class=\"kwrd\">WHERE<\/span> sa.name = @Sev24AlertName)\r\n    <span class=\"kwrd\">BEGIN<\/span>\r\n        <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_notification @alert_name = @Sev24AlertName, @operator_name = @OperatorName, @notification_method = 1;\r\n    <span class=\"kwrd\">END<\/span>\r\n\r\n<span class=\"rem\">-- Sev 25 Error: Fatal Error<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span> (<span class=\"kwrd\">SELECT<\/span> name <span class=\"kwrd\">FROM<\/span> msdb.dbo.sysalerts <span class=\"kwrd\">WHERE<\/span> name = @Sev25AlertName)\r\n    <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_alert @name = @Sev25AlertName, \r\n                  @message_id=0, @severity=25, @enabled=1, \r\n                  @delay_between_responses=900, @include_event_description_in=1, \r\n                  @category_name = @CategoryName,\r\n                  @job_id=N<span class=\"str\">'00000000-0000-0000-0000-000000000000'<\/span>;\r\n\r\n<span class=\"rem\">-- Add a notification if it does not exist<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> *\r\n          <span class=\"kwrd\">FROM<\/span> dbo.sysalerts <span class=\"kwrd\">AS<\/span> sa\r\n          <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> dbo.sysnotifications <span class=\"kwrd\">AS<\/span> sn\r\n          <span class=\"kwrd\">ON<\/span> sa.id = sn.alert_id\r\n          <span class=\"kwrd\">WHERE<\/span> sa.name = @Sev25AlertName)\r\n    <span class=\"kwrd\">BEGIN<\/span>\r\n        <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_notification @alert_name = @Sev25AlertName, @operator_name = @OperatorName, @notification_method = 1;\r\n    <span class=\"kwrd\">END<\/span>\r\n\r\n<span class=\"rem\">-- Error 825: Read-Retry Required<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span> (<span class=\"kwrd\">SELECT<\/span> name <span class=\"kwrd\">FROM<\/span> msdb.dbo.sysalerts <span class=\"kwrd\">WHERE<\/span> name = @Error825AlertName)\r\n    <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_alert @name = @Error825AlertName, \r\n                  @message_id=825, @severity=0, @enabled=1, \r\n                  @delay_between_responses=900, @include_event_description_in=1, \r\n                  @category_name = @CategoryName, \r\n                  @job_id=N<span class=\"str\">'00000000-0000-0000-0000-000000000000'<\/span>;\r\n\r\n<span class=\"rem\">-- Add a notification if it does not exist<\/span>\r\n<span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">NOT<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> *\r\n          <span class=\"kwrd\">FROM<\/span> dbo.sysalerts <span class=\"kwrd\">AS<\/span> sa\r\n          <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> dbo.sysnotifications <span class=\"kwrd\">AS<\/span> sn\r\n          <span class=\"kwrd\">ON<\/span> sa.id = sn.alert_id\r\n          <span class=\"kwrd\">WHERE<\/span> sa.name = @Error825AlertName)\r\n    <span class=\"kwrd\">BEGIN<\/span>\r\n        <span class=\"kwrd\">EXEC<\/span> msdb.dbo.sp_add_notification @alert_name = @Error825AlertName, @operator_name = @OperatorName, @notification_method = 1;\r\n    <span class=\"kwrd\">END<\/span>\r\n<span class=\"kwrd\">GO<\/span><\/pre>\n<pre class=\"csharpcode\"><\/pre>\n<pre class=\"csharpcode\"><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>This month the SQLskills team is presenting a series of blog posts aimed at helping Accidental\/Junior DBAs &#8216;keep the SQL Server lights on&#8217;. It&#8217;s a little taster to let you know what we cover in our\u00a0Immersion Event for The Accidental\/Junior DBA, which we present\u00a0several times each year. You can find all the other posts in [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[53],"class_list":["post-801","post","type-post","status-publish","format-standard","hentry","category-sql-server-agent-alerts","tag-accidental-dba"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Accidental DBA (Day 17 of 30): Configuring Alerts for High Severity Problems - Glenn Berry<\/title>\n<meta name=\"description\" content=\"Day 17 of a 30 day series for Accidental DBAs discusses configuration of SQL Server Agent Alerts for SQL Server workloads with Glenn Berry.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Accidental DBA (Day 17 of 30): Configuring Alerts for High Severity Problems - Glenn Berry\" \/>\n<meta property=\"og:description\" content=\"Day 17 of a 30 day series for Accidental DBAs discusses configuration of SQL Server Agent Alerts for SQL Server workloads with Glenn Berry.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/\" \/>\n<meta property=\"og:site_name\" content=\"Glenn Berry\" \/>\n<meta property=\"article:published_time\" content=\"2013-06-17T03:59:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-03-18T19:17:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb4.png\" \/>\n<meta name=\"author\" content=\"Glenn Berry\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Glenn Berry\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/\",\"name\":\"The Accidental DBA (Day 17 of 30): Configuring Alerts for High Severity Problems - Glenn Berry\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb4.png\",\"datePublished\":\"2013-06-17T03:59:36+00:00\",\"dateModified\":\"2019-03-18T19:17:48+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7\"},\"description\":\"Day 17 of a 30 day series for Accidental DBAs discusses configuration of SQL Server Agent Alerts for SQL Server workloads with Glenn Berry.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#primaryimage\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb4.png\",\"contentUrl\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb4.png\",\"width\":644,\"height\":419},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Accidental DBA (Day 17 of 30): Configuring Alerts for High Severity Problems\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/\",\"name\":\"Glenn Berry\",\"description\":\"Semi-random musings about SQL Server performance\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7\",\"name\":\"Glenn Berry\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g\",\"caption\":\"Glenn Berry\"},\"sameAs\":[\"https:\/\/www.sqlskills.com\/blogs\/glenn\/\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/author\/glenn\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Accidental DBA (Day 17 of 30): Configuring Alerts for High Severity Problems - Glenn Berry","description":"Day 17 of a 30 day series for Accidental DBAs discusses configuration of SQL Server Agent Alerts for SQL Server workloads with Glenn Berry.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/","og_locale":"en_US","og_type":"article","og_title":"The Accidental DBA (Day 17 of 30): Configuring Alerts for High Severity Problems - Glenn Berry","og_description":"Day 17 of a 30 day series for Accidental DBAs discusses configuration of SQL Server Agent Alerts for SQL Server workloads with Glenn Berry.","og_url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/","og_site_name":"Glenn Berry","article_published_time":"2013-06-17T03:59:36+00:00","article_modified_time":"2019-03-18T19:17:48+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb4.png","type":"","width":"","height":""}],"author":"Glenn Berry","twitter_misc":{"Written by":"Glenn Berry","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/","url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/","name":"The Accidental DBA (Day 17 of 30): Configuring Alerts for High Severity Problems - Glenn Berry","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb4.png","datePublished":"2013-06-17T03:59:36+00:00","dateModified":"2019-03-18T19:17:48+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7"},"description":"Day 17 of a 30 day series for Accidental DBAs discusses configuration of SQL Server Agent Alerts for SQL Server workloads with Glenn Berry.","breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#primaryimage","url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb4.png","contentUrl":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-content\/uploads\/2013\/06\/image_thumb4.png","width":644,"height":419},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/the-accidental-dba-day-17-of-30-configuring-alerts-for-high-severity-problems\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/glenn\/"},{"@type":"ListItem","position":2,"name":"The Accidental DBA (Day 17 of 30): Configuring Alerts for High Severity Problems"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/","name":"Glenn Berry","description":"Semi-random musings about SQL Server performance","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/glenn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7","name":"Glenn Berry","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g","caption":"Glenn Berry"},"sameAs":["https:\/\/www.sqlskills.com\/blogs\/glenn\/"],"url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/author\/glenn\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/posts\/801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/comments?post=801"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/posts\/801\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/media?parent=801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/categories?post=801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/tags?post=801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}