gnsctl启动失败根本原因是/etc/hosts缺少GNS VIP解析或端口冲突;SCAN VIP与GNS VIP必须独立;OCR缺失GNS资源定义需补全后重启OHASD;扩展节点时须确保GNS VIP可解析且DNS配置正确。
为什么 gnsctl 启动失败总报 “GNS is not running”
根本原因不是服务没启,而是 grid 用户下缺少 /etc/hosts 中的 gns vip 解析,或该 vip 被其他进程(比如旧 crs 实例)占用了。rac 安装时若跳过 gns 配置,后续手动启用容易漏掉这层依赖。
实操建议:
- 确认
/etc/hosts里有 GNS VIP 的静态条目(哪怕只用于初始启动),例如:192.168.56.100 gns-vip.example.com gns-vip - 用
netstat -tuln | grep :1521检查端口冲突(GNS 默认监听 1521,和数据库冲突时会静默失败) -
gnsctl start前必须先确保crsctl check crs返回全部 ONLINE,否则 GNS 依赖的 OHASD 未就绪 - 启动后立刻跑
gnsctl status,别只看返回码;如果显示UNKNOWN,大概率是 OCR 中 GNS 资源注册异常,需用crsctl stat res -t | grep gns核对状态
动态 IP 分配时 SCAN VIP 和 GNS VIP 怎么不打架
SCAN VIP 是 Oracle 11gR2+ 强制要求的客户端接入点,由 DNS 或 GNS 解析;GNS VIP 则是 GNS 服务自身监听地址。两者不能复用同一个 IP,否则 srvctl add scan 会拒绝注册,或者 SCAN 名称解析随机返回 GNS 自身地址,导致客户端连接被重定向到 GNS 监听器而非 SCAN 监听器。
实操建议:
- GNS VIP 必须独立于所有 SCAN VIP、节点 VIP、public IP,且不能在 DHCP 范围内——GNS 不支持从 DHCP 获取自身地址
- SCAN VIP 数量固定为 3 个(即使只有 2 个节点),它们由 GNS 动态分配给存活节点,但分配逻辑只看节点 CRS 状态,不看网络连通性;所以节点间心跳中断但 CRS 未降级时,SCAN VIP 可能“卡”在故障节点上
- 验证方式:用
nslookup scan-cluster.example.com查三次,应返回三个不同 IP;再用ping -c1测试每个 IP 是否响应,不响应的说明对应节点上的 SCAN VIP 实际未激活
srvctl add nodeapps 报错 “PRCN-2061: GNS is not configured” 怎么绕过去
这个错误不是 GNS 没装,而是 OCR 里没存 GNS 配置元数据。常见于克隆环境或手动升级后未运行 roothas.pl -postpatch。强行删掉 GNS 相关资源再重建风险高,优先修复元数据。
实操建议:
- 先运行
oifcfg getif确认 public 网络接口已定义;GNS 依赖它发布子网信息,缺失会导致元数据写入失败 - 执行
crsctl add resource ora.gns -type ora.local_resource.type -attr "AUTO_START=1, CHECK_INTERVAL=30, START_DEPENDENCIES='hard(ora.cluster_interconnect.haip) pullup(ora.cluster_interconnect.haip)', STOP_DEPENDENCIES='hard(ora.cluster_interconnect.haip)'—— 这是补全 OCR 中 GNS 资源定义的关键步骤 - 补完后必须重启 OHASD:
crsctl stop has && crsctl start has,仅重启 CRS 不生效 - 之后再跑
srvctl add nodeapps,如果仍报错,检查ocrdump -stdout | grep -A5 gns是否出现NAME = ora.gns及其STATE字段
RAC 扩展新节点时 root.sh 卡在 “Configuring GNS”
本质是新节点无法反向解析 GNS VIP 的主机名,或 DNS/GNS 服务器拒绝来自新子网的查询请求。12c 以后默认启用 GNS 作为名称解析后端,扩展时若网络 ACL、防火墙或 DNS forwarder 配置没同步,就会无限等待超时。
实操建议:
- 在新节点上手工执行
nslookup gns-vip.example.com和nslookup scan-cluster.example.com,确认都能返回正确 IP 且无server can't find类错误 - 检查新节点的
/etc/resolv.conf,必须包含 GNS VIP 的 nameserver 条目,且排在系统 DNS 之前;顺序错了会导致 fallback 到公网 DNS,而公网 DNS 不认识你的 SCAN 名 - 如果用的是外部 DNS 做 GNS 代理,确认该 DNS 允许来自新节点子网的递归查询(
allow-query配置项) - 临时解法:在新节点
/etc/hosts中硬编码 GNS VIP 和 SCAN 名,跑完root.sh再删——但这只是绕过校验,上线前必须切回真实 GNS 解析链路
最易被忽略的是:GNS 本身不维护持久化 DNS 记录,所有 SCAN VIP 和节点 VIP 的映射都存在 OCR 里,所以扩展节点后必须手动触发一次 srvctl modify scan -n scan-cluster.example.com(哪怕参数没变),才能让 GNS 重新加载 OCR 中的最新拓扑。

















