改主机名后需同步更新listener.ora中的HOST、/etc/hosts映射、spfile/pfile中local_listener参数及tnsnames.ora服务名否则引发TNS-12541、ORA-12154等连接故障。改完主机名后 lsnrctl status 报 “TNS-12541: No listener”oracle 监听器启动时会绑定到 listener.ora 里配置的主机名或 ip。如果只改了系统主机名比如用 hostnamectl set-hostname newhost但没更新 listener.ora监听器仍尝试绑定旧主机名——而该主机名已解析不到当前机器lsnrctl start 表面成功实际监听失败lsnrctl status 就会报这个错。实操建议查当前监听器配置路径lsnrctl status 输出里看 “Listener Parameter File”通常是 $ORACLE_HOME/network/admin/listener.ora打开该文件找到 ADDRESS 段里的 (HOST ...)替换成新主机名或更稳妥直接写成 (HOST 0.0.0.0) 或本机实际 IP别只改 HOST顺手检查 SID_LIST_LISTENER 下的 GLOBAL_DBNAME 和 ORACLE_SID 是否还匹配实例名尤其跨主机迁移时容易漏改完执行lsnrctl reload比 stop/start 更安全不中断已有连接tnsping 能通但应用连不上报 “ORA-12154: TNS:could not resolve the connect identifier”这说明客户端能访问监听器但监听器收不到有效服务名——大概率是 tnsnames.ora 里写的 SERVICE_NAME 或 SID 和数据库实际注册的服务不一致或者监听器根本没加载该服务。实操建议在数据库服务器上运行lsnrctl services看输出里列出的 Service xxx 名字必须和 tnsnames.ora 中 SERVICE_NAME 完全一致区分大小写确认数据库是否已动态注册SELECT value FROM v$parameter WHERE name service_names;如果为空需手动注册ALTER SYSTEM REGISTER;tnsnames.ora 文件位置要明确客户端程序读的是它自己环境下的 $TNS_ADMIN/tnsnames.ora不是服务器上的Java 应用可能走 jdbc:oracle:thin:... 直连根本不读这个文件改主机名后数据库实例起不来报 “ORA-01078: failure in processing system parameters”这不是监听器问题而是 spfile 或 pfile 里硬编码了旧主机名比如 local_listener 参数指向了旧地址导致实例启动时无法联系监听器完成注册卡在初始化阶段。 AI Code Reviewer AI自动审核代码