Sql-Server

如何在 SQL Server 中編寫警報腳本?

  • June 6, 2017

試用此腳本後:編寫所有警報的腳本 作者:Carolyn Richardson

甚至是傳統的 ssms 方式 -> 右鍵點擊 -> 腳本警報為

這些方法都不是完全全面的,因為它們遺漏了警報中的資訊,例如它呼叫的作業等。

例如我一直在設置故障轉移警報

正如您在下面的腳本中看到的那樣,我設置了許多操作:

-- 1480 - AG Role Change (failover)
EXEC msdb.dbo.sp_add_alert
       @name = N'AG Role Change',
       @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'AG Role Change', 
       @operator_name = N'<OperatorName,sysname,Alerts>', 
       @notification_method = <Notification,INT,1>; 
GO

在此處輸入圖像描述

有沒有辦法將所有這些資訊與警報一起編寫腳本?

我能夠編寫出所有屬性。

  • 打開 SSMS
  • 右鍵點擊作業
  • 點擊屬性
  • 使用頂部的腳本按鈕

我創建了一個具有許多功能的測試作業。

在此處輸入圖像描述 在此處輸入圖像描述 在此處輸入圖像描述

這是我編寫腳本時得到的。

USE [msdb]
GO
EXEC msdb.dbo.sp_update_alert @name=N'Blocked Tasks > 5', 
       @message_id=0, 
       @severity=0, 
       @enabled=1, 
       @delay_between_responses=183, 
       @include_event_description_in=3, 
       @database_name=N'', 
       @notification_message=N'This is a test', 
       @event_description_keyword=N'', 
       @performance_condition=N'Workload Group Stats|Blocked tasks|default|>|5', 
       @wmi_namespace=N'', 
       @wmi_query=N'', 
       @job_id=N'b97f9d4d-a22d-4745-9d19-9fadd168b4b1'
GO
EXEC msdb.dbo.sp_update_notification 
     @alert_name=N'Blocked Tasks > 5', 
     @operator_name=N'sysadmin', 
     @notification_method = 1
GO

我執行了一個擴展的事件跟踪來查看呼叫了什麼。我將 select 語句更改select *為查看所有值。

EXEC Sp_executesql 
N'  create table #tmp_sp_help_alert  (id int null, name nvarchar(128) null,  event_source nvarchar(100) null, event_category_id int null, event_id int null, message_id int null,  severity int null, enabled tinyint null, delay_between_responses int null, last_occurrence_date int null, last_occurrence_time int null, last_response_date int null, last_response_time int null, notification_message nvarchar(512) null, include_event_description tinyint null, database_name nvarchar(128) null, event_description_keyword nvarchar(100) null, occurrence_count int null, count_reset_date int null, count_reset_time int null, job_id uniqueidentifier null, job_name nvarchar(128) null, has_notification int null, flags int null, performance_condition nvarchar(512) null, category_name nvarchar(128) null,  wmi_namespace nvarchar(max) null,  wmi_query nvarchar(max) null, type int null)   insert into #tmp_sp_help_alert exec msdb.dbo.sp_help_alert         



SELECT * FROM #tmp_sp_help_alert AS tsha WHERE (tsha.name=@_msparam_0)   drop 
 table #tmp_sp_help_alert', 
   N'@_msparam_0 nvarchar(4000)', 
   @_msparam_0=N'Blocked Tasks > 5' 

引用自:https://dba.stackexchange.com/questions/175540