Advertisements
This script are used to collect SpServerDiagnostics results on target server, when AG is not working.
Additional SP:
Sp1
USE [DBAdata]
GO
/****** Object: StoredProcedure [dbo].[usp_SpServerDiagnostics_new] Script Date: 15-04-2017 14:29:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
CREATE TABLE [dbo].[SpServerDiagnostics](
[create_time] [datetime] NULL,
[component_type] [sysname] NOT NULL,
[component_name] [sysname] NOT NULL,
[state] [int] NULL,
[state_desc] [sysname] NOT NULL,
[data] [nvarchar](max) NULL
)
*/
--DROP PROC [dbo].[usp_SpServerDiagnostics]
alter proc [dbo].[usp_SpServerDiagnostics_new]
(@Server_name varchar(50))
--with Encryption
as
begin
EXEC('Exec ['+@Server_name+'].MASTER.DBO.usp_SpServerDiagnostics')
END
GO
Sp2
USE [DBAdata]
GO
/****** Object: StoredProcedure [dbo].[usp_SpServerDiagnostics] Script Date: 15-04-2017 14:29:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
CREATE TABLE [dbo].[SpServerDiagnostics](
[create_time] [datetime] NULL,
[component_type] [sysname] NOT NULL,
[component_name] [sysname] NOT NULL,
[state] [int] NULL,
[state_desc] [sysname] NOT NULL,
[data] [nvarchar](max) NULL
)
*/
--DROP PROC [dbo].[usp_SpServerDiagnostics]
alter proc [dbo].[usp_SpServerDiagnostics]
--with Encryption
as
begin
DECLARE @server_name SYSNAME
DECLARE @DESC SYSNAME
DECLARE @text varchar(8000)
DECLARE @minrow int
DECLARE @maxrow int
--TRUNCATE TABLE SpServerDiagnostics
declare @Diagnostics table (id int primary key identity,
servername varchar(100),Description varchar(100))
insert into @Diagnostics
select Servername , Description from dbadata.dbo.dba_all_servers
-- usp_SpServerDiagnostics Object created only target server
WHERE Description in(
'sss'
)
-- select * from dbadata.dbo.dba_all_servers where ha like 'a%'
SELECT @minrow = MIN(id)FROM @Diagnostics
SELECT @maxrow = MAX(id) FROM @Diagnostics
while (@minrow <=@maxrow)
begin
BEGIN TRY
select @Server_name=Servername ,
@Desc=Description from @Diagnostics where ID = @minrow
EXEC('Exec ['+@Server_name+'].MASTER.DBO.usp_SpServerDiagnostics')
end try
BEGIN CATCH
SELECT @SERVER_NAME,ERROR_NUMBER() AS ErrorNumber,ERROR_MESSAGE() AS ErrorMessage;
insert into tbl_Error_handling
SELECT @SERVER_NAME,'AlwaysON_DIAGNOSTICS',[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
END
GO
SP3 On target sevrver
use master
go
CREATE TABLE SpServerDiagnosticsResult
(
create_time DateTime,
component_type sysname,
component_name sysname,
state int,
state_desc sysname,
data nvarchar(max)
);
go
-- select * from SpServerDiagnosticsResult
create proc usp_SpServerDiagnostics
as
begin
--truncate table SpServerDiagnosticsResult
INSERT INTO SpServerDiagnosticsResult
EXEC master.dbo.sp_server_diagnostics
delete from SpServerDiagnosticsResult where create_time > getdate()-10
end