曲演杂坛--查看那个应用连接到数据库
在做数据库迁移或其他维护的时候,需要应用端暂停访问,我们可以通过视图查看到连接到数据的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].text FROM 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,更方便快捷。
--====================================================
半夜加班来一篇水文,妹子镇压下牛鬼蛇神
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现