动态注册是在 instance 启动的时候, PMON 进程根据 init.ora 中的 instance_name,service_names 两个参数将实例和服务动态注册到 listener 中。
1 添加本地监听
[grid@db1 ~]$ srvctl add listener -l listener
PRCN-3004 : Listener LISTENER already exists
2 启动本地监听
[root@db1 grid]# crsctl start resource ora.LISTENER.lsnr
CRS-2672: Attempting to start 'ora.LISTENER.lsnr' on 'db2'
CRS-2676: Start of 'ora.LISTENER.lsnr' on 'db2' succeeded
3 查看监听配置
[root@db1 grid]# srvctl config listener
Name: LISTENER
Network: 1, Owner: root
Home: <CRS home>
End points: TCP:1521
4 查看集群中的本地监听器
[root@db1 grid]# srvctl config listener
5 查看本地监听状态
--节点1
[grid@db1 ~]$ lsnrctl status

进库里面验证
SQL> show parameter local_listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST=
192.168.56.101)(PORT=1521))
--节点2

进库里面验证
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST=
192.168.56.202)(PORT=1521))
每个节点都是链接自己的vip,说明外部应用链接本地监听是没有问题的。本地监听链接的三要素:ip地址、端口号、服务名
1 添加scanip
[root@db1 grid]# srvctl add scan -n scanip --这里是自己hosts解析的scanip,最多允许3个scanip
2 启动scan
[root@db1 grid]# srvctl start scan
[root@db1 grid]# srvctl config scan
SCAN name: scanip, Network: 1/192.168.11.0/255.255.255.0/eth0
SCAN VIP name: scan1, IP: /scanip/192.168.11.101
3 添加scan监听器
[root@db1 grid]# srvctl add scan_listener
[root@db1 grid]# srvctl start scan_listener
验证
[root@db1 grid]# crsctl stat res -t
[grid@db1 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node db2
说明scan监听器在节点2上,在节点2查看监听器的状态
[grid@db2 admin]$ lsnrctl status SCAN_LISTENER_SCAN1

--节点1
SQL> show parameter remote
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_dependencies_mode string TIMESTAMP
remote_listener string scanip:1521
remote_login_passwordfile string EXCLUSIVE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE
result_cache_remote_expiration integer 0
SQL> alter system set remote_listener='scanip:1521' sid='orcl1';
--指定sid,不然默认就设置两个节点的
--节点2
SQL> show parameter remote
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_dependencies_mode string TIMESTAMP
remote_listener string scanip:1521
remote_login_passwordfile string EXCLUSIVE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE
result_cache_remote_expiration integer 0
SQL> alter system set remote_listener='' sid='orcl2';
验证
[grid@db2 admin]$ lsnrctl status SCAN_LISTENER_SCAN1

虽然节点1的不走scanip,但是本地的监听是没有问题的,
[grid@db2 admin]$ srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): db1,db2
1 查看参数
SQL> show parameter remote
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_dependencies_mode string TIMESTAMP
remote_listener string
remote_login_passwordfile string EXCLUSIVE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE
result_cache_remote_expiration integer 0
2 设置参数
SQL> alter system set remote_listener='scanip:1521' sid='orcl1';
System altered.
SQL> show parameter remote
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_dependencies_mode string TIMESTAMP
remote_listener string scanip:1521
remote_login_passwordfile string EXCLUSIVE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE
result_cache_remote_expiration integer 0
3 验证
[grid@db2 admin]$ lsnrctl status SCAN_LISTENER_SCAN1

如果没有注册进去,就需要手工执行
SQL> alter system register;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959246/viewspace-2678976/ ,如需转载,请注明出处,否则将追究法律责任。