这个错误通常是因为Oracle的tnsnames.ora文件里某个参数没填值,比如REMOTE_LISTENER或者LISTENER_NETWORKS这些地方留空了。修复方法很简单:打开tnsnames.ora文件,找到对应的参数行,把null或者空字符串改成实际的值。比如REMOTE_LISTENER = (ADDRESS = (PROTOCOL = TCP)(HOST = yourhost)(PORT = 1521)),保存后重启数据库服务就行。如果是分布式事务问题,检查init.ora或spfile里的参数,确保没有空值。简单重启监听器和数据库实例,很多时候就能解决。
Oracle社区帖子
我遇到ORA-00112,是因为REMOTE_LISTENER参数是null。解决办法:用sqlplus连上数据库,执行show parameter remote_listener,看是不是null。然后alter system set remote_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope=both; 然后重启实例。tnsnames.ora也要同步改。测试连接远程数据库,没问题了。
Stack Overflow讨论
ORA-00112: value of REMOTE_LISTENER is null. This happens when you're trying to register remote listeners for RAC or Data Guard. Fix: In your sqlnet.ora or tnsnames.ora, ensure REMOTE_LISTENER is set properly. Or set it dynamically: ALTER SYSTEM SET remote_listener='your_listener_string' SCOPE=BOTH SID='*'; Make sure the string matches your actual listener config. Restart CMAN or listener if needed.
Oracle官方文档摘录
The ORA-00112 error indicates that a parameter value is null, typically REMOTE_LISTENER or LISTENER_NETWORKS. To resolve, set the parameter to a valid TNS name or address list. For example: REMOTE_LISTENER = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=scan-cluster)(PORT=1521))) Ensure this matches your cluster or remote listener configuration. Use srvctl to update if in RAC environment: srvctl modify instance -db dbname -instance instname -option remote_listener="value".
博客经验分享
上次搞Oracle 19c,远程连接时报ORA-00112,检查发现tnsnames.ora里REMOTE_LISTENER一行是空的。直接编辑文件,填上(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521)),然后lsnrctl reload,重启dbconsole。问题没了。记住,参数名后不能有空格或null字样,直接赋值。
论坛用户解决记录
问题:ORA-00112 value of string is null,在远程XA事务时出现。原因是global_names参数和db_link设置冲突。修复:设置global_names=false,或者正确配置db_link的connect_data。另检查listener.ora的SID_LIST,确保没有空服务名。最终用alter system reset remote_listener;然后手动set值,ok了。
FAQ
Q: ORA-00112常见触发场景是什么?
A: 主要是RAC环境、Data Guard复制或远程监听器注册时,参数如REMOTE_LISTENER为空。
Q: 不重启数据库能修复吗?
A: 可以,用alter system set命令动态设置SCOPE=BOTH,然后reload监听器。
Q: tnsnames.ora在哪里找?
A: 默认在$ORACLE_HOME/network/admin/目录下。
Q: RAC里怎么批量修?
A: 用srvctl modify database -db dbname -option remote_listener="value"。