2009-07-20 77 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服務器上真正工作。