I have a database link created between oracle and sqlserver using oracle tg4odbc, the product is installed on windows server and run as service "OracleOraGtw11g_home1TNSListener", but sometime the service cannot started, the root cause of this problem is that the port number 1521 is used by an non-existent process.
The first step is to use netstat -bano|find "1521" to get the process id, in my case it's 5844, which shows the connection is from my oracle server 10.8.0.169
H:\>netstat -bano|find "1521"
TCP 0.0.0.0:1521 0.0.0.0:0 LISTENING 5844
TCP 10.14.45.33:1521 10.8.0.169:42987 ESTABLISHED 5844
however the process id does not show in either task manager or process explorer.
The next step is to run tcpview, which shows non-existent under process column, there are three rows, two show status as "listening", the other one shows status "established", right click and kill all of them.
after these three non-existent processes disappear, I am able to start the service successfully.
on AIX, I can use the following method, I did not verify it though.
The first step is to use netstat -bano|find "1521" to get the process id, in my case it's 5844, which shows the connection is from my oracle server 10.8.0.169
H:\>netstat -bano|find "1521"
TCP 0.0.0.0:1521 0.0.0.0:0 LISTENING 5844
TCP 10.14.45.33:1521 10.8.0.169:42987 ESTABLISHED 5844
however the process id does not show in either task manager or process explorer.
The next step is to run tcpview, which shows non-existent under process column, there are three rows, two show status as "listening", the other one shows status "established", right click and kill all of them.
after these three non-existent processes disappear, I am able to start the service successfully.
on AIX, I can use the following method, I did not verify it though.
# netstat -Aan | grep LISTEN | grep 1334
f100050000b05bb8 tcp4 0 0 *.1334 *.* LISTEN
You then take the first column (f100050000b05bb8 in this example) and run the following command:
# rmsock f100050000b05bb8 tcpcb
The socket 0xf100050000b05808 is being held by proccess 5767378 (writesrv).
the right procedure to kill it is to "end connection" for the "established" row, and "end-process" for the "listening" row.
ReplyDeleteanother way to kill process that hold the port on windows:
ReplyDeletenetstat -a -o -n |find "#PORT"
tasklist /FI “PID eq #PID″
taskkill /F /PID #PID
Powershell:
ReplyDeletePS C:\> netstat -ano | Select-String "#PORT"
PS C:\> Get-Process -Id #PID
PS C:\> Stop-Process #PID