RAC Local_listener、一条 Oracle的阑尾

本文介绍如何解决数据库启动时报ORA-00119错误的问题,通过正确配置local_listener参数,并解释其在PMON动态注册及RAC负载均衡中的作用。
         先看一段对话:
         
         小菜鸟问:
         我在参数文件中设置了local_listener='listener1',然后启动数据库有报错.
         SQL> startup
         ORA-00119: invalid specification for system parameter LOCAL_LISTENER
         ORA-00132: syntax error or unresolved network name 'listener1'
         语法不对吗?
         
         老鸟回:
         要在服务器上的tnsnames.ora里做设置,来映射listener1
         类似这样:
         listener1 =
              (ADDRESS = (PROTOCOL = TCP)(HOST = 虚拟ip)(PORT = 1521))
     
         或者你直接这么设置:
         local_listener=' (ADDRESS = (PROTOCOL = TCP)(HOST = 虚拟ip)(PORT = 1521))' 
         
         小菜鸟眼神流露着迷茫、弱弱的问:
         这样做后listener1就是系统默认的监听呢?还是告诉pmon把注册信息注册到listener1上呢?
         
         老鸟回:
         pmon注册
    
         小菜鸟有点明白了、又问:
         谢谢!加了后确实可以启动数据库了,但是不明白这内部是怎么运做的,请指教.为什么加了之后就可以启动?
    
         老鸟回:
         因为它会去服务端的tnsnames.ora里找啊,找不到当然解析不了啊、然后报错:
         ORA-00132: syntax error or unresolved network name 'listener1'
         在RAC环境下、客户端连接时、有时会收到 ORA-12545: 因目标主机或对象不存在, 连接失败
         这个错误的处理方法也是一样的
         
         
         。。。
         
         故事到这里就谢幕了、
         
         Local_listener有两个作用:
         
         ● PMON动态注册非标端口
            
            动态注册默认Oracle只能注册1521端口,如果你的端口是1522或者其他,Oracle是没办法知道的
            那么只要告诉ORACLE Local_listener就可以
            
            
         ● RAC 负载均衡
            
            RAC负载均衡有2种,一种是CLIENT,一种是SERVER
            所谓CLIENT是指直接在tnsnames.ora中配置LOAD_BALANCE=yes参数
            这种类型主要是按照连接数,或者说概率来连接Oracle
            如果不配置可能也不会出错、
            
            还有一种情况是通过SERVER、那么 Local_listener是有作用的
            因为Oracle 会探测服务器负载,谁负载低就去哪里
            所以当一个进程进入了其中一个节点,这个时候实际还没连接
            服务器会探测哪个节点负载低,如果是本地节点直接通过 Local_listener 连接
            如果是别的机器,因为Oracle不知道其他节点怎么走,所以 Remote_listener就有作用了 
            
         
         配置local_listener的相关步骤:
         

         ① 在listener.ora中设置监听端口


Think =
   (description =
     (address = (protocol = tcp)(host = loveoracle)(port = 1522))
)


            lsnrctl start Think 启动listener


         ② 在tnsname.ora中设置net service name


Think =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = loveoracle)(PORT = 1522))
    )
    (CONNECT_DATA =
      (service_name = orcl)
    )
  )


         ③ 然后才可以设置local_listener
            
             alter system set local_listener=Think;
            
         ④ 向数据库注册listener
            
             alter system register;
            
            
          其实、 Local_listener 是为了解决一个BUG而设置的→→主要就是VIP
          这是Oracle的阑尾,早晚要割掉!
          我的环境、很多时候是没有设置
          Local_listener 即使要写,也是写的VIP的地址, 10g,11g均是如此 

<think>好的,我现在需要解决用户关于如何在Oracle数据库的local_listener配置中正确设置host参数的问题。首先,我需要回顾用户之前的提问和我的回答,确保信息一致。用户之前已经了解了local_listener的基本作用和配置步骤,现在更关注host参数的具体设置方法。 根据用户提供的引用,引用[1]和[2]提到local_listener参数用于指定PMON进程注册的监听器端口,并且可以配置多个监听器。引用[3]展示了hosts文件中的网络配置,涉及多个IP地址和主机名,这可能与多网络环境或RAC配置有关。 用户的问题集中在host的设置方法,我需要明确几种常见的设置场景。首先是使用静态IP地址的情况,这在单实例环境中常见。其次是使用主机名的情况,这需要确保DNS或hosts文件解析正确。第三是RAC环境,这里可能涉及VIP或SCAN IP,需要特别注意。另外,多网卡或多IP的情况也需要考虑,比如不同网络接口的分离。 接下来,我需要详细说明每种情况的配置步骤,并给出示例。例如,在静态IP的情况下,用户需要在tnsnames.ora中定义监听器别名,并指定具体的IP和端口。使用主机名时,要确保名称解析正确,避免依赖动态DNS。对于RAC环境,通常会使用VIP或SCAN IP,这需要结合Grid Infrastructure的配置,同时注意local_listener和remote_listener的区别。 此外,常见问题也是用户关心的部分。例如,如果host设置错误,可能导致监听器无法注册服务,或者客户端连接问题。需要列出这些问题的原因和解决方法,帮助用户排查。 还要考虑用户可能的实际应用场景,比如生产环境中如何选择host类型,如何验证配置是否生效,以及如何通过日志进行故障排除。这部分需要给出具体的命令,如lsnrctl status和检查监听日志的方法。 最后,确保回答结构清晰,分点说明,并参考之前的引用内容,特别是关于RAC环境和多监听器的配置。同时,提醒用户注意事项,如防火墙设置、参数持久化等,确保配置的可靠性和稳定性。</think>### **Oracle `local_listener` 参数中 `HOST` 配置详解** --- #### **一、`HOST` 参数设置的核心原则** 在 `local_listener` 配置中,`HOST` 参数用于指定**监听器所在的主机地址**,直接影响数据库实例向哪个网络接口注册服务。其设置需遵循以下原则: 1. **精准性**:需明确指向实际运行监听器的物理主机或虚拟IP(VIP)。 2. **可解析性**:若使用主机名,需确保通过DNS或 `/etc/hosts` 文件能够正确解析[^3]。 3. **网络可达性**:客户端必须能通过配置的 `HOST` 地址连接到监听器。 --- #### **二、典型场景与配置方法** ##### **1. 单实例环境(静态IP)** 直接指定数据库主机的静态IP地址: ```bash # tnsnames.ora 配置示例 LISTENER_LOCAL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) ) ``` - **验证方法**: ```sql SQL> ALTER SYSTEM SET local_listener = 'LISTENER_LOCAL'; SQL> ALTER SYSTEM REGISTER; -- 强制PMON重新注册 ``` ```bash lsnrctl status # 检查服务是否注册到指定IP ``` ##### **2. 使用主机名(动态DNS)** 若使用主机名(如负载均衡场景),需确保名称解析可靠: ```bash # tnsnames.ora 配置示例 LISTENER_DNS = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver.prod)(PORT = 1521)) ) ``` - **关键点**: - 通过 `nslookup dbserver.prod` 验证解析结果。 - 避免使用临时主机名(如云环境中的随机主机名)。 ##### **3. RAC 环境(VIP/SCAN IP)** 在 Oracle RAC 中,通常使用 **VIP(虚拟IP)** 或 **SCAN IP** 实现高可用: ```bash # tnsnames.ora 配置示例(VIP) LISTENER_RAC = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac-node1-vip)(PORT = 1521)) ) ``` - **注意事项**: - VIP 地址需在 `/etc/hosts` 或 DNS 中预定义(如引用[3]中的 `test2-vip`)[^3]。 - 需同时配置 `remote_listener` 指向 SCAN IP(集群网络)[^1][^3]。 ##### **4. 多网卡/多IP环境** 若主机有多个网络接口(如分离业务网络与管理网络),需明确绑定到特定IP: ```bash # 绑定到 eth1 网卡的IP LISTENER_ETH1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.20.50)(PORT = 1521)) ) ``` - **验证命令**: ```bash netstat -tuln | grep 1521 # 确认监听器绑定到正确IP ``` --- #### **三、常见配置错误与修复** | **问题现象** | **错误原因** | **解决方案** | |----------------------------|---------------------------|------------------------------------------------------------------------------| | ORA-12541: TNS 无监听程序 | `HOST` 指向未运行的IP | 检查监听器实际绑定的IP,使用 `lsnrctl status` 确认监听地址 | | 服务注册到错误网卡 | 多网卡未指定绑定IP | 在 `listener.ora` 中显式设置 `HOST`,或通过 `LOCAL_LISTENER` 强制指定 | | 客户端解析失败 | 主机名无法解析 | 在客户端和服务器的 `/etc/hosts` 中添加记录(如引用[3]的格式)[^3] | | RAC节点服务注册不全 | VIP配置冲突或网络隔离 | 检查各节点VIP的连通性,确保 `/etc/hosts` 中VIP与物理IP映射正确 | --- #### **四、高级配置技巧** 1. **动态IP环境(如DHCP)** 使用主机名 + DNS动态更新(需确保TTL时间合理),避免IP变化导致服务中断。 2. **绑定多IP实现负载均衡** 在 `tnsnames.ora` 中定义多个监听地址: ```bash LISTENER_MULTI = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521)) ) ) ``` 3. **结合监听器日志诊断** 启用监听器日志分析注册问题: ```bash lsnrctl LSNRCTL> set log_directory /u01/app/oracle/network/log LSNRCTL> set log_status on ``` --- #### **五、关键引用说明** - **静态IP与动态注册**:若未设置 `local_listener`,PMON默认向本机1521端口注册(引用[1])[^1]。 - **RAC环境配置**:`local_listener` 需指向节点VIP,而 `remote_listener` 指向SCAN监听器(引用[3]中SCAN IP示例)[^3]。 - **多网络隔离**:通过 `listener_networks` 参数可限制监听器注册的特定网络(引用[3]中的多网段配置)。 --- **操作建议**: - 生产环境中优先使用静态IP或VIP,避免依赖动态DNS解析。 - 修改配置后,执行 `ALTER SYSTEM REGISTER` 强制服务注册,并通过 `lsnrctl services` 验证结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值