工作中有時會碰到需要遷移數據庫的時候,如更換機房,更換新服務器等。遷移數據庫最重要是要確保正在運行的程序不會因為漏更改連接字符串而導致程序報錯。但有時維護的項目可能老舊,沒有相關維護文檔,還有一些使用該數據庫的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進程對應的應用程序池名,通過應用程序池名我們就能准備定位站點:)