"老王,咱们新部署的Oracle RAC集群出问题了!应用团队反映连接时总报ORA-47922错误,现在业务已经受影响半小时了..."
作为一名DBA,这种紧急呼叫再熟悉不过,上周五下午,我就遇到了这个让人头疼的ORA-47922报错,错误信息里还带着"error removing host string to domain string"的提示,经过两个小时的排查,终于找到了症结所在,今天就把这次实战经验整理出来,下次你遇到时可以直接拿来就用。
当出现这个错误时,通常会看到类似这样的完整报错信息:
ORA-47922: error removing host string to domain string
Additional information: Failed to resolve service name
这种情况常发生在以下几种场景:
经过排查,这个报错的本质是Oracle集群服务无法正确解析主机名与域名之间的映射关系,具体可能涉及:
# 1. 检查主机名解析 ping -c 3 your_hostname nslookup your_domain # 2. 验证/etc/hosts配置 cat /etc/hosts | grep -v '^#' | grep -v '^$' # 3. 检查SCAN配置 srvctl config scan srvctl config scan_listener
如果发现主机名解析失败,需要先解决基础网络问题,确保:
-- 登录SQL*Plus检查监听状态 lsnrctl status -- 检查集群服务状态 crsctl check cluster -all
如果监听服务异常,可能需要重启:
srvctl stop listener srvctl start listener
# 检查DNS解析超时时间 nmap -sU -p 53 your_dns_server_ip # 临时修改DNS超时设置(如需要) alter system set remote_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=scan_name)(PORT=1521)(CONNECT_DATA=(SERVICE_NAME=service)))' scope=both sid='*';
如果确认是SCAN问题,可以这样修复:
# 1. 停止现有SCAN srvctl stop scan srvctl stop scan_listener # 2. 重新配置SCAN srvctl modify scan -n new_scan_name srvctl modify scan_listener -u # 3. 重启服务 srvctl start scan srvctl start scan_listener
# 检查相关端口是否开放 iptables -L -n | grep 1521 firewall-cmd --list-ports | grep 1521 # 如被拦截,临时开放端口 firewall-cmd --add-port=1521/tcp --permanent firewall-cmd --reload
Q:修复后应用还是连不上怎么办? A:尝试清除应用连接池,或重启应用服务,有时候旧的连接会缓存错误信息。
Q:没有DNS服务器能解决吗? A:可以,但需要在所有节点的/etc/hosts文件中维护完整的SCAN和节点解析记录。
Q:这个错误会影响数据安全吗? A:不会,这只是连接层面的问题,不会影响已存储的数据。
ORA-47922错误虽然看起来复杂,但大多数情况下都是网络配置问题,按照本文的步骤,从基础网络检查开始,逐步排查SCAN、监听服务和防火墙设置,通常能在1小时内解决问题,预防胜于治疗,良好的网络架构设计和规范的变更管理能避免大部分类似问题。
本文由 居若云 于2025-07-27发表在【云服务器提供商】,文中图片由(居若云)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/461164.html
发表评论