如何修改Oracle服务器的主机名_listener和tnsnames同步调整

改主机名后需同步更新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 vparameter 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自动审核代码

相关推荐
曹牧2 分钟前
oracle:“not all variables bound”
数据库·oracle
数据库百宝箱12 分钟前
Oracle RMAN Image Copy 本地恢复
数据库·oracle
肖永威27 分钟前
Python多业务并行计算框架插件化演进:从硬编码到动态注册
python·插件化·并行计算·动态注册
yz_aiks29 分钟前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
不知名的老吴1 小时前
线程的生命周期之线程“插队“
java·开发语言·python
zuYM4g7Dp1 小时前
NoSql数据库设计心得
数据库·nosql
xsc6996752 小时前
从零搭建大模型与智能体平台 - 完整技术详解
python
睡不醒男孩0308233 小时前
第七篇:揭秘 PostgreSQL 数据库内核级管控:CLup 深度架构设计与高可用底座技术白皮书
数据库·postgresql·clup
无风听海3 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
cmes_love4 小时前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle