我重啟監(jiān)聽之后,報錯如下:
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection
refused
找到TNS-00512 錯誤:
Oracle Error :: TNS-00512
Address already in use
Cause
Specified listener address is already being used.
Action
Start your listener with an unused address. 說明監(jiān)聽1521端口被占用,解決辦法:
1、netstat
-an | grep 端口號
2、lsof -i
:1521 | grep "\(LISTEN\)"
3、kill -9 進程號
4、啟動監(jiān)聽 lsnrctl start
注:lsof
-i :1521 | grep
"\(LISTEN\)"可以查看具體哪個文件占用端口號,最好確定文件為什么會占用端口號,才能徹底解決問題。
--------------------------------------------------------------------
附帶netstat
命令和lsof命令使用說明:
1)使用lsof命令
lsof是一個非常強大的linux工具,她被用來查找哪些程序使用了那些文件。在linux系統(tǒng)下,基本上所有的東西都可以被當作文件來用。socket當然也是一種文件了。所以lsof可以用來查找誰用了某一個端口。具體方法:
lsof -i :port_number |grep
"\(LISTEN\)"
-i是用來查找和網(wǎng)絡相關的文件,":"號是必須的,它是標志你查找的是一個端口。port_number就是你要查找的端口號,譬如你要查找是否
有程序占用了oracle的監(jiān)聽端口1521,就可以使用lsof -i :1521 |grep
"\(LISTEN\)"。如果有程序已經(jīng)占用了,那么下面打印的第二個字段就是該程序的進程id,第一個字段是進程的名字。
如果只有l(wèi)osf -i
:port_number可能會查到很多應用程序,但這些程序實際并沒有占用你指定的端口,這些端口只是連接到本機器或者別的機器的該端口。所以要grep
"\(LISTEN\)“,因為一個端口只可能被一個程序占用的,所以這種方法是可靠的。
2)使用netstat
命令
大家一定對這個命令比較熟悉了,可能你從沒有想到用到來查找哪一個程序的占用了指定的端口。但是netstat
-an 的確提供了這種功能。
執(zhí)行man netstat命令,你會發(fā)現(xiàn)netstat
提供了'-p'的選項,這個選項的功能是告訴你哪個程序占用了該端口,但是她提供的形式比較古怪是以pid/process_name提供的。pid當然
是進程id了,process_name是進程的命令,中間以'/'號分隔。 |
|