Advertisements
This script will check the database mirror status and notify an alert when the mirror is not working and disconnected.
Table:
use DBAdata go drop table [tbl_DB_mirroring_status] CREATE TABLE [dbo].[tbl_DB_mirroring_status]( [name] [sysname] NOT NULL, [principal_server_name] [nvarchar](128) NULL, [mirroring_role_desc] [nvarchar](60) NULL, [mirroring_partner_name] [nvarchar](128) NULL, [mirroring_witness_name] [nvarchar](128) NULL, [mirroring_state_desc] [nvarchar](60) NULL, [mirroring_witness_state_desc] [nvarchar](60) NULL, [upload_date] [datetime] NOT NULL ) use DBAdata_archive go drop table [tbl_DB_mirroring_status] CREATE TABLE [dbo].[tbl_DB_mirroring_status]( [name] [sysname] NOT NULL, [principal_server_name] [nvarchar](128) NULL, [mirroring_role_desc] [nvarchar](60) NULL, [mirroring_partner_name] [nvarchar](128) NULL, [mirroring_witness_name] [nvarchar](128) NULL, [mirroring_state_desc] [nvarchar](60) NULL, [mirroring_witness_state_desc] [nvarchar](60) NULL, [upload_date] [datetime] NOT NULL )
SP:
/*
use DBAdata
go
drop table [tbl_DB_mirroring_status]
CREATE TABLE [dbo].[tbl_DB_mirroring_status](
[name] [sysname] NOT NULL,
[principal_server_name] [nvarchar](128) NULL,
[mirroring_role_desc] [nvarchar](60) NULL,
[mirroring_partner_name] [nvarchar](128) NULL,
[mirroring_witness_name] [nvarchar](128) NULL,
[mirroring_state_desc] [nvarchar](60) NULL,
[mirroring_witness_state_desc] [nvarchar](60) NULL,
[upload_date] [datetime] NOT NULL
)
use DBAdata_archive
go
drop table [tbl_DB_mirroring_status]
CREATE TABLE [dbo].[tbl_DB_mirroring_status](
[name] [sysname] NOT NULL,
[principal_server_name] [nvarchar](128) NULL,
[mirroring_role_desc] [nvarchar](60) NULL,
[mirroring_partner_name] [nvarchar](128) NULL,
[mirroring_witness_name] [nvarchar](128) NULL,
[mirroring_state_desc] [nvarchar](60) NULL,
[mirroring_witness_state_desc] [nvarchar](60) NULL,
[upload_date] [datetime] NOT NULL
)
*/
use DBAdata
go
-- DROP PROC [Usp_DB_Mirror_Monitoring]
alter proc [dbo].Usp_DB_Mirror_Monitoring
/*
Summary: DB mirroring status
Contact: Muthukkumaran Kaliyamoorthy SQL DBA
Description: DB mirroring status alert
ChangeLog:
Date Coder Description
2013-jan-21 Muthukkumaran Kaliyamoorthy Updated the 2012 functionality
*/
--with Encryption
as
begin
DECLARE @server_name SYSNAME
DECLARE @DESC SYSNAME
DECLARE @sql varchar(8000)
DECLARE @minrow int
DECLARE @maxrow int
TRUNCATE TABLE tbl_DB_mirroring_status
declare @DB_mirror table (id int primary key identity,
servername varchar(100),Description varchar(100))
insert into @DB_mirror
select Servername , Description from dbadata.dbo.dba_all_servers
--WHERE ha like'DB_mirror'
where Version not in ('sql2000')
and SVR_status ='running'
--select * from dbadata.dbo.dba_all_servers
SELECT @minrow = MIN(id)FROM @DB_mirror
SELECT @maxrow = MAX(id) FROM @DB_mirror
while (@minrow <=@maxrow)
begin
BEGIN TRY
select @Server_name=Servername ,
@Desc=Description from @DB_mirror where ID = @minrow
set @sql=
'EXEC(''SELECT * from OPENQUERY(['+@server_name+'],
''''SELECT a.name,@@servername as principal_server_name,b.mirroring_role_desc,
b.mirroring_partner_name,b.mirroring_witness_name,b.mirroring_state_desc,b.mirroring_witness_state_desc, getdate() as upload_date
FROM
sys.databases A
INNER JOIN sys.database_mirroring B
ON A.database_id=B.database_id
WHERE a.database_id > 4
--and mirroring_state_desc not like ''''''''SY%''''''''
ORDER BY A.NAME
'''')'')
'
insert into dbadata.dbo.tbl_DB_mirroring_status
exec(@sql)
--SELECT @sql
end try
BEGIN CATCH
SELECT @SERVER_NAME,ERROR_NUMBER() AS ErrorNumber,ERROR_MESSAGE() AS ErrorMessage;
insert into tbl_Error_handling
SELECT @SERVER_NAME,'DB_mirror',[Error_Line] = ERROR_LINE(),[Error_Number] = ERROR_NUMBER(),
[Error_Severity] = ERROR_SEVERITY(),[Error_State] = ERROR_STATE(),
[Error_Message] = ERROR_MESSAGE(),GETDATE()
END CATCH
set @minrow =@minrow +1
end
----------------------------------------------------------------
--Send an email to DBA team
-----------------------------------------------------------------
DECLARE @principal_server_name varchar(100)
DECLARE @DBname varchar(100)
DECLARE @mirroring_state_desc varchar(100)
DECLARE @mirroring_witness_state_descs varchar(100)
DECLARE @Role varchar(100)
--SELECT * FROM dbadata.dbo.tbl_alwayson_monitoring
IF EXISTS (
SELECT 1 FROM dbadata.dbo.tbl_DB_mirroring_status
where mirroring_state_desc not like 'SY%'
)
begin
DECLARE DBmirror_CuR CURSOR FOR
-- select * FROM dbadata.dbo.tbl_DB_mirroring_status
SELECT principal_server_name,name,mirroring_state_desc,mirroring_witness_state_desc
FROM dbadata.dbo.tbl_DB_mirroring_status
where mirroring_state_desc not like 'SY%'
OPEN DBmirror_CuR
FETCH NEXT FROM DBmirror_CuR
INTO @principal_server_name,@DBname,@mirroring_state_desc, @mirroring_witness_state_descs
DECLARE @BODY1 VARCHAR(max)
SET @BODY1= '<font size=2 color=#C35817 face=''verdana''><B>Followings are Database Mirroring Status:</b> </font>
<P>
<font size=1 color=#FF00FF face=''verdana''>
<Table border=5 width=1000 bgcolor=#ECE5B6 cellpadding=1 style="color:#7E2217;font-face:verdana;font-size:12px;">
<b> <tr bgcolor=#8A4117 align=center style="color:#FFFFFF;font-weight:bold">
<td width=600 color=white>Principal Server</td>
<td width=600 color=white>DB Name</td>
<td width=600 color=white>Mirroring State</td>
<td width=600 color=white>Mirroring witness State</td>
</b>
</tr>'
WHILE @@FETCH_STATUS=0
BEGIN
SET @BODY1= @BODY1 +'<tr>
<td>'+ISNULL(@principal_server_name,' ')+'</td>'+
'<td align=center>'+ISNULL(@DBname,' ')+'</td>'+
'<td align=center>'+ISNULL(@mirroring_state_desc,' ')+'</td>'+
'<td align=center>'+ISNULL(@mirroring_witness_state_descs,' ')+'</td>'
FETCH NEXT FROM DBmirror_CuR
INTO @principal_server_name,@DBname,@mirroring_state_desc, @mirroring_witness_state_descs
END
SET @BODY1=@BODY1+'</Table> </p>
<p>
<font style="color:#7E2217;font-face:verdana;font-size:9px;"> Generated on '
+convert(varchar(30),getdate(),100)+'. </BR>
This is an auto generated mail by DBA Team. If you receive this email by mistake please contact us.
</br>
© Property of DBA Team.
</font>'
CLOSE DBmirror_CuR
DEALLOCATE DBmirror_CuR
DECLARE @EMAILIDS VARCHAR(500)
SELECT @EMAILIDS=
COALESCE(@EMAILIDS+';','')+EMAIL_ADDRESS
FROM DBADATA.dbo.DBA_ALL_OPERATORS WHERE name ='muthu' and STATUS =1
DECLARE @EMAILIDS1 VARCHAR(500)
--SELECT @EMAILIDS1= 'dba@abcd.com'
EXEC MSDB.DBO.SP_SEND_DBMAIL @RECIPIENTS=@EMAILIDS,
@SUBJECT = 'DBA: Database Mirroring Status',
@BODY = @BODY1,
@copy_recipients=@EMAILIDS1,
@BODY_FORMAT = 'HTML' ,@PROFILE_NAME='muthu';
--select @BODY1
-------------------------------------------------------
end
insert into DBAdata_Archive.dbo.[tbl_DB_mirroring_status]
select * from DBAdata.dbo.[tbl_DB_mirroring_status]
END
--select * from DBAdata_Archive.dbo.tbl_alwayson_monitoring