快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

从SQL Server监视链接的SQL Server的组

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

介绍

本文的主要目的是了解如何从SQL Server监视一组链接的SQL Server。

在开始之前,我需要澄清一下:

  1. 本文利用了链接服务器技术和套接字编程,由于这些主题上还有其他文章,因此我将不再讨论。但是任何问题,错误和建议都是最欢迎的。
    尽管此主题的先决知识肯定会对您有所帮助,但这不是强制性的。
  2. 本文是关于如何执行监视的框架,因此您很有可能会有不同的想法。

用处

该项目可用于任何基本数据库监视。但是它是专为监视生产支持而设计的,其中监视数据库表中的某些数据。

我可以为银行领域提供一个示例,在该领域中应将某些交易按预定的时间表移至系统中。这些事务一旦移动,它们的状态就会在数据库中更新,并发送到停机系统。

在这里,我们可以设置此监视以检查事务是否已发送?否则,向生产支持人员发出警报!

监控架构师

对于任何基本监视系统,需要以下对象:

  1. 监视系统-监视系统并发出警报的对象
  2. 警报调度-用于监视系统的定期调度(第1点)
  3. 警报调度程序-调度警报
  4. 警报接收器-接收警报的系统

让我们看看SQL Server如何向我们提供上述对象以及我们需要开发哪些对象:

  1. SQL作业 -用于警报调度(第2点)
  2. 链接服务器功能 -用于监视系统(第1点)

其余组件调度警报和接收警报需要开发:

  • AlertDispatcher -这是基于控制台的简单套接字客户端,它将警报消息发送到侦听套接字服务器。
  • AlertReceive -这是一个基于MFC对话框的套接字应用程序,它显示发出的警报AlertDispatcher

设置监控系统

在开始监视任何服务器之前,我们需要将远程SQL服务器注册为链接服务器:

要添加链接服务器,可以根据身份验证方案使用以下给出的代码:

A. Windows Authentication:-

	EXEC sp_addlinkedserver
	@server = 'LinkName',
	@srvproduct = 'SQLServer OLEDB Provider',
	@provider = 'SQLOLEDB',
	@datasrc = 'ServerIP_OR_NAME'

	EXEC sp_addlinkedsrvlogin 'LinkName', 'true', null, null, null

B. Sql Authentication:-

	EXEC sp_addlinkedserver
		@server = 'LinkName',
		@srvproduct = 'SQLServer OLEDB Provider',
		@provider = 'SQLOLEDB',
		@datasrc = 'ServerIP_OR_NAME'

	EXEC sp_addlinkedsrvlogin 'LinkName', 'false', null, _
				'SQL_UserName', 'SQL_Password'

一旦完成了所有服务器的链接服务器设置,就可以使用以下查询检查连接性:

select * from OPENQUERY ( LinkName , 
'select top 1 * from sysobjects with (nolock) order by 1 desc' )

在上面的代码中,您将必须在结尾处将以下字符串替换为值:

  1. LinkName -是指链接服务器名称的任何名称,也可以与链接服务器名称相同!
  2. ServerIP_OR_NAME -是SQL Server的名称或IP地址。
  3. SQL_UserName -是链接服务器上的有效Sql用户,该服务器具有查询数据库的权限。
  4. SQL_Password -猜猜!什么…是的,您是对的,它是密码。

警报调度

设置链接服务器后,下一个作业是创建SQL作业。它将查询链接服务器以进行监视,并将警报传递给Alert Dispatcher。

作为代码的一部分提供的样本作业每小时都会查询服务器表中是否存在任何行。您可以重复使用示例作业来设置自己的作业。

为了维护Alert Receiver的列表,我们将创建一个表,其中包含以下信息:

Create Table MonitorIP
(
	IPAddress  varchar(25),
	Sent_flag bit,
	Port int
)

Insert into MonitorIP values
	('IP_WHERE_ALERT_RECEIVER_WILL_BE_RUNNING', 1, 1002)
Insert into MonitorIP values
	('IP_WHERE_ALERT_RECEIVER_WILL_BE_RUNNING', 1, 1002)

下面是放置在Job中的示例SQL逻辑,用于监视表中的数据存在。
注意:您的SQL查询可能与此不同。

按照计划触发作业时,将在Linked Server上执行此查询。此SQL查询执行以下两项操作:

  1. 它查询链接服务器并从中获取数据。
  2. 它检查行数是否大于一。如果找到,则借助AlertDispatcher.exe将警报分派给所有接收者。
/*

Author 			: Kuldip Rindani
Create Date		: 01-APR-2009
Purpose			: For Dispatching Sample Alert using AlertDispatcher.exe
Dependencies		: Script uses xp_cmdshell to execute a Exe.
			  therefore, it should be enabled on machine 
			  were monitoring is setup.
Modification History	:

*/

Declare @Row_Count int
Declare @ExePath varchar(255), @varMsg varchar(255), @varCmd varchar(2000)
Declare @IPAddress varchar(25), @Port varchar(10) 
--Path for exe Need to customize as per site setup.
Set @ExePath = 'C:\Monitoring\AlertDispatcher.exe'

--Remember below is sample query for monitoring, your could be different than it.
--Below query is for checking if any Data is present is table for filter columns.
select @Row_Count  = Row_Count from OpenQuery( LinkName, 
'

Select count(*) as Row_Count from Your_Database..Your_Tables with _
	(nolock) where Your_Columns = ''SOMEVALUE''
')

Set @varMsg = 'Date : ' + CAST(GETDATE() as varchar(50)) + ', _
	Alert for Your_Database..Your_Tables on Your_Server  = _
	' + CAST(Row_Count as varchar(10)) 

--Below is sample logic for send Alert when data is present in Your_Database..Your_Tables
IF @Row_Count > 0 
BEGIN
	--Loop through each Registered Alert Receiver and dispatch the message
	Declare C1 cursor For select IPAddress, Port from MonitorIP where sent_flag = 1
	Open C1
	Fetch Next From  C1 InTo @IPAddress, @Port
	While @@Fetch_Status <>-1
	Begin
		--Create the String for executing AlertDispatcher.exe utility.
		set  @varCmd = @ExePath + ' ' + @IPAddress + ' ' + _
			@Port + ' "' + @varMsg + '"'      

		exec master..xp_cmdshell @varCmd    

		Fetch Next From  C1 InTo @IPAddress, @Port
	End
	Close C1
	Deallocate C1
END

注意:不要忘记@ExePath 根据您的环境用Path 替换上面代码中的变量。

警报调度员

这是一个基于控制台的简单套接字客户端,它将警报消息发送到侦听套接字服务器。该实用程序接受以下命令行参数来发送消息:

  1. IP地址/机器名称
  2. TCP端口
  3. 要发送的消息。对于包含空格的消息,请记住将其包括在quotes(“)之间。

AlertDispatcher.exe可以按以下方式执行:

AlertDispatcher.exe localhost 1002 "DateTime, Test Message from AlertDispatcher"

警报接收器

这是一个基于MFC对话框的套接字应用程序,显示“发送警报” AlertDispatcher

该实用程序接受端口号作为命令行参数,以侦听来自Alert Dispatcher的传入消息。如果未提供,则默认端口号为1002

它期望警报消息是在格式“日期时间,警报消息”
DateTime Message 文本由逗号分隔。

警报接收器的样本输出

AlertReceive_Output.JPG

高于输出

最后,所有对象均已正确设置。现在,只需创建一个新作业来添加警报。同样,可以通过仅禁用相关的SQL作业来暂时禁用现有作业。

特别感谢我的同事Chaitanya Shah  ,他为Alert Dispatcher可执行文件编写了代码。

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1922638