TNS-00512: Address already in use

    今天客户反映一个数据库,Web程序可以连接数据库,Ap程序连接数据库报错:ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

     我重启监听之后,报错如下:
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.


说明监听1521端口被占用,解决办法:
1、netstat -an | grep 端口号

2、lsof -i :1521 | grep "\(LISTEN\)"

3、kill -9 进程号

4、启动监听 lsnrctl start

注: lsof -i :1521 | grep "\(LISTEN\)"可以查看具体哪个文件占用端口号,最好确定文件为什么会占用端口号,才能彻底解决问题。
--------------------------------------------------------------------
附带netstat 命令和lsof命令使用说明:
1)使用lsof命令

lsof是一个非常强大的linux工具,她被用来查找哪些程序使用了那些文件。在linux系统下,基本上所有的东西都可以被当作文件来用。socket当然也是一种文件了。所以lsof可以用来查找谁用了某一个端口。具体方法:

    lsof -i :port_number |grep "\(LISTEN\)"

-i是用来查找和网络相关的文件,":"号是必须的,它是标志你查找的是一个端口。port_number就是你要查找的端口号,譬如你要查找是否 有程序占用了oracle的监听端口1521,就可以使用lsof -i :1521 |grep "\(LISTEN\)"。如果有程序已经占用了,那么下面打印的第二个字段就是该程序的进程id,第一个字段是进程的名字。

如果只有losf -i :port_number可能会查到很多应用程序,但这些程序实际并没有占用你指定的端口,这些端口只是连接到本机器或者别的机器的该端口。所以要grep "\(LISTEN\)“,因为一个端口只可能被一个程序占用的,所以这种方法是可靠的。

2)使用netstat 命令

大家一定对这个命令比较熟悉了,可能你从没有想到用到来查找哪一个程序的占用了指定的端口。但是netstat -an 的确提供了这种功能。

执行man netstat命令,你会发现netstat 提供了'-p'的选项,这个选项的功能是告诉你哪个程序占用了该端口,但是她提供的形式比较古怪是以pid/process_name提供的。pid当然 是进程id了,process_name是进程的命令,中间以'/'号分隔。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12272958/viewspace-687105/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12272958/viewspace-687105/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值