存储如何判断是否能连接服务器

einspei 2010-10-14 08:50:26
C# + SP,怎么写
我需要实现一个功能:检查各个服务器的system Event是否正常。现在的问题是假如有100个服务器,中间一个无法连接,中间就会卡住,最后也不会反馈结果。解决坏服务器干扰的问题,我的思路有两个:
1. 写一个SP,在里面首先查找出所有的服务器,然后check,排除掉无法连接的,留下那些可以连接的服务器,然后在C#中执行SP即可(都是可连接的服务器,不会断掉)。
2. 直接在C#中加时间判断,如果连接某服务器超过×时,那就跳过,继续下一个。

这两个思路对我来说各有困难:
1. 如何判断服务器是否能够连接成功,在存储里面写,或者在C#中写
2. 时间判断如何写

最好代码举例,理论谁都会说。
...全文
140 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevn 2010-10-15
  • 打赏
  • 举报
回复
学习。。
王向飞 2010-10-15
  • 打赏
  • 举报
回复
我也是用ping的方法。。看能否返回结果,可以根据这个结果灵活的给出出错提示:
比如 无法ping通,请检查防火墙。
能ping通,请检查端口号==
glint 2010-10-14
  • 打赏
  • 举报
回复
功能比较复杂的SP,建议使用SQL CLR实现
billpu 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liangck 的回复:]

能ping不一定能连,
能连不一定能ping.
[/Quote]
恩 是呀 那个也是没有办法的办法,不得已而借用操作系统的层面去解决问题,我也想过用telnet 1433的方式去获取信息,但是那样实测下来效果不太好.其实前台做程序可能更简单点,比如通过ado的connection.state判断对象的连接状态.直接连接数据库效果更有说服力了.呵呵 不过从数据库层面来说 也是一个不严谨(受网络环境和软件环境的影响)的解决办法
liangCK 2010-10-14
  • 打赏
  • 举报
回复
能ping不一定能连,
能连不一定能ping.
obuntu 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 billpu 的回复:]

我以前写过一个存储过程给你参考一下
原理
1 定义一个表,列出所有需要ping的服务器的ip地址
2 定义游标用xp_cmdshell ping那些服务器地址
3 获取过滤ping返回的关键字,判断服务器处于连接或非连接状态
4 记录结果

建议如果你要自己设定时间,可以利用ping的 -w参数 单位是毫秒,我用的是100也就是0.1秒(我这边电脑多 呵呵)也就是数据包的时间间隔,……
[/Quote]

学习。
billpu 2010-10-14
  • 打赏
  • 举报
回复
我以前写过一个存储过程给你参考一下
原理
1 定义一个表,列出所有需要ping的服务器的ip地址
2 定义游标用xp_cmdshell ping那些服务器地址
3 获取过滤ping返回的关键字,判断服务器处于连接或非连接状态
4 记录结果

建议如果你要自己设定时间,可以利用ping的 -w参数 单位是毫秒,我用的是100也就是0.1秒(我这边电脑多 呵呵)也就是数据包的时间间隔,程序我就不改了你自己稍做修改即可

CREATE PROC query_poweroff 

AS

SET NOCOUNT ON

declare @sql varchar(500),@hostname nchar(128),@id INT

create table #ip(hostname nchar(16),a varchar(100),hostmachine VARCHAR(50))

declare tb cursor local for select [ip] from [dhcp] WHERE ([hostname] NOT LIKE '4%') AND (hostname NOT LIKE '6%') --这里是我的网络表情况,因为我要监控多台服务器,你可以改成你的表格

open tb

fetch next from tb into @hostname

while @@fetch_status=0

BEGIN

set @sql='ping '+@hostname+' -a -n 1 -l 1 -w 100'

insert #ip(a) exec master..xp_cmdshell @sql

update #ip set hostname=@hostname where hostname is NULL

DELETE FROM #ip WHERE CHARINDEX('request',a)<1 AND CHARINDEX('reply',a)<1 OR a IS NULL

fetch next from tb into @hostname

END

INSERT record (ip,result) SELECT hostname,

CASE WHEN CHARINDEX('request',a)<1 THEN 1 --0为没关机 , 1为关机

ELSE 0

END

FROM #ip

--SELECT * FROM #ip

DROP TABLE #ip

SET NOCOUNT OFF

GO



27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧