在做數據庫遷移或其他維護的時候,需要應用端暫停訪問,我們可以通過視圖查看到連接到數據的ip,對于ADO.NET訪問的話,我們還可以查看到連接過來的應用名稱,但是對于java程序使用JDBC來訪問時,我們就很難知道具體是哪個應用程序在訪問我們的數據庫,尤其是應用服務器上運行著很多的應用的時候,我們該如何去做呢?
--=============================================
首先對于ADO.NET的訪問,通過以下代碼
SELECT [net_ip].session_id , [net_ip].connect_time , [net_ip].net_transport , [net_ip].client_net_address , [net_ip].client_tcp_port , SE.host_PRocess_id, [net_ip].local_net_address , [net_ip].local_tcp_port , [hostname].hostname , [hostname].[DB_name] , [hostname].net_address , [hostname].loginame , [hostname].program_name , [net_ip].num_reads , [net_ip].num_writes , [hostname].textFROM sys.dm_exec_connections AS [net_ip] JOIN ( SELECT DISTINCT hostname , spid , DB_NAME(sp.dbid) AS [DB_name] , net_address , loginame , program_name , text FROM master..sysprocesses SP CROSS APPLY sys.dm_exec_sql_text(sp.sql_handle) WHERE hostname IS NOT NULL AND hostname <> '' ) AS hostname ON [net_ip].session_id = [hostname].spid LEFT JOIN sys.dm_exec_sessions SE ON [net_ip].session_id=SE.session_id
我們可以根據local_net_address來定位請求的服務器IP,通過host_process_id來查看發送該請求的PID,登陸到請求服務器上,使用任務管理器來找到PID對于的應用。
--=============================================
首先對于JDBC的訪問,對于的host_process_id為0,無法為我們提供有效信息,我們可以通過client_tcp_port來定位應用程序。
首先登陸到請求的服務器上,打開CMD窗口,運行NETSTAT -ano命令來查看服務器的端口使用
在本地地址這列查找client_tcp_port的值,找到對于行后,再查找對于的PID,在依據PID查找運用。
哇哈哈,是不是很厲害。
小訣竅:
在CMD里運行NETSTAT -ano>d:/net.txt,這樣結果就保存到d:/net.txt中,在通過文本編輯器查找對應的client_tcp_port,更方便快捷。
--====================================================
半夜加班來一篇水文,妹子鎮壓下牛鬼蛇神
新聞熱點
疑難解答