更换3G热点网络后Oracle SQL Developer报ORA-12505错误求助
我来帮你理清楚这个问题,分两部分解决——先搞定配置文件的疑问,再排查ORA-12505的核心问题:
关于多份listener.ora/tnsnames.ora的问题
完全不需要修改sample文件夹里的配置文件!那个只是Oracle官方放的示例模板,数据库服务和SQL Developer根本不会读取它。只有$ORACLE_HOME/network/admin目录下的那两份文件才是实际生效的配置,所有修改只需要针对这两个文件来做就行。
排查ORA-12505错误的关键步骤
你改了主机名是对的方向,但换3G热点后还有几个细节要确认:
确认SID/服务名是否匹配
报错的核心是listener不知道你指定的SID,先确保你用的SID是数据库实际的实例名。如果能登录数据库服务器,执行这条SQL确认:SELECT instance_name FROM v$instance;另外,现在很多Oracle版本更推荐用
SERVICE_NAME而非SID,你也可以查一下可用的服务名:SELECT service_name FROM v$service;把
tnsnames.ora里的对应值改成查询到的结果。让listener监听正确的地址
3G热点会给设备分配动态IP,所以listener.ora里的监听地址别写死原来的固网IP,最好改成允许所有IP访问的0.0.0.0,示例配置如下:LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) ) )重启监听服务
修改完listener.ora后,必须重启监听才能生效,执行以下命令:lsnrctl stop lsnrctl start重启后用
lsnrctl status查看监听状态,确认输出里列出了你要连接的SID/服务名。检查网络连通性
换3G热点后,先确认你的电脑能ping通数据库服务器的IP(如果是本地数据库,就pinglocalhost)。如果ping不通,说明网络层面有问题——比如数据库服务器没连同一个3G热点,或者热点防火墙拦截了1521端口。简化连接串(本地数据库适用)
如果是本地数据库,直接把tnsnames.ora里的主机名改成localhost或者127.0.0.1,比用动态分配的IP更稳定,避免热点IP变化导致的连接失败。
内容的提问来源于stack exchange,提问作者George M.

