为何要增加scan ip:
由于数据库迁移升级整合后,需要在一体机上使用多个scan ip来对应原先多套生产库的IP(割接后保持原ip不变),这样可以确保业务应用无需修改数据源即可连接数据库服务。
核查oracle官方文档中说明:
之前也是记得oracle官方有说明使用/etc/hosts只能解析一个scan ip地址《Grid Infrastructure Single Client Access Name (SCAN) Explained (Doc ID 887522.1) 》截图如下:

并且其官方论坛还有类似的问题SCAN ISSUE (We have not any DNS server available for configure the Oracle RAC SCAN functionality)
,截图如下:

真的是这样吗?我们测试一下看看:
打开曾经1年多前的测试环境,两个节点oracle rac 19.8+CentOS Linux release 7.7.1908 (Core)
发现其实曾经测试过增加第2个scan ip 192.168.52.186,然后也测试了是可以正常连接的。
[oracle@rac1 ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#public
192.168.52.181 rac1
192.168.52.182 rac2
#vip
192.168.52.183 rac1-vip
192.168.52.184 rac2-vip
#priv
192.168.161.181 rac1-priv
192.168.161.182 rac2-priv
#scan
192.168.52.185 rac-scan
192.168.52.186 rac-scan
[oracle@rac1 ~]$ sqlplus jyc/jyc@192.168.52.185:1521/dbcenter
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Dec 2 19:59:53 2023
Version 19.8.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
ERROR:
ORA-28001: the password has expired
Changing password for jyc
New password:
Retype new password:
Password changed
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
SQL> select table_name from user_tables;
TABLE_NAME
--------------------------------------------------------------------------------
J
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
[oracle@rac1 ~]$ sqlplus jyc/jyc@192.168.52.186:1521/dbcenter
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Dec 2 20:00:16 2023
Version 19.8.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Last Successful login time: Sat Dec 02 2023 19:59:58 +08:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
SQL> select table_name from user_tables;
TABLE_NAME
--------------------------------------------------------------------------------
J
现在我们重新再添加第三个scan ip复习一下过程:
步骤如下:
1.grid核查现有的 SCAN IP 配置情况
[root@rac1 ~]# su - grid
Last login: Sat Dec 2 20:25:59 CST 2023
[grid@rac1 ~]$ srvctl config scan
SCAN name: rac-scan, Network: 1
Subnet IPv4: 192.168.52.0/255.255.255.0/ens33, static
Subnet IPv6:
SCAN 1 IPv4 VIP: 192.168.52.185
SCAN VIP is enabled.
SCAN 2 IPv4 VIP: 192.168.52.186
SCAN VIP is enabled.
[grid@rac1 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node rac1
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node rac2
[grid@rac1 ~]$ srvctl config scan_listener
SCAN Listeners for network 1:
Registration invited nodes:
Registration invited subnets:
Endpoints: TCP:1521
SCAN Listener LISTENER_SCAN1 exists
SCAN Listener is enabled.
SCAN Listener LISTENER_SCAN2 exists
SCAN Listener is enabled.
[grid@rac1 ~]$ ip a|grep 52.18
inet 192.168.52.181/24 brd 192.168.52.255 scope global noprefixroute ens33
inet 192.168.52.183/24 brd 192.168.52.255 scope global secondary ens33:1
inet 192.168.52.185/24 brd 192.168.52.255 scope global secondary ens33:2
[grid@rac1 ~]$ which ip
/usr/sbin/ip
[grid@rac1 ~]$ ssh rac2 "/usr/sbin/ip a|grep 52.18"
inet 192.168.52.182/24 brd 192.168.52.255 scope global noprefixroute ens33
inet 192.168.52.186/24 brd 192.168.52.255 scope global secondary ens33:2
inet 192.168.52.184/24 brd 192.168.52.255 scope global secondary ens33:3
[grid@rac1 ~]$ exit
logout
2.root修改所有节点的 /etc/hosts
[root@rac1 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#public
192.168.52.181 rac1
192.168.52.182 rac2
#vip
192.168.52.183 rac1-vip
192.168.52.184 rac2-vip
#priv
192.168.161.181 rac1-priv
192.168.161.182 rac2-priv
#scan
192.168.52.185 rac-scan
192.168.52.186 rac-scan
192.168.52.187 rac-scan
~
"/etc/hosts" 15L, 453C written
[root@rac1 ~]# ping rac-scan
PING rac-scan (192.168.52.185) 56(84) bytes of data.
64 bytes from rac-scan (192.168.52.185): icmp_seq=1 ttl=64 time=0.063 ms
64 bytes from rac-scan (192.168.52.185): icmp_seq=2 ttl=64 time=0.032 ms
64 bytes from rac-scan (192.168.52.185): icmp_seq=3 ttl=64 time=0.032 ms
^C
--- rac-scan ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.032/0.042/0.063/0.015 ms
[root@rac1 ~]# ssh rac2
root@rac2's password:
Permission denied, please try again.
root@rac2's password:
Last failed login: Sat Dec 2 20:42:46 CST 2023 from rac1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sat Dec 2 19:54:49 2023 from 192.168.52.1
[root@rac2 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#public
192.168.52.181 rac1
192.168.52.182 rac2
#vip
192.168.52.183 rac1-vip
192.168.52.184 rac2-vip
#priv
192.168.161.181 rac1-priv
192.168.161.182 rac2-priv
#scan
192.168.52.185 rac-scan
192.168.52.186 rac-scan
192.168.52.187 rac-scan
~
"/etc/hosts" 15L, 453C written
[root@rac2 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#public
192.168.52.181 rac1
192.168.52.182 rac2
#vip
192.168.52.183 rac1-vip
192.168.52.184 rac2-vip
#priv
192.168.161.181 rac1-priv
192.168.161.182 rac2-priv
#scan
192.168.52.185 rac-scan
192.168.52.186 rac-scan
192.168.52.187 rac-scan
[root@rac1 ~]# ping rac-scan
PING rac-scan (192.168.52.185) 56(84) bytes of data.
64 bytes from rac-scan (192.168.52.185): icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from rac-scan (192.168.52.185): icmp_seq=2 ttl=64 time=0.033 ms
^C
--- rac-scan ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.029/0.031/0.033/0.002 ms
3.grid停止 scan 监听
[root@rac1 ~]# su - grid
Last login: Sat Dec 2 20:41:02 CST 2023
[grid@rac1 ~]$ srvctl stop scan_listener
[grid@rac1 ~]$ srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is not running
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is not running
4.grid停止 scan
[grid@rac1 ~]$ srvctl stop scan
[grid@rac1 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is not running
SCAN VIP scan2 is enabled
SCAN VIP scan2 is not running
5.root配置 scan
[grid@rac1 ~]$ which crsctl
/oracle/app/19c/grid/bin/crsctl
[grid@rac1 ~]$ srvctl modify scan -n rac-scan
PRCS-1034 : Failed to modify Single Client Access Name rac-scan
PRCN-2018 : Current user grid is not a privileged user
[grid@rac1 ~]$ exit
logout
[root@rac1 ~]# /oracle/app/19c/grid/bin/srvctl modify scan -n rac-scan
[root@rac1 ~]# /oracle/app/19c/grid/bin/srvctl modify scan_listener -u
6.gird启动 scan
scan服务正常,可以看到自动增加了scan3
[root@rac1 ~]# su - grid
Last login: Sat Dec 2 20:44:13 CST 2023 on pts/0
[grid@rac1 ~]$ srvctl start scan
[grid@rac1 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node rac1
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node rac2
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node rac1
7.grid启动 scan listener监听
scan监听启动正常
[grid@rac1 ~]$ srvctl start scan_listener
[grid@rac1 ~]$ srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node rac1
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node rac2
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node rac1
8.grid查看 SCAN IP配置服务情况
新加的ip正常
[grid@rac1 ~]$ ip a|grep 52.18
inet 192.168.52.181/24 brd 192.168.52.255 scope global noprefixroute ens33
inet 192.168.52.183/24 brd 192.168.52.255 scope global secondary ens33:1
inet 192.168.52.185/24 brd 192.168.52.255 scope global secondary ens33:2
inet 192.168.52.187/24 brd 192.168.52.255 scope global secondary ens33:3
[grid@rac1 ~]$ ssh rac2 "/usr/sbin/ip a|grep 52.18"
inet 192.168.52.182/24 brd 192.168.52.255 scope global noprefixroute ens33
inet 192.168.52.184/24 brd 192.168.52.255 scope global secondary ens33:3
inet 192.168.52.186/24 brd 192.168.52.255 scope global secondary ens33:1
[grid@rac1 ~]$
[oracle@rac1 ~]$ crsctl stat res -t|grep scan
ora.scan1.vip
ora.scan2.vip
ora.scan3.vip
[oracle@rac1 ~]$ crsctl stat res -t|grep SCAN
ora.LISTENER_SCAN1.lsnr
ora.LISTENER_SCAN2.lsnr
ora.LISTENER_SCAN3.lsnr
[oracle@rac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DGLISTENER.lsnr
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.chad
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.net1.network
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.ons
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
1 ONLINE ONLINE rac1 STABLE
2 ONLINE ONLINE rac2 STABLE
3 ONLINE OFFLINE STABLE
ora.DATA.dg(ora.asmgroup)
1 ONLINE ONLINE rac1 STABLE
2 ONLINE ONLINE rac2 STABLE
3 OFFLINE OFFLINE STABLE
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE rac1 STABLE
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE rac2 STABLE
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE rac1 STABLE
ora.asm(ora.asmgroup)
1 ONLINE ONLINE rac1 Started,STABLE
2 ONLINE ONLINE rac2 Started,STABLE
3 OFFLINE OFFLINE STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
1 ONLINE ONLINE rac1 STABLE
2 ONLINE ONLINE rac2 STABLE
3 OFFLINE OFFLINE STABLE
ora.cvu
1 ONLINE ONLINE rac2 STABLE
ora.dgorcl.db
1 OFFLINE OFFLINE STABLE
2 OFFLINE OFFLINE STABLE
ora.dw.db
1 ONLINE ONLINE rac1 Open,HOME=/oracle/ap
p/oracle/product/19c
/dbhome_1,STABLE
2 ONLINE ONLINE rac2 Open,HOME=/oracle/ap
p/oracle/product/19c
/dbhome_1,STABLE
ora.integrated_office.db
1 OFFLINE OFFLINE STABLE
ora.orcl.db
1 OFFLINE OFFLINE STABLE
2 OFFLINE OFFLINE STABLE
ora.qosmserver
1 ONLINE ONLINE rac2 STABLE
ora.rac1.vip
1 ONLINE ONLINE rac1 STABLE
ora.rac2.vip
1 ONLINE ONLINE rac2 STABLE
ora.scan1.vip
1 ONLINE ONLINE rac1 STABLE
ora.scan2.vip
1 ONLINE ONLINE rac2 STABLE
ora.scan3.vip
1 ONLINE ONLINE rac1 STABLE
---------------------------------------------------------------------

9.oracle连接测试
使用新加scan ip 192.168.52.187可以连接导数据库。
[root@rac1 ~]# su - oracle
Last login: Sat Dec 2 19:58:38 CST 2023 on pts/0
[oracle@rac1 ~]$ sqlplus jyc/jyc@192.168.52.187:1521/dbcenter
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Dec 2 20:48:33 2023
Version 19.8.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Last Successful login time: Sat Dec 02 2023 20:00:16 +08:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
SQL> select table_name from user_tables;
TABLE_NAME
--------------------------------------------------------------------------------
J
SQL> exit
10.测试关闭节点1系统,看节点2顺利接管scan ip不?
关闭节点1后,scan ip都自动漂移到了节点2上正常服务。
[root@rac2 ~]# su - grid
Last login: Sat Dec 2 21:26:16 CST 2023
[grid@rac2 ~]$ srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node rac2
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node rac2
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node rac2
[grid@rac2 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node rac2
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node rac2
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node rac2
[grid@rac2 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DGLISTENER.lsnr
ONLINE ONLINE rac2 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE rac2 STABLE
ora.chad
ONLINE ONLINE rac2 STABLE
ora.net1.network
ONLINE ONLINE rac2 STABLE
ora.ons
ONLINE ONLINE rac2 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
1 ONLINE OFFLINE STABLE
2 ONLINE ONLINE rac2 STABLE
3 ONLINE OFFLINE STABLE
ora.DATA.dg(ora.asmgroup)
1 ONLINE OFFLINE STABLE
2 ONLINE ONLINE rac2 STABLE
3 OFFLINE OFFLINE STABLE
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE rac2 STABLE
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE rac2 STABLE
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE rac2 STABLE
ora.asm(ora.asmgroup)
1 ONLINE OFFLINE STABLE
2 ONLINE ONLINE rac2 Started,STABLE
3 OFFLINE OFFLINE STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
1 ONLINE OFFLINE STABLE
2 ONLINE ONLINE rac2 STABLE
3 OFFLINE OFFLINE STABLE
ora.cvu
1 ONLINE ONLINE rac2 STABLE
ora.dgorcl.db
1 OFFLINE OFFLINE STABLE
2 OFFLINE OFFLINE STABLE
ora.dw.db
1 ONLINE OFFLINE Instance Shutdown,ST
ABLE
2 ONLINE ONLINE rac2 Open,HOME=/oracle/ap
p/oracle/product/19c
/dbhome_1,STABLE
ora.integrated_office.db
1 OFFLINE OFFLINE STABLE
ora.orcl.db
1 OFFLINE OFFLINE STABLE
2 OFFLINE OFFLINE STABLE
ora.qosmserver
1 ONLINE ONLINE rac2 STABLE
ora.rac1.vip
1 ONLINE INTERMEDIATE rac2 FAILED OVER,STABLE
ora.rac2.vip
1 ONLINE ONLINE rac2 STABLE
ora.scan1.vip
1 ONLINE ONLINE rac2 STABLE
ora.scan2.vip
1 ONLINE ONLINE rac2 STABLE
ora.scan3.vip
1 ONLINE ONLINE rac2 STABLE
--------------------------------------------------------------------------------
[grid@rac2 ~]$ sqlplus jyc/jyc@192.168.52.187:1521/dbcenter
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Dec 2 21:33:57 2023
Version 19.8.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Sat Dec 02 2023 20:48:33 +08:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
SQL> select table_name from user_tables;
TABLE_NAME
--------------------------------------------------------------------------------
J
小结:
ping rac-scan虽然只能解析到1个地址192.168.52.185,但scan监听服务是都可以启动的,通过ip端口也是可以正常访问数据库的。


各位说说oracle的这个官方文档和论坛里的专家表述有问题吗?
实际测试结论:(经过了1个月有机会测试到XD一体机)
后来在x9m一体机上测试,发现oracle exadata x9m确实只能识别到/etc/hosts中排在前面的第一个scan ip,也就是说符合官方文档说的只能解析使用一个scan ip,无法增加scan ip。而在普通的服务器以及oda x8上是可以增加scan ip的。




