Local listener&Romote listener

一, LOCAL_LISTENER 和 REMOTE_LISTENER
本篇文章主要來說明這兩個參數在Failover和Loadbalance中的作用,順便說一下靜態註冊和动态注册。
注册的大致含义是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以连接数据库。
动态注册中的实例值来源于参数文件中instance_name,此值在rac环境中每个节点都有一个不同的值。
服务名来自于service_name,如果该参数没有设定值,数据库将结合参数文件中的 db_name和db_domain的值来注册。

10g RAC中默认端口的Listener.ora文件如下:
SID_LIST_LISTENER_node01 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
      (PROGRAM = extproc)
    )
  )
LISTENER_node01 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = node01-vip)(PORT = 1521)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.200.31)(PORT = 1521)(IP = FIRST))
    )
  )
如上是默认端口的监听配置,pmon会动态注册默认port为1521的监听,如果需要向非默认监听注册,则需要配置local_listener参数,并且需要在Tnsnames.ora中加入监听的信息:
10g RAC中非默认端口的Listener.ora文件如下:
SID_LIST_LISTENER_node01 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = rac1)
      (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
    )
  )
LISTENER_NODE01 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = node01-vip)(PORT = 1525)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = node01)(PORT = 1525)(IP = FIRST))
    )
  )
参数值如下:
NAME              TYPE         VALUE
---------------- ------------- ---------------
local_listener   string        LISTENER_node011


tnsnames.ora文件中包含如下:
LISTENER_node01 =
 (DESCRIPTION =
  (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = node01-vip)(PORT = 1525))
  )
 )
LISTENER_node02 =
 (DESCRIPTION =
  (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = node02-vip)(PORT = 1525))
  )
 )
静态注册也就是实例启动时读取Listener.ora中配置,将实例和服务注册到监听程序。
例子如下:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = lichaodg)
      (ORACLE_HOME = /oracle2/product/11.2.0/dbhome_1)
      (SID_NAME = lichaodg)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = lichaodg_DGMGRL)
      (ORACLE_HOME = /oracle2/product/11.2.0/dbhome_1)
      (SID_NAME = lichaodg)
  )
  )
下面看看这两个参数在基于Server-Side Load Balance中的使用。
11.2及以上版本中,出现了SCAN的概念,那么应用连接通过Scan Listener来路由到某个合适(负载相对其它节点低)的节点,那么如果能够达到这样的目的,每个节点就需要能够接收到数据库实例的负载信息。oracle通过local_listener、remote_listener,oralce分别向这两个参数指向的listener进行注册来实现此需求。
11gR2默认参数如下:
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      (DESCRIPTION=(ADDRESS_LIST=(AD
                                                 DRESS=(PROTOCOL=TCP)(HOST=10.7
                                                 0.236.133)(PORT=1521))))
remote_listener                      string      zjddesp12-scanip:1521

其中host=10.70.236.133为VIP.
它使用EZConnect,要enable的话,需要在sqlnet.ora添加names.directory_path=(ezconnect,tnsnames,ldap)
11gR2之前的话,需要在每个节点tnsnames.ora添加:
LISTENERS_CB =
  (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = cb11-vip)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = cb12-vip)(PORT = 1521))
            )
修改remote_listener参数为TNS别名:
SQL> alter system set remote_listener='listeners_cb' scope=both sid='*';
### Oracle 19c Local Listener 配置与故障排除 #### 本地侦听器的作用 在Oracle数据库中,`LOCAL_LISTENER` 参数用于指定数据库实例注册的本地侦听器名称。此参数允许客户端通过该侦听器连接到特定的数据库实例[^1]。 #### 配置 `LOCAL_LISTENER` 要配置 `LOCAL_LISTENER` 参数,可以通过以下方法实现: 1. **动态修改** 使用 `ALTER SYSTEM` 命令来设置 `LOCAL_LISTENER` 参数: ```sql ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))'; ``` 2. **静态修改** 编辑初始化参数文件 (`spfile` 或 `pfile`) 并重启数据库以使更改生效: ```ini LOCAL_LISTENER="(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))" ``` 完成上述操作后,确保侦听器已启动并正在运行。可以使用以下命令验证侦听器状态: ```bash lsnrctl status ``` #### 故障排查步骤 当遇到与 `LOCAL_LISTENER` 相关的问题时,可以从以下几个方面入手: 1. **确认侦听器是否正常工作** 如果无法通过 `LOCAL_LISTENER` 连接到数据库实例,则需检查侦听器的状态以及其配置文件(通常是 `listener.ora`)。确保端口和主机名匹配实际环境设置[^3]。 2. **检查数据库实例注册情况** 执行以下查询以查看当前实例是否成功向侦听器注册: ```sql SELECT value FROM v$parameter WHERE name = 'local_listener'; ``` 若返回为空或不正确,可能需要重新设置 `LOCAL_LISTENER` 参数。 3. **日志分析** 查看警报日志 (alert log) 和跟踪文件中的错误消息,定位具体原因。路径通常位于 `$ORACLE_BASE/diag/rdbms/<dbname>/<instance>/trace/`. 4. **权限问题** 确认操作系统级别是否有足够的权限访问网络资源。特别是在多租户架构下,PDB 可能会因权限不足而未能正确注册至 CDB 的侦听器上。 #### 特殊注意事项 对于 Oracle 19c 而言,由于 Grid Infrastructure Management Repository (GIMR) 成为可选项[^2],因此某些依赖于 GIMR 的功能可能会受到影响。尽管如此,这并不直接影响标准的 `LOCAL_LISTENER` 设置流程;但如果涉及高级集群管理特性,则应额外注意这些组件之间的交互关系。 --- ### 示例代码片段 以下是创建自定义侦听器的一个简单例子: ```sql -- 添加新的侦听器条目到 listener.ora 文件 LISTENER_CUSTOM = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=myhost.example.com)(PORT=1522)) ) -- 启动新添加的侦听器 lsnrctl start LISTENER_CUSTOM -- 更新数据库实例指向这个定制化的侦听器 ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_CUSTOM' SCOPE=BOTH; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值