工作中有时会碰到需要迁移数据库的时候,如更换机房,更换新服务器等。迁移数据库最重要是要确保正在运行的程序不会因为漏更改连接字符串而导致程序报错。但有时维护的项目可能老旧,没有相关维护文档,还有一些使用该数据库的windows服务也可能遍布在其他服务器上,这时我们该如何找到所有正在使用该数据库的服务呢?
下面以windows服务器和Sql Server数据库为例,数据库服务器的ip是192.168.6.189,linux平台的思路差不多,只是命令有变化。
1、查看Sql Server进程ID
打开任务管理器,点击“查看->选择列”,勾选“PID(进程标识符)”
进程名称为“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这种程序,因为所有站点的进程名都相同,所以无法准备定位了。 有什么方法可以找到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进程对应的应用程序池名,通过应用程序池名我们就能准备定位站点:)