Back

如何查看哪些进程和服务器正在使用数据库

工作中有时会碰到需要迁移数据库的时候,如更换机房,更换新服务器等。迁移数据库最重要是要确保正在运行的程序不会因为漏更改连接字符串而导致程序报错。但有时维护的项目可能老旧,没有相关维护文档,还有一些使用该数据库的windows服务也可能遍布在其他服务器上,这时我们该如何找到所有正在使用该数据库的服务呢?

下面以windows服务器和Sql Server数据库为例,数据库服务器的ip是192.168.6.189,linux平台的思路差不多,只是命令有变化。

1、查看Sql Server进程ID

打开任务管理器,点击“查看->选择列”,勾选“PID(进程标识符)sql server sql server

进程名称为“sqlservr.exe”的PID就是Sql Server的进程ID,当前是1800

2、查看当前连接Sql Server的服务器列表

打开命令行,输入下面的命令:

netstat -ano|find "1800"

结果如下:

C:\Documents and Settings>netstat -ano|find "1800"
  TCP    0.0.0.0:3758           0.0.0.0:0              LISTENING       1800
  TCP    0.0.0.0:5025           0.0.0.0:0              LISTENING       1800
  TCP    127.0.0.1:1434         0.0.0.0:0              LISTENING       1800
  TCP    192.168.6.189:3758     192.168.6.76:2685      ESTABLISHED     1800
  TCP    192.168.6.189:3758     192.168.6.76:2725      ESTABLISHED     1800

该命令会打印出所有连接到1800进程的服务器列表,可以看到192.168.6.76这台服务器正在连接到Sql Server。

3、查看连接到数据库服务器的进程

进入服务器192.168.6.76,打开命令行,输入下面的命令:

netstat -ano |find "6.189"

6.189是数据库服务器的ip,find命令用来查找带有"6.189"字符串的行。输出如下:

d:\webroot>netstat -ano |find "6.189"
  TCP    192.168.6.76:2685      192.168.6.189:3758     ESTABLISHED     8520
  TCP    192.168.6.76:2725      192.168.6.189:3758     ESTABLISHED     8520

结果最右边的就是正连接到数据库服务器的进程ID,当前是8520.现在已经找到进程了^0^,你只需打开任务管理器,看下该进程ID对应是进程是什么,就能准确定位了。

4、查看IIS进程对应的站点

有时我们找到使用数据库的进程了,但是像IIS这种程序,因为所有站点的进程名都相同,所以无法准备定位了。 sql server 有什么方法可以找到w3wp.exe对应的站点名呢?可以使用iisapp命令:

d:\webroot>iisapp -a
W3WP.exe PID: 6584   AppPoolId: test1.com
W3WP.exe PID: 16304   AppPoolId: Special
W3WP.exe PID: 8520   AppPoolId: test2.com
W3WP.exe PID: 3164   AppPoolId: test3.com

iisapp命令会输出W3WP进程对应的应用程序池名,通过应用程序池名我们就能准备定位站点:)