2009-07-20 65 views
1

有没有一种'很好的方式来检查网络主机是否启动 利用'普通'SQL?我想到了一些特定于MS-SQL的 命令,或者也许是从服务器本身的ping脚本 获取返回值。MS SQL ping外部服务器

有没有人有这个想法?

+0

的问题是:为什么* *你想做到这一点? – Tomalak 2009-07-20 13:45:11

+0

我的SQL服务器存储指向我的外部FTP服务器提供的内容的链接。我希望我的服务器检查所有X分钟是否ftp框已启动,如果不是运行更新并将相关内容标记为“temp”。无法使用'。 – KB22 2009-07-20 13:53:24

+0

不应该在应用程序层而不是数据库层完成此操作吗? – Tomalak 2009-07-20 13:55:27

回答

1

有两种可能的方式把你的答案是:你要知道,如果一个SQL服务器的任意主机
2.您希望使用一些查询从SQL服务器ping一个任意主机上运行 1。

  1. 你可以使用dariom的答案。 1a。如果您想从另一个SQL Server查询一个SQL Server,最好使用SQL Server的“Linked Servers”功能。

  2. 您可以使用master.dbo.xp_cmdshell存储过程来执行PING,然后将结果作为文本行和状态码返回。

EXEC master.dbo.xp_cmdshell '平192.168.1.1'

-1

我假设你的意思是“普通” SQL,而不是“佩林” :-)

如果你想看看SQL是在主机上运行,​​你可以尝试通过使用连接到SQL Browser ServiceSSRP (SQL Server Resolution Protocol)(但这需要在服务器上安装并运行)。

你可以尝试一个“最佳猜测”的方法,并建立到端口1433(默认端口SQL Server的数据库引擎)的TCP连接。如果端口处于打开状态,则可能是SQL Server正在侦听 - 然后您可以尝试连接到SQL Server并执行命令(如SELECT @@VERSION或特定于您的应用程序的某个内容)。这种方法的问题:

  • SQL Server数据库引擎可以配置为使用非标准的TCP端口。
  • SQL Server甚至可能不使用TCP - 你必须使用命名管道进行连接(我不知道这是如何完成的)。
  • 其他一些服务可以配置为使用TCP端口1433.这并不意味着SQL Server正在侦听。
  • 如果1433端口已打开并被SQL Server使用,则需要提供凭据以连接并执行命令。

从本质上讲,最好的猜测方法只能在你控制的SQL服务器上真正工作。