2017-06-19 47 views
1

我們有多個SQL服務器,我們的前端連接到。我們需要測試來檢查哪些服務器在任何時候都處於脫機狀態。VBA測試連接到SQL Server

下面的代碼完全適用於在線SQL服務器,但是當測試脫機的代碼需要超過30秒的超時時間。我們需要這個超時更快,因爲這是將要定期

Function ConTEST() 

Dim conn As ADODB.Connection 
Set conn = New ADODB.Connection 
Dim strConnect As String 

strConnect = "DRIVER={SQL Server};SERVER=SERVER;UID=UID;PWD=PWD;APP=Microsoft® Windows® Operating System;DATABASE=DB_NAME" 

With conn 
.ConnectionString = strConnect 
.CommandTimeout = 5 
.ConnectionTimeout = 5 
.Open 
End With 

End Function 

運行如何解決此超時問題任何建議,將不勝感激檢查。

+0

產生線程定期爲你做這些檢查沒有意義嗎?這樣,30秒的超時不一定是件壞事。 – Fletchius

+0

我想如果在超時之前沒有連接,就會發生錯誤。也許一個簡單的錯誤處理程序檢查conn.State可能會這樣做。更詳細的方法:https://support.microsoft.com/en-us/help/167957/info-extracting-error-information-from-ado-in-vb – wazz

+0

感謝您的迴應 - 我以前曾嘗試過錯誤處理程序 - 不幸的是,每個服務器在出錯之前需要大約30秒的時間,這太長了。那麼理想的情況是有沒有辦法來加速這個錯誤? – TGChris

回答

0

如果它只是脫機服務器上的數據庫,然後連接到連接中的「主」數據庫,然後運行「DATABASEPROPERTYEX」函數以獲取要檢查的數據庫狀態。

Dim rs As New ADODB.Recordset 

With conn 
.ConnectionString = strConnect 
.CommandTimeout = 5 
.ConnectionTimeout = 5 
.Open 
Set rs = .Execute("select DATABASEPROPERTYEX('yourdb', 'Status') as db_status") 
Debug.Print rs(0).Value 
.Close 
End With 

如果整個服務器脫機時,您可能需要在命令行中ping服務器來代替。

+0

感謝您的迴應 - 它可能是整個服務器脫機 - 這臺服務器與其他機器的網絡都顯示有相同的IP地址,所以有關如何ping個人機器的任何建議? – TGChris

+0

你有沒有試過我建議的? ping從命令提示符使用基本的ping功能。我懷疑他們會讓整臺機器脫機。谷歌平,你會看到很多可以幫助你 –

+0

我沒有嘗試ping方法 - 使用本地服務器地址時,它工作正常,但使用全局IP地址時沒有響應。所以我不知道我們的路由器是否阻塞了ping。我曾嘗試通過爲sql服務器打開的端口號來ping全球IP地址,但這種端口號也無法正常工作...... – TGChris