大家好,我是 JiekeXu,江湖人称“强哥”,青学会 MOP 技术社区主席,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCA、KCP、KCSM 等众多国产数据库认证证书,今天和大家一起看看 Oracle RAC 修改 VIP 和 SCANIP!欢迎关注我的微信公众号“JiekeXu DBA之路”,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!

前 言
有的时候,因为 Oracle RAC 迁移或者新版本升级,Oracle RAC 需要修改 VIP 和 SCANIP 来保证迁移前后应用 JDBC 连接串不变,对于 11gR2 及以上的版本不需要停机,操作起来也比较简单。本文适用于Oracle 11gR2 及以上版本。
一般而言,只有 10.2.0.3 之前的版本需要完全的停机。从 10.2.0.3 开始,ASM 和数据库实例对 VIP 资源的依赖关系已经被删除,所以修改 VIP 不需要停止 ASM 和数据库实例,只有当修改 VIP 时产生的客户端连接会受影响。如果修改只涉及到特定的节点,那么只有连接到对应节点的客户端链接在修改时会受影响。
环境说明
| Linux7 | 修改前 | 修改后 | 说明 |
|---|---|---|---|
| VIP | 192.168.221.162/163 | 192.168.221.185/186 | 同网段修改,网卡名不变,物理IP地址不变,端口不变 |
| SCANIP | 192.168.221.164/165/166 | 192.168.221.187 | SCAN地址由三个改为一个,端口不变 |
查看当前 VIP 配置
对于版本 11gR2 及以上, 使用 Grid Infrastructure 的拥有者执行下面的命令:
jieke-19crac-r1:/home/grid(+ASM1)$ /u01/app/19.0.0/grid/bin/srvctl config nodeapps -a
Network 1 exists
Subnet IPv4: 192.168.221.0/255.255.255.0/eth0, static
Subnet IPv6:
Ping Targets:
Network is enabled
Network is individually enabled on nodes:
Network is individually disabled on nodes:
VIP exists: network number 1, hosting node jieke-19crac-r1
VIP IPv4 Address: 192.168.221.162
VIP IPv6 Address:
VIP is enabled.
VIP is individually enabled on nodes:
VIP is individually disabled on nodes:
VIP exists: network number 1, hosting node jieke-19crac-r2
VIP Name: jieke-19crac-r2-vip
VIP IPv4 Address: 192.168.221.163
VIP IPv6 Address:
VIP is enabled.
VIP is individually enabled on nodes:
VIP is individually disabled on nodes:
验证 VIP 状态
crsctl status res -t – 以上命令应该显示 VIPs 状态为 ONLINE
ifconfig -a
(HP 平台请使用 netstat –in, Windows 平台请使用 ipconfig /all)
- VIP 逻辑网卡对应公网网卡
停止资源
停止 nodeapps 资源 (如果有必要的话,停止存在依赖关系的 ASM 和数据库资源)
对于版本 11gR2, 使用 Grid Infrastructure 的拥有者执行下面的命令:
Grid(+ASM1)$ srvctl stop instance -d jiekexu -n jieke-19crac-r1 ##(可以忽略) Grid(+ASM1)$ srvctl stop listener Grid(+ASM1)$ srvctl stop vip -n jieke-19crac-r1 -f Grid(+ASM1)$ srvctl stop vip -n jieke-19crac-r2 -f Grid(+ASM1)$ crsctl status res -t
此时 VIP1 和 LISTENER1 已经 Offline,并且 VIP1 不再绑定到公网网卡
ifconfig -a
修改 VIP 和相关属性
确定新的 VIP 地址/子网/网络掩码或者 VIP 对应的主机名,在 OS 层面修改网络配置信息,确认新的 VIP 地址应经注册到DNS 或者确认 /etc/hosts 文件(Unix/Linux 平台),\WINDOWS\System32\drivers\etc\hosts 文件(Windows平台)已经被修改。如果网卡信息被修改,确认在修改之前新的网卡在服务器上已经可用。
如下,VIP 替换为 221.185/186,SCANIP 替换为 187
[root@jieke-19crac-r1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.221.160 jieke-19crac-r1
192.168.221.161 jieke-19crac-r2
192.168.10.160 jieke-19crac-r1-priv
192.168.10.161 jieke-19crac-r2-priv
#192.168.221.162 jieke-19crac-r1-vip
192.168.221.185 jieke-19crac-r1-vip
#192.168.221.163 jieke-19crac-r2-vip
192.168.221.186 jieke-19crac-r2-vip
#192.168.221.164 jiekexu-scan
#192.168.221.165 jiekexu-scan
#192.168.221.166 jiekexu-scan
192.168.221.187 jiekexu-scan
使用 root 用户修改 VIP 资源
如果子网或网卡接口发生变化,请修改网络资源。
检查文档的语法是否正确,因为每个“srvctl modify network”命令选项可能不同。
srvctl modify network [-netnum network_number] [-subnet subnet/netmask [/if1[|if2|...]]]
通过发出 srvctl config network 命令获取 network_number
# srvctl modify nodeapps -n <node> -A <new_vip_address or
new_vip_hostname>/<netmask>/<[if1[if2...]]>
# 例如:
# srvctl modify nodeapps -n <nodename>1 -A <nodename>1-nvip/255.255.255.0/<if_name>
从版本 11.2 开始,VIP 依赖于 network 资源(ora.net1.network),OCR 只记录 VIP 主机名或者 VIP 资源相关的 IP 地址。集群公网的属性(子网/网络掩码)通过网络资源记录。当 nodeapps 资源被修改后,network资源 (ora.net1.network)相关的属性也会随之被修改。
从 11.2.0.2 开始,如果只修改子网/网络掩码信息,网络资源可以通过以下的 srvctl modify network 命令直接修改。
使用 root 用户:
# srvctl modify network -k <network_number>] [-S <subnet>/<netmask>[/if1[|if2...]]
例如:
# srvctl modify network -k 1 -S 110.XX.XX.0/255.255.255.0/<if_name>
注意:在 12.1.0.1 的版本上由于 Bug 16608577 - CANNOT ADD SECOND PUBLIC INTERFACE IN ORACLE 12.1 ,srvctl
modify network 的命令会失败并提示:
# srvctl modify network -k 1 -S 110.XX.XX.0/255.255.255.0/<if_name>
PRCT-1305 : The specified interface name "<if_name>2" does not match the existing network interface name "
<if_name>1"
需要通过以下workaround来解决:
# srvctl modify network -k 1 -S 110.XX.XX.0/255.255.255.0
# srvctl modify network -k 1 -S 110.XX.XX.0/255.255.255.0/<if_name>2
修改 VIP 地址,使用 root 用户仅在节点 1 执行
# /u01/app/19.0.0/grid/bin/srvctl modify nodeapps -n jieke-19crac-r1 -A 192.168.221.185/255.255.255.0/eth0
# /u01/app/19.0.0/grid/bin/srvctl config nodeapps -a
Network 1 exists
Subnet IPv4: 192.168.221.0/255.255.255.0/eth0, static
Subnet IPv6:
Ping Targets:
Network is enabled
Network is individually enabled on nodes:
Network is individually disabled on nodes:
VIP exists: network number 1, hosting node jieke-19crac-r1
VIP IPv4 Address: 192.168.221.185
VIP IPv6 Address:
VIP is enabled.
VIP is individually enabled on nodes:
VIP is individually disabled on nodes:
VIP exists: network number 1, hosting node jieke-19crac-r2
VIP Name: jieke-19crac-r2-vip
VIP IPv4 Address: 192.168.221.186
VIP IPv6 Address:
VIP is enabled.
VIP is individually enabled on nodes:
VIP is individually disabled on nodes:
启动 VIP 资源
# /u01/app/19.0.0/grid/bin/srvctl start vip -n jieke-19crac-r1
# /u01/app/19.0.0/grid/bin/srvctl start vip -n jieke-19crac-r2
查看 VIP 资源状态
/u01/app/19.0.0/grid/bin/srvctl status vip -n jieke-19crac-r1 /u01/app/19.0.0/grid/bin/srvctl status vip -n jieke-19crac-r2
如果监听没有,可使用如下命令启动查看
/u01/app/19.0.0/grid/bin/srvctl start listener -n jieke-19crac-r1 /u01/app/19.0.0/grid/bin/srvctl start listener -n jieke-19crac-r2 /u01/app/19.0.0/grid/bin/srvctl status listener -n jieke-19crac-r1 /u01/app/19.0.0/grid/bin/srvctl status listener -n jieke-19crac-r2 /u01/app/19.0.0/grid/bin/crsctl status res -t
修改 SCAN IP
/u01/app/19.0.0/grid/bin/srvctl modify scan -n jiekexu-scan /u01/app/19.0.0/grid/bin/srvctl modify scan_listener -u /u01/app/19.0.0/grid/bin/srvctl config scan /u01/app/19.0.0/grid/bin/srvctl config scan_listener /u01/app/19.0.0/grid/bin/srvctl start scan /u01/app/19.0.0/grid/bin/srvctl start scan_listener /u01/app/19.0.0/grid/bin/crsctl status res -t
检查监听及 SCAN 监听状态,如果没有注册,检查 local_listener 是否正确修改,如果还是原来的 IP,需要手动修改参数。
注意:ASM 和 DB 实例的 LOCAL_LISTENER参数,是 GI 自动设置的。VIP 的改变,LOCAL_LISTENER 会自动识别,并生效。但是由于 Bug 22824602,一些特定情况下。LOCAL_LISTENER 参数没有反应 VIP 的改变。官方给出的解决方法是重启受影响的节点的集群软件。
su - grid
lsnrctl status listener_scan1
lsnrctl status
sqlplus / as sysasm
show parameter local_listener
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.221.185)(PORT=11521))' sid='+ASM1';
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.221.186)(PORT=11521))' sid='+ASM2';
alter system register;
su - oracle
sqlplus / as sysdba
show parameter local_listener
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.221.185)(PORT=11521))' sid='jiekedb1';
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.221.186)(PORT=11521))' sid='jiekedb2';
alter system register;
修改主备库 TNS
su - oracle vim $ORACLE_HOME/network/admin/tnsnames.ora
检查主备库参数
show parameter arch
show parameter fal_client
show parameter fal_server
show parameter log_archive
show parameter standby_file_management

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
❤️ 欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————





