Sql-Server
如何在 SQL Server 中編寫警報腳本?
試用此腳本後:編寫所有警報的腳本 作者: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'