问题描述及原因分析
本文解决一些Oracle19c有关监听器和无法连接的问题,包括如下:
- 进入Oracle SQL Developer 连接界面,点击连接,左下角状态却显示如下:
注:不同版本可能提示不太相同,以上图源网络。
- 于是进一步检查命令行窗口
win+R
->cmd
,输入tnsping SID
(SID一般为orcl,故一般可参考tnsping orcl
)。却显示如下:
C:\Users\Administrator>tnsping orcl
TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on xx-xx月-2020 xx:xx:xx
Copyright (c) 1997, 2019, Oracle. All rights reserved.
已使用的参数文件:
D:\Apps\ORACLE\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = xpro)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))
OK (xx 毫秒) //没有问题将显示此行
若此步最后一行显示了OK,请参考解决方案1&2。
若没显示OK,进一步检查监听器,命令行窗口win+R
->cmd
,输入lsnrctl
->status
,
>lsnrctl status
LSNRCTL for 64-bit Windows: Version 12.2.0.1.0 - Production on 26-MAY-2019 21:36:47
Copyright (c) 1991, 2016, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xpro)(PORT=1521)))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
64-bit Windows Error: 61: Unknown error
或者输入lsnrctl
->start
,仍有报错如下。
TNS-12560: TNS: 协议适配器错误
TNS-00530: 协议适配器错误
此时可能是监听器没有配置\启动。
此时再去检查“服务”若存在监听器,检查注册表中若有注册项计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraDB19Home1TNSListener
,或...\ORACLE\network\admin\listen.nar
至少如下:
# listener.ora Network Configuration File: D:\Apps\ORACLE\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xpro)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\Apps\ORACLE\log
则说明监听器有配置可能只是未启动,但如前文lsnrctl start
报错,见解决方案3。
但若注册表中也无监听器信息,此时需要配置监听器,见解决方案4。
解决方案
- 检查自己主机号和数据库名是否填写正确。
注:其中可用以下命令查看当前的数据库实例名称,主机名称。
select instance_name,host_name from v$instance;
- 前往
...\ORACLE\network\admin
,将Oracle 监听配置文件sqlnet.ora
,listener.ora
和TNS配置文件tnsnames.ora
可能错误的hostname和port修改。 - 用管理员权限打开
cmd.exe
,再次lsnrctl start
。 win+s
或“开始”->找到Oracle目录,打开Net Manager
或Net Configuration Assistant
,配置好后记得开启监听器。启动失败见解决方案3。
注:部分电脑可能设置重启生效。