有台Windows 2008 R2下的Oracle 11g,运行一直很正常,突然发现数据库连不上了。检查发现:
- 本地sqlplus可以,直接select * from dual也正常有返回;
- 远程无法连接,显示没有监听,telnet 1521端口不通;
- 本地sqldeverloper也报错,提示 “执行请求的操作时遇到错误: IO 错误: The Network Adapter could not establish the connection 供应商代码 17002”
经查,是Oracle BUG造成的:
The listener.log has reached the file size limit (on Windows) of 4G. This issue is described in published bug:
Bug:9879101 THE CONNECT THROUGH LISTENER WAS SLOW WHEN LISTENER LOG GREW to 4GB
在 C:\app\Administrator\diag\tnslsnr\ecologyinterdb\listener\trace 下,发现listener.log已经4g了。把文件删掉,重启即可。
如果想要彻底解决,可以关闭监听服务后关闭日志(不然执行非常慢):
LSNRCTL>set current_listener <listener_name>
LSNRCTL>set log_status OFF
LSNRCTL>save_config
总结:
这个bug很麻烦,这几天遇到两次了。你会突然发现业务无法使用数据库了,到本机用SqlDeveloper连接也无法使用,乍一看似乎是监听出了问题,但是根本就没动过监听啊。更头疼的是,本地直接sqlplus是可以连接的。