This commit is contained in:
2024-03-07 16:52:14 +01:00
parent bb404b6ce6
commit 859a324c7e
203 changed files with 68602 additions and 0 deletions

View File

@@ -0,0 +1,224 @@
/*=============================================================================
Explication du traitement realise par le script
-------------------------------------------
1. Creation de la catégorie SQL Server Agent Alerts
2. Creation de l'opérateur DBA_operator
3. Creation de l'alerte Severité 19 Fatal Error in Resource
4. Creation de l'alerte Severité 20 Fatal Error in Current Process
5. Creation de l'alerte Severité 21 Fatal Error in Database Process
6. Creation de l'alerte Severité 22 Fatal Error Table Integrity Suspect
7. Creation de l'alerte Severité 23 Fatal Error Database Integrity Suspect
8. Creation de l'alerte Severité 24 Fatal Hardware Error
9. Creation de l'alerte Severité 25 Fatal Error
10. Création de l'alerte de l'erreur 825 Read-Retry Required
Creation : 06.06.2018 / FLA
Modifications : 17.03.2022 - FLA : Change DBA mail
=============================================================================*/
USE [msdb];
/* Add categorie for SQL Server Agent Alerts */
DECLARE @CategoryName sysname,
@OperatorName sysname,
@AlertName sysname
SET @CategoryName = N'SQL Server Agent Alerts';
SET @OperatorName = N'DBA_operator'
IF NOT EXISTS (SELECT *
FROM msdb.dbo.syscategories
WHERE category_class = 2 /*2=Alert*/
AND category_type = 3
AND name = @CategoryName)
BEGIN
EXEC dbo.sp_add_category @class = N'ALERT', @type = N'NONE', @name = @CategoryName;
END
/* Add operator DBA_operator for SQL Server Agent Alerts */
IF EXISTS (SELECT name FROM msdb.dbo.sysoperators WHERE name = N'DBA_operator')
EXEC msdb.dbo.sp_delete_operator @name=N'DBA_operator'
EXEC msdb.dbo.sp_add_operator @name=N'DBA_operator',
@enabled=1,
@weekday_pager_start_time=90000,
@weekday_pager_end_time=180000,
@saturday_pager_start_time=90000,
@saturday_pager_end_time=180000,
@sunday_pager_start_time=90000,
@sunday_pager_end_time=180000,
@pager_days=0,
@email_address=N'Gal_SE_DBA@galenica.com',
@category_name=N'[Uncategorized]'
SET @AlertName = 'DBA - Sev 19 Error: Fatal Error in Resource'
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=19,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 20 Error: Fatal Error in Current Process'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=20,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 21 Error: Fatal Error in Database Process'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=21,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 22 Error: Fatal Error Table Integrity Suspect'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=22,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 23 Error: Fatal Error Database Integrity Suspect'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=23,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 24 Error: Fatal Hardware Error'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=24,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 25 Error: Fatal Error'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=25,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Error 825: Read-Retry Required'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=825,
@severity=0,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;

View File

@@ -0,0 +1,24 @@
USE [msdb]
GO
DECLARE @namespace NVARCHAR(255)
= N'\\.\root\Microsoft\SqlServer\ServerEvents\' + COALESCE
(
CONVERT(NVARCHAR(32), SERVERPROPERTY('InstanceName')),
N'MSSQLSERVER'
);
IF NOT EXISTS(SELECT 1 FROM msdb.dbo.sysalerts WHERE [name] = N'DBA - Audit Login')
BEGIN
EXEC msdb.dbo.sp_add_alert @name=N'DBA - Audit Login',
@message_id=0,
@severity=0,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=0,
@category_name=N'[Uncategorized]',
@wmi_namespace= @namespace,
@wmi_query=N'SELECT * FROM AUDIT_LOGIN_FAILED',
@job_name=N'_92020 - Audit Login'
END
GO

View File

@@ -0,0 +1,358 @@
/* Update blocked process threshold */
exec master.dbo.sp_configure 'show advanced option', 1;
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'blocked process threshold', 10 ---- CHANGE HERE !!
exec master.dbo.sp_configure 'show advanced option', 0;
RECONFIGURE WITH OVERRIDE
GO
/* Add table to store alert report*/
USE [HCITools]
GO
IF NOT EXISTS ( SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[BlockingSessionInfo]')
AND type in ( N'U' ))
BEGIN
CREATE TABLE [dbo].[BlockingSessionInfo] (
[SessionInfoId] [int] IDENTITY(1, 1) NOT NULL,
[AlertTime] [datetime2](0) NOT NULL,
[BlockingDetails] [xml] NULL,
[MailNotification] [BIT] NOT NULL
DEFAULT 0,
CONSTRAINT [PK_BlockingSessionInfo]
PRIMARY KEY CLUSTERED ([SessionInfoId] ASC)) ON [PRIMARY]
END
GO
USE [msdb]
GO
/* Deploy job for alert response */
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'_92050 - Response - Blocked Process Event'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'_92050 - Response - Blocked Process Event')
EXEC msdb.dbo.sp_delete_job @job_name = N'_92050 - Response - Blocked Process Event', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Monitoring' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Monitoring'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'_92050 - Response - Blocked Process Event',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'16.11.2018 : RTC Store Blocking session report details and send notification to DBA only every 2 minutes and during opening hours.',
@category_name=N'DBA-Monitoring',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Insert Blocking info',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=5,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'INSERT INTO dbo.BlockingSessionInfo (
AlertTime,
BlockingDetails
)
VALUES (
GETDATE(),
''$(ESCAPE_NONE(WMI(TextData)))''
)',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send blocking session report if needed',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=5,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'DECLARE @reportXml XML;
DECLARE @XmlToString NVARCHAR(MAX);
DECLARE @path NVARCHAR(4000);
SET @reportXml = CONVERT(XML, N''$(ESCAPE_SQUOTE(WMI(TextData)))'', 1);
SET @XmlToString = CONVERT(NVARCHAR(MAX), @reportXml);
/* Elapse time since last mail sent in seconds*/
DECLARE @elapseTime AS INT;
SELECT @elapseTime = 0;
SELECT TOP 1
@elapseTime = DATEDIFF(SECOND, AlertTime, GETDATE())
FROM HCITools.dbo.BlockingSessionInfo
WHERE MailNotification = 1
ORDER BY AlertTime DESC;
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = ''Arizona'')
BEGIN
IF (Arizona.dbo.aps_fn_Is_working_hour(GETDATE(), NULL, NULL) = 1)
AND
(
@elapseTime >= 120
OR NOT EXISTS
(
SELECT 1
FROM HCITools.dbo.BlockingSessionInfo
WHERE MailNotification = 1
)
)
BEGIN
EXEC [Arizona].[dbo].[aps_Send_Mail_with_template] @in_param_varchar_2 = ''DBA_operator'',
-- ,@in_param_varchar_3 =@XmlToString -- ''A session blocked has occured in SQL Server. Attached you will find the lock graph.''
@in_param_message = @XmlToString,
@in_job_type = 3;
UPDATE TOP (1)
HCITools.dbo.BlockingSessionInfo
SET MailNotification = 1
WHERE SessionInfoId IN
(
SELECT TOP 1
SessionInfoId
FROM HCITools.dbo.BlockingSessionInfo
ORDER BY AlertTime DESC
);
END;
END;
;
',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=5,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''_92050 - Response - Blocked Process Event'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE '_92050%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
/* Add categorie for SQL Server Agent Alerts */
DECLARE @CategoryName sysname,
@AlertName sysname
SET @CategoryName = N'SQL Server Agent Alerts';
IF NOT EXISTS (SELECT *
FROM msdb.dbo.syscategories
WHERE category_class = 2 /*2=Alert*/
AND category_type = 3
AND name = @CategoryName)
BEGIN
PRINT 'Add Category SQL Server Agent Alerts'
EXEC dbo.sp_add_category @class = N'ALERT', @type = N'NONE', @name = @CategoryName;
END
/****** Alert [DBA - WMI:Respond to Blocking session] ******/
SET @AlertName = 'DBA - WMI:Respond to Blocking session'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name= @AlertName
GO
DECLARE @CategoryName sysname,
@AlertName sysname
SET @CategoryName = N'SQL Server Agent Alerts';
SET @AlertName = 'DBA - WMI:Respond to Blocking session'
DECLARE @namespace NVARCHAR(200);
IF (SERVERPROPERTY('InstanceName') IS NOT NULL)
BEGIN
SELECT @namespace = N'\\.\root\Microsoft\SqlServer\ServerEvents\'
+ CONVERT(NVARCHAR(128), SERVERPROPERTY('InstanceName'));
END;
ELSE
BEGIN
DECLARE @InstanceName SYSNAME
SET @InstanceName = CONVERT(VARCHAR(128),ISNULL(SERVERPROPERTY ('InstanceName'),'MSSQLSERVER'))
SELECT @namespace = N'\\.\root\Microsoft\SqlServer\ServerEvents\' + @InstanceName;
END;
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=0,
@enabled=1,
@delay_between_responses=10,
@include_event_description_in=5,
@category_name=@CategoryName,
@wmi_namespace=@namespace,
@wmi_query=N'SELECT * FROM BLOCKED_PROCESS_REPORT',
@job_name=N'_92050 - Response - Blocked Process Event'
GO

View File

@@ -0,0 +1,48 @@
USE [msdb]
GO
-- delete operator
IF EXISTS (SELECT name FROM msdb.dbo.sysoperators WHERE name = N'DBA operator')
EXEC msdb.dbo.sp_delete_operator @name=N'DBA operator'
GO
USE [msdb]
GO
-- Create operator
EXEC msdb.dbo.sp_add_operator @name=N'DBA operator',
@enabled=1,
@weekday_pager_start_time=90000,
@weekday_pager_end_time=180000,
@saturday_pager_start_time=90000,
@saturday_pager_end_time=180000,
@sunday_pager_start_time=90000,
@sunday_pager_end_time=180000,
@pager_days=0,
@email_address=N'Gal_SE_DBA@galenica.com',
@category_name=N'[Uncategorized]'
GO
USE [msdb]
GO
-- delete Alerte
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = N'DBA - Broker - Too many messages in queue')
EXEC msdb.dbo.sp_delete_alert @name=N'DBA - Broker - Too many messages in queue'
GO
USE [msdb]
GO
-- create alert
EXEC msdb.dbo.sp_add_alert @name=N'DBA - Broker - Too many messages in queue',
@message_id=0,
@severity=0,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@performance_condition=N'MSSQL$APSSQL:Broker Statistics|Enqueued Messages Total||>|50',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

View File

@@ -0,0 +1,437 @@
USE [msdb];
GO
IF NOT EXISTS (SELECT 1 FROM master.cfg.InstanceContext WHERE Business IN ('TPPHAR','TPCENT'))
BEGIN
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = 'distribution')
BEGIN
DECLARE @OperatorName sysname,
@AlertName sysname;
SET @OperatorName = N'DBA_operator';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysoperators
WHERE name = @OperatorName)
EXEC msdb.dbo.sp_add_operator @name = @OperatorName,
@enabled = 1,
@weekday_pager_start_time = 90000,
@weekday_pager_end_time = 180000,
@saturday_pager_start_time = 90000,
@saturday_pager_end_time = 180000,
@sunday_pager_start_time = 90000,
@sunday_pager_end_time = 180000,
@pager_days = 0,
@email_address = N'Gal_SE_DBA@galenica.com',
@category_name = N'[Uncategorized]';
SET @AlertName = 'Replication Warning: Transactional replication latency (Threshold: latency)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14161,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Subscription expiration (Threshold: expiration)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14160,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Slow merge over LAN connection (Threshold: mergefastrunspeed)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14164,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Slow merge over dialup connection (Threshold: mergeslowrunspeed)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14165,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Long merge over LAN connection (Threshold: mergefastrunduration)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14162,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Long merge over dialup connection (Threshold: mergeslowrunduration)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14163,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: agent custom shutdown';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 20578,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: agent failure';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14151,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: agent retry';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14152,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: agent success';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14150,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: expired subscription dropped';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14157,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: Subscriber has failed data validation';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 20574,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: Subscriber has passed data validation';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 20575,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: Subscription reinitialized after validation failure';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 20572,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
END;
END;
GO