[SQL][問題處理]查看有哪些正在連接資料庫的應用程式

[SQL][問題處理]查看有哪些正在連接資料庫的應用程式

今天臨時收到一個求助的問題,朋友的 SQL Server 所在的磁碟滿了,而兇手是 SQL Server 的 Error Log 被塞爆了,每個 Error Log 差不多有 70~100GB,裡面出現的內容是本機有程式每秒鐘將近有 10 個連線,使用錯誤的帳號和密碼連接資料庫。因為 SQL Server 預設的登入稽核會紀錄有失敗的紀錄,異常的程式在不斷的嘗試聯線下,就產生大量的 Log 記錄下,因為當檔案越來越大,又有防毒程式會去監控讀寫,因此一陣子之後就會慢到不行,因此使用者就重新啟動主機,讓 SQL Server 因為重新啟動又產生一個新的 Error Log,可以繼續再使用一段時間。

image

 

基本上這樣的問題,如果是發生在 Windows Server 2008 / Windows 7 以上,那麼要查找出異常登入的程式還不算麻煩,可以透過「資源監視器」→「網路」→「TCP 連線」,來查看到底有哪些程式在連接本機的 SQL Server

image

 

就算是舊版本的 Windows 作業系統,那麼也可以透過「Netstat」的指令來查看,當我們使用 –ano 的參數的時候,我們可以看到本機 1433 有些連線的資訊,其中有一組狀態是 ESTABLISHED 的,會看到執行作業的 PID ( Process ID )

image

 

此時再去開啟工作管理員,在檢視的地方加入要顯示 PID 和映像路徑名稱的欄位

image

 

這樣就可以從 PID 知道到底是哪知作業在連接資料庫了。

image


 

上述的狀況都較為單純,但有些時候可能連接資料庫的程式有非常多,要去找出來是哪一隻是比較麻煩的狀況時,也可以透過兩個常用的工具來做處理。第一個是老字號的 Sysinternals 的 TCPView 的工具,也可以透過顏色可以提醒你哪個連線正在發生中或者是斷掉,但個人覺得比較的大的缺點是沒有過濾的功能,因此要是執行的程式多的時候還是很麻煩。

image

 

而我自己比較偏好的是使用 NirSoft 所製作的 CurrPorts 的工具程式,這個程式除了有提供相關的語系檔案,更棒的還可以有提供過濾和搜尋的功能,這樣當我們只要查看特定的來源或者是特定的 Port 的時候,就可以很容易的來查看了,這兩個都算是非常容易上手的工具程式。

image