oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

时间:2023-12-11 11:18:38

结构如下:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

说明:

节点IP,主机名的修改步骤来自ORACLE support文档:

如何修改集群的公网信息(包括 VIP) (文档 ID 1674442.1)

实验环境情况如下:

实验

节点名称

数据库实例名

操作系统

数据库版本

公网IP/vip修改

rac1/rac3(旧机器)

ogg1/ogg3

Linux 6.X

Oracle

11.2.0.4

公网网卡/vip网卡修改

rac1/rac2(新机器)

orcl1/orcl2

racdb1/racdb2

Linux 6.X

Private IP/网卡修改

rac1/rac2(新机器)

orcl1/orcl2

Linux 6.X

grid:GRID_HOME 名称为 ORACLE_HOME 路径为:/u01/app/11.2.0/grid

oracle:ORACLE_HOME 路径为:/u01/app/oracle/product/11.2.0/dbhome_1

注意:

在我们修改RAC的IP 地址之前,我们需要先备份一下OCR 和GPNP profile 文件,因为IP 地址信息是记录在OCR中的,从Oracle 11.2.0.2 之后,private network 的配置除了记录在OCR中之外,还会记录在GPNP profile里。

--任意一节点手工执行OCR的备份

[root@rac1 ~]# /u01/app/11.2.0/grid/bin/ocrconfig -manualbackup

查看ocr的手工备份:

[root@rac1 ~]# /u01/app/11.2.0/grid/bin/ocrconfig –showbackup

用grid用户两个节点执行备份:

$ cd $ORACLE_HOME/gpnp/`hostname`/profiles/peer/

$ cp -p profile.xml profile.xml.bak

1. 修改公网对应的主机名

1.  步骤

集群公网对应的主机名是在安装时输入的,并且被记录在 OCR 中。这个主机名在安装之后是不能修改的。唯一的修改方法是删除节点,修改主机名,之后将节点重新添加到集群,或者直接重新安装集群软件,并完成后续的克隆配置。

2. 只修改公网 IP或者VIP

注意:

以下的修改可以使用滚动的方式完成,例如:每次修改一个节点。

只修改公网 IP或者VIP,但是不修改网卡、子网或网络掩码信息,或者只是修改MAC地址,而不需要修改其他信息;

如果只需要修改公网 IP 地址或者VIP,而且新的地址仍然在相同的子网和相同的网络接口上,或者只是修改公网IP的MAC地址,IP/interface/subnet/netmask仍旧保持不变,集群层面不需要做任何修改,所有需要的修改是在OS层面反映IP地址的变化。

1.  关闭 Oracle 集群管理软件

1、关闭监听

grid可以分别执行lsnrctl stop

2、关闭数据库

srvctl stop database -d ogg

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

3、关闭集群软件

所有节点ROOT关闭:

/u01/app/11.2.0/grid/bin/crsctl stop has

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

2. 修改

在网络层面,DNS和/etc/hosts文件中修改IP地址,或者直接修改MAC地址

查看IP详细情况:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

# racdg1

172.16.10.220  racdg1

172.16.10.222  racdg1-vip

192.168.10.220 racdg1-priv

# scan-ip

172.16.10.225 scandg-vip

# racdg3

172.16.10.231  racdg3

172.16.10.232  racdg3-vip

192.168.10.231 racdg3-priv

1. 现在需要修改成:

# racdg1

172.16.10.200  racdg1

172.16.10.202  racdg1-vip

192.168.10.220 racdg1-priv

# scan-ip

172.16.10.225 scandg-vip

# racdg3

172.16.10.211  racdg3

172.16.10.212  racdg3-vip

192.168.10.231 racdg3-priv

2. 以及网卡信息也进行修改

vi /etc/sysconfig/network-scripts/ifcfg-bond0

IPADDR=XXX

3. 重新启动 Oracle 集群管理软件

ROOT启动:

/u01/app/11.2.0/grid/bin/crsctl start has

查看修改后的IP以及集群资源状态:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

由于我是公有IP 和VIP一起修改,VIP 节点1,节点3都正常。

节点1:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点3:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点PUBLIC,VIP修改成功。

3. 改公网网卡(子网或网络掩码信息)

1. 说明

注意:

如果修改涉及到了不同的子网(网络掩码)或者网卡,需要将 OCR 中已经存在的网卡信息删除并重新添加新的信息。在以下的示例中子网从 172.16.10.X修改为 172.16.20.X,需要执行两个步骤 –首先’delif’,接下来 ‘setif’:

然后,在操作系统层面进行修改。除非 OS 层面的修改需要重新启动节点,否则不需要重启 Oracle 集群管理软件。修改可以使用滚动的方式完成。

一旦公网信息被修改,与其相关的 VIP 和 SCAN VIP 也需要修改,请参考情况4和情况5。

2. 修改

情况介绍:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点1运行的VIP,SCAN-IP,PUBLIC如下:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2运行的VIP,PUBLIC IP如下:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

现在需要修改成公有网卡的信息如下(早就准备好网卡和IP):

节点1:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

即把原先172.16.10.X换成,172.16.20.X。

对于ORACLE 11G R2.需要两个节点执行以下,命令,且由于更改后,VIP,SCAN-IP都需要相应的修改成对于网卡的网段IP,数据库不需要停,但是业务用不了VIP,所以还是建议停止数据库。

SUPPORT官方模板如下:

% $CRS_HOME/bin/oifcfg/oifcfg delif -global <if_name>[/<subnet>]

% $CRS_HOME/bin/oifcfg/oifcfg setif -global <if_name>/<subnet>:public

例如:

% $CRS_HOME/bin/oifcfg delif -global eth0/10.2.156.0

% $CRS_HOME/bin/oifcfg setif -global eth0/10.2.166.0:public

以下操作步骤:

  • 停止数据库

srvctl stop database -d racdb

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

  • 修改公网网卡

查看信息:

/u01/app/11.2.0/grid/bin/oifcfg iflist

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改:(先删除,在添加,这里IP 地址最一个为0,代表的是一个网段。)

注意: 11gR2,删除命令要求集群在所有节点运行,否则报错PRIF-33 和 PRIF-32。

l  节点1删除:

/u01/app/11.2.0/grid/bin/oifcfg delif -global eth0/172.16.10.0

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

l  节点2删除;

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

l  节点1和节点2添加公网网卡:

/u01/app/11.2.0/grid/bin/oifcfg setif -global eth2/172.16.20.0:public

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

/u01/app/11.2.0/grid/bin/oifcfg setif -global eth2/172.16.20.0:public

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改后验证:

节点1:

/u01/app/11.2.0/grid/bin/oifcfg getif -global

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

/u01/app/11.2.0/grid/bin/oifcfg getif –global

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改成功(后续还需要修改VIP,SCAN-IP)。

4. 修改 VIP 相关的公网信息

 1. 说明

一般而言,只有 10.2.0.3 之前的版本需要完全的停机。从 10.2.0.3 开始,ASM 和数据库实例对 VIP 资源的依赖关系已经被删除,所以修改 VIP 不需要停止 ASM 和数据库实例,只有当修改 VIP 时产生的客户端连接会受影响。如果修改只涉及到特定的节点,那么只有连接到对应节点的客户端链接在修改时会受影响。

首先,请参考情况3以确保公网信息被修改。如果在 OS 层面的网络修改后发生了节点或者集群管理软件重启,VIP 将不会被启动,请跳过步骤“修改 VIP 和相关属性”。

2. 修改步骤

11g RAC R2修改如下

1、查看节点1,节点2 VIP相关公网信息

节点1:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

版本 10g 和 11gR1, 使用 Oracle 集群管理软件的拥有者执行下面的命令:

$ srvctl config nodeapps -n <node> -a

例如:

$ srvctl config nodeapps -n racnode1 -a

VIP exists.: /racnode1-vip/101.17.80.184/255.255.254.0/eth1

2、查看VIP 状态

crsctl stat res -t

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

3、停止 nodeapps 资源 (如果有必要的话,停止存在依赖关系的 ASM 和数据库资源):

对于版本 10g 和 11gR1, 使用 Oracle 集群管理软件的拥有者执行下面的命令:

$ srvctl stop instance -d <db_name> -i <inst_name>   (对于 10.2.0.3 及以上版本,可以忽略)

$ srvctl stop asm -n <node_name>                     (对于 10.2.0.3 及以上版本,可以忽略)

$ srvctl stop nodeapps -n <node_name>

例如:

$ srvctl stop instance -d RACDB -i RACDB1

$ srvctl stop asm -n racnode1

$ srvctl stop nodeapps -n racnode1

对于版本 11gR2, 使用 Grid Infrastructure 的拥有者执行下面的命令:

$ srvctl stop instance -d <db_name> -n <node_name>   (可以忽略)

$ srvctl stop vip -n <node_name> -f

例如:

$ srvctl stop instance -d RACDB -n racnode1

$ srvctl stop vip -n racnode1 -f  (11gR2需要使用 -f 选项停止 listener 资源,否则会报错误)

由于我的数据库已经停止,直接停止节点vip资源。

srvctl stop vip -n rac1 -f

srvctl stop vip -n rac2 -f

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

查看:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

停止成功。

4. 确定新的 VIP 地址/子网/网络掩码或者 VIP 对应的主机名,在 OS 层面修改网络配置信息,确认新的 VIP 地址应经注册到 DNS 或者确认 /etc/hosts 文件(Unix/Linux 平台),\WINDOWS\System32\drivers\etc\hosts 文件(Windows平台)已经被修改。如果网卡信息被修改,确认在修改之前新的网卡在服务器上已经可用。

原来VIP:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

现在修改成:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

5、使用 root 用户修改 VIP 资源

# srvctl modify nodeapps -n <node> -A <new_vip_address or new_vip_hostname>/<netmask>/<[if1[if2...]]>

例如:

# srvctl modify nodeapps -n racnode1 -A racnode1-nvip/255.255.255.0/eth2

注意 1:

从版本 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.11.70.0/255.255.255.0/eth2

如果其他属性没有变化,不需要修改 VIP 或 SCAN VIP。

注意 2:

在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.11.70.0/255.255.255.0/eth2

PRCT-1305 : The specified interface name "eth2" does not match the existing network interface name "eth1"

需要通过以下workaround来解决:

# srvctl modify network -k 1 -S 110.11.70.0/255.255.255.0

# srvctl modify network -k 1 -S 110.11.70.0/255.255.255.0/eth2

11G R2修改VIP如下;

帮助命令:

/u01/app/11.2.0/grid/bin/srvctl modify nodeapps -n rac1 -h

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改如下:

节点1:

/u01/app/11.2.0/grid/bin/srvctl modify nodeapps -n rac1 -A rac1-vip/255.255.255.0/eth2

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

/u01/app/11.2.0/grid/bin/srvctl modify nodeapps -n rac2 -A rac2-vip/255.255.255.0/eth2

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

查看修改:

/u01/app/11.2.0/grid/bin/srvctl config nodeapps -a

节点1:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改成功。

3. 11gR2 修改 VIP 主机名

11gR2 修改 VIP 主机名,但是不修改IP地址;如果即需要修改VIP,又需要修改主机名,建议先修改IP,再修改主机名。

只把 VIP 主机名从 racnode1-vip 修改为 racnode1-nvip,IP 地址和其他属性保持不变。

如果 IP 地址保持不变,以上的命令将不会改变命令‘crsctl stat res ora.racnode1.vip -p’的输出中项目 USR_ORA_VIP 的值。请使用下面的命令:

# crsctl modify res ora.racnode1.vip -attr USR_ORA_VIP=racnode1-nvip

验证项目 USR_ORA_VIP 的改变:

# crsctl stat res ora.racnode1.vip -p |grep USR_ORA_VIP

实验室把:rac1-vip,rac2-vip改成:rac1vip,rac2vip

操作如下:

crsctl stat res -t

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

$ srvctl stop instance -d <db_name> -n <node_name>   (可以忽略)

$ srvctl stop vip -n <node_name> -f

操作如下:

[grid@rac2 ~]$ srvctl stop database -d orcl

[grid@rac2 ~]$ srvctl stop vip -n rac1 -f

[grid@rac2 ~]$ srvctl stop vip -n rac2 -f

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

crsctl stat res -t

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

任意一节点修改VIP:

 

/u01/app/11.2.0/grid/bin/crsctl modify res ora.rac1.vip -attr USR_ORA_VIP=rac1vip

/u01/app/11.2.0/grid/bin/crsctl modify res ora.rac2.vip -attr USR_ORA_VIP=rac2vip

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

验证修改VIP-HOSTNAME是否成功:

/u01/app/11.2.0/grid/bin/crsctl stat res ora.rac1.vip -p |grep USR_ORA_VIP

/u01/app/11.2.0/grid/bin/crsctl stat res ora.rac2.vip -p |grep USR_ORA_VIP

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改所有节点/etc/hosts

修改后结果:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

启动VIP:

srvctl start vip -n rac1

srvctl start vip -n rac2

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

查看修改后的结果:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改成功。

4启动 nodeapps 和其它资源

对于版本 10g 和 11gR1, 使用 Oracle 集群管理软件的拥有者执行下面的命令:

$ srvctl start nodeapps -n <node_name>

$ srvctl start asm -n <node_name>               (对于 10.2.0.3 及以上版本,可以忽略)

$ srvctl start instance -d <dbanme> -i <inst>   (对于 10.2.0.3 及以上版本,可以忽略)

例如:

$ srvctl start nodeapps -n racnode1

$ srvctl start asm -n racnode1

$ srvctl start instance -d RACDB -i RACDB1

对于版本 11gR2, 使用 Grid Infrastructure 的拥有者执行下面的命令:

$ srvctl start vip -n <node_name>

$ srvctl start listener -n <node_name>

$ srvctl start instance -d <db_name> -n <node_name> (可以忽略)

例如:

$ srvctl start vip -n racnode1

$ srvctl start listener -n racnode1

$ srvctl start instance -d RACDB -n racnode1

[grid@rac1 peer]$ srvctl start vip -n rac1

[grid@rac1 peer]$ srvctl start vip -n rac2

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

注意:如果网络的属性做了修改,比如netmask 等做了修改,需要重新启动nodeapps

验证新的 VIP 状态为 ONLINE 并且已经绑定到集群公网网卡

$ crs_stat -t (对于版本 11gR2,使用命令 $ crsctl stat res –t)

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

$ ifconfig -a

(HP 平台请使用 netstat –in, Windows 平台请使用 ipconfig /all)

如果集群中的其它节点也需要类似的改变,请重复同样的步骤。

其它

如果需要,修改 listener.ora, tnsnames.ora 和 LOCAL_LISTENER/REMOTE_LISTENER 参数反应 VIP 的改变。

注意: ASM和DB实例的LOCAL_LISTENER参数,是GI自动设置的。VIP的改变,LOCAL_LISTENER会自动识别,并生效。但是由于Bug 22824602,一些特定情况下。 LOCAL_LISTENER参数没有反应 VIP 的改变。workaround解决方法是重启受影响的节点的集群软件。

5. 修改SCAN-IP

注意: 文档来自SUPPORT ID 952903.1(本次只是修改SCAN IP,不修改SCAN端口)

1、停止资源

$ $GRID_HOME/bin/srvctl stop scan_listener

$ $GRID_HOME/bin/srvctl stop scan

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

查看:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

停止成功。

2、修改SCAN IP

查看之前的SCAN:

/u01/app/11.2.0/grid/bin/srvctl config scan

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改SCAN IP:

修改所有/etc/hosts scan-ip

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

/u01/app/11.2.0/grid/bin/srvctl modify scan -n scan-vip (一边修改即可)

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

查看是否修改成功:

节点1:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改成功。

如果不需要修改私有IP,直接重启集群集群即可。

启动SCAN到节点1

srvctl start scan -n rac1

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

crsctl stat res -t

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

6. 更改私有主机名

文档来自support ID 2103317.1,在 11.2 oracle clusterware 之前的版本,私有主机名被记录在 OCR 中, 它不能被更改,一般情况下私有主机名是不需要改变的,它附属的ip 可以被更改,只有使用删除/添加节点或重新安装 oracle clusterware 来更改私有主机名。

在 11.2 Grid 结构中,私有主机名不在记录在 OCR 中,并且不存在依赖关系,所以它可以在 /etc/hosts 文件中任意更改。

7. 只更改私有 ip 地址

只更改私有 ip 地址不更改网卡、子网及子网掩码信息,不更改网卡、子网及子网掩码信息。

私有 ip

节点1地址 192.168.10.21 更改至 192.168.10.31;

节点2地址:192.168.10.22 更改至 192.168.10.32;

网卡名字及子网保持不变。或者只改变MAC地址,保持private IP address/interface name/subnet/network不变

只要关闭需要更改主机上的 oracle clusterware 软件,在操作系统层,根据需求更改私有 ip 地址或者MAC地址(如:/etc/hosts,OS network config 等等), 再重启启动 oracle clusterware 软件即可。

查看当前的私有IP地址:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

两个节点关闭数据后,关闭集群资源,操作系统层面修改IP。

/u01/app/11.2.0/grid/bin/crsctl stop has ROOT停止集群资源,然后修改IP,重启网络服务

service network restart

/u01/app/11.2.0/grid/bin/crsctl start has 启动集群服务

查看修改是否成功:

节点1:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

修改成功。

8. 只改变私有网络的 MTU 值

将私有网络 MTU 值从1500更改至9000(激活 jumbo frame),网卡名字保持不变。

1. 关闭集群中的所有节点。

2. 在操作系统层更改 MTU 需要设定的值,确保更改后 MTU 值的私有网卡可用并且可以 ping 通集群中的所有节点。

3. 重启所有节点的集群管理软件

9. 更改私有网卡名字,子网及掩码

提示:当子网掩码被更改,但是子网标识没有改变时,如:

子网掩码从 255.255.0.0 更改至 255.255.255.0,私网 ip 为 192.168.10.x,子网标识保持不变 192.168.10.0,网卡名字没有改变.关闭所有需要更改的主机 oracle clusterware,在操作系统层修改私有网络IP地址(如:操作系统 网络配置等等)。并重启集群中所有节点,请注意,这种更改是不能采用轮转方式(rolling manaer)完成的。

当子网掩码被改变,附属的子网标识也经常会被改变,oracle 在 OCR 中只存储网卡名字及子网标识的信息,而不存储子网掩码。可以使用oifcfg命令完成这样的变更,oifcfg 命令只需在集群中的一个节点执行,而不是所有节点。

1. 11gR2以前的集群管理软件

1. 使用 oifcfg 命令添加新的私有网络信息,删除旧的私有网络信息:

% $ORA_CRS_HOME/bin/oifcfg/oifcfg setif -global <if_name>/<subnet>:cluster_interconnect

% $ORA_CRS_HOME/bin/oifcfg/oifcfg delif -global <if_name>[/<subnet>]]

举例:

% $ORA_CRS_HOME/bin/oifcfg setif -global eth3/192.168.2.0:cluster_interconnect

% $ORA_CRS_HOME/bin/oifcfg delif -global eth1/192.168.1.0

校验结果

% $ORA_CRS_HOME/bin/oifcfg getif

eth0 10.2.166.0 global public

eth3 192.168.2.0 global cluster_interconnect

2. 关闭 Oracle Clusterware

使用 root 用户执行: # crsctl stop crs

3. 在操作系统层面更改网络配置,修改集群内所有节点的 /etc/hosts 文件,确保集群内所有节点新的网络设置都已生效:

% ping <private hostname/IP>

% ifconfig -a  on Unix/Linux

% ipconfig /all on windows

4. 重新启动 Oracle Clusterware

以 root 用户:# crsctl start crs

提示:如果在 linux 系统上正在运行 OCFS2,则可能还需要更改 OCFS2 运行在其它节点的私有 ip 地址

2. 11gR212c上没有使用flex ASM 的版本

针对于 11.2 的结构,私有网络配置信息不但保存在 OCR 中,而且还保存在 gpnp 属性文件中。如果私有网络不可用或定义错误,则 CRSD 进程将无法启动,任何随后对于 OCR 的改变都是不可能完成的,因此需要注意当对私有网络的配置信息进行修改,正确的改变顺序是非常重要的。同时请注意,手动修改 gpnp 属性文件是不支持的。

在对集群中所有节点操作之前,请先备份 profile.xml 配置文件。作为 grid 用户执行:

用grid用户两个节点执行备份(首页也说过的):

$ cd $ORACLE_HOME/gpnp/`hostname`/profiles/peer/

$ cp -p profile.xml profile.xml.bak

  • 确保集群中的所有节点都已启动并正常运行

[grid@rac1 ~]$ crsctl stat res –t

  • 使用 grid 用户获取网卡

$ oifcfg getif

节点1:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

都是用的eth1网卡,192.168.10.0 网段。

  • 现在要把私有网卡修改成:eth3/192.168.20.0(注意,都是先添加,后删除,官方没有说那个节点执行,测试只需要一个节点执行,且网卡名称要所有节点一样)

节点1,节点2加入新的集群私网通讯信息:

$ oifcfg setif -global <interface>/<subnet>:cluster_interconnect

节点1:

oifcfg getif

oifcfg setif -global eth3/192.168.20.0:cluster_interconnect

oifcfg getif

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

oifcfg setif -global eth3/192.168.20.0:cluster_interconnect

oifcfg getif

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

以下是官方模板命令:

例如:

a. 加入新的并有相同子网的接口卡 bond0

$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect

b. add a new subnet with the same interface name but different subnet or new interface name

$ 添加一个新的子网具有相同网卡的名称但不同的子网或新的网卡名

$ oifcfg setif -global eth3/192.168.1.96:cluster_interconnect

注意:

1. 如果网卡不可用,需要使用 -global 选项来完成,而不能使用 –node 选项,它将导致节点被驱逐。

2. 如果网卡在服务器上可用,则可以使用下面命令识别子网地址:

$ oifcfg iflist

它列出了网卡及子网地址,即使 oracle 集群没有启动,此命令也可以被执行。请注意,子网掩码有可能不是 x.y.z.0 的格式,它可以是 x.y.z.24,x.y.z.64 或 x.y.z.128 等格式。如:

$ oifcfg iflist

lan1 18.1.2.0

lan2 10.2.3.64        << 这是一个私有网络子网地址附属的私有网络 ip 地址为 10.2.3.86

3. 如果需要添加第二个私有网络,而不是替换现有的私有网络,则需要保证两个网卡的 MTU 值相同,否则实例将无法启动并报如下错误信息:

ORA-27504: IPC error creating OSD context

ORA-27300: OS system dependent operation:if MTU failed with status: 0

ORA-27301: OS failure message: Error 0

ORA-27302: failure occurred at: skgxpcini2

ORA-27303: additional information: requested interface lan1:801 has a different MTU (1500) than lan3:801 (9000), which is not supported. Check output from ifconfig command

4. 对于 11gR2 或更高版本, 不建议在 ASM 或 database 的 spfile 或 pfile 中设置 cluster interconnects 参数。无论什么原因如果设置了该参数,则需要在集群关闭之前需将新的私网 ip 地址设置在 spfile 或 pfile 中,否则它会由于私网信息不匹配而导致重启失败。

  • 使用 root 用户关闭集群中所有的节点并禁用集群:

节点1,2执行以下命令:

/u01/app/11.2.0/grid/bin/crsctl stop crs

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

/u01/app/11.2.0/grid/bin/crsctl disable crs

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

  • 使网络配置信息都已在 OS 层更改完成,确保更改完成后新的接口在所有的节点都可用有效:

1.修改所有节点/etc/hosts 文件。

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

2.OS所有节点修改私网IP

准备好所有节点即将更改的私有网卡,并且配置好即将修改的私有地址(OS层提前修改好)。

  • 使用 root 用户激活 oracle 集群并重新启动集群中的所有节点:

/u01/app/11.2.0/grid/bin/crsctl enable crs

/u01/app/11.2.0/grid/bin/crsctl start crs

节点1:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点2:

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

  • 如果需要去除旧接口卡信息:

$ oifcfg delif -global <if_name>[/<subnet>]

任意一节点执行:

例如节点2:

oifcfg delif -global eth1/192.168.10.0

oifcfg getif

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

节点1查看:

oifcfg getif

oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)

3. 对于 12C flex ASM 结构(support 原文,没有环境测试)

请检查上面部分,并关注提示部分,按下面命令做备份:

在对集群中所有节点操作之前,请先备份 profile.xml 配置文件。 作为 grid 用户执行:

$ cd $GRID_HOME/gpnp/<hostname>/profiles/peer/

$ cp -p profile.xml profile.xml.bk

1. 确保 oracle 集群中的所有节点都已正常运行。

2. 使用 grid 用户:

得到现有信息,如下:

$ oifcfg getif

eth1 100.17.10.0 global public

eth0 192.168.0.0 global cluster_interconnect,asm

上面例子显示网卡 ech0 被用作集群私网和 ASM 网络。

加入新的集群私网信息:

$ oifcfg setif -global <interface>/<subnet>:cluster_interconnect[,asm]

如:

a. 加入一个新的具有相同子网网卡 bond0

$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect,asm

b. 加入一个新的并具有相同网卡名字的子网,或不同子网和具有新的接口名字

$ oifcfg setif -global eth0/192.68.10.0:cluster_interconnect,asm

$ oifcfg setif -global eth3/192.168.1.96:cluster_interconnect,asm

如果有不同的网络用于私有网络和 ASM 网络,则可以对其进行相应的调整。

3. 当 ASMLISTENER 正被用作私有网络,如果对其修改则会影响 ASMLISTENER。需要添加一个新的 ASMLISTENER 及新的网络配置。如果 ASM 的子网网络没有改变则跳过这一步。

3.1. 加入一个新的 ASMLISTENE(例:ASMNEWLISNR_ASM)及新的子网,使用 grid 用户:

$ srvctl add  listener -asmlistener -l <new ASM LISTENER NAME> -subnet <new subnet>

如:

$ srvctl add listener -asmlistener -l ASMNEWLSNR_ASM -subnet 192.168.10.0

3.2. 删除现有的 ASMLISTENER(这个例子中 ASMLSNR_ASM)并去除依赖关系,使用 grid 用户:

$ srvctl update listener -listener ASMLSNR_ASM -asm -remove -force

$ lsnrctl stop ASMLSNR_ASM

注意. 需要使用 –force 选项,否则会出现下面错误:

$ srvctl update listener -listener ASMLSNR_ASM -asm -remove

PRCR-1025 : Resource ora.ASMLSNR_ASM.lsnr is still running

$ srvctl stop listener -l ASMLSNR_ASM

PRCR-1065 : Failed to stop resource ora.ASMLSNR_ASM.lsnr

CRS-2529: Unable to act on 'ora.ASMLSNR_ASM.lsnr' because that would require stopping or relocating 'ora.asm', but the force option was not specified

3.3 校验配置信息:

$ srvctl config listener -asmlistener

$ srvctl config asm

4. 使用 root 用户关闭集群中的所有节点并禁用集群:

# crsctl stop crs

# crsctl disable crs

5. 在操作系统层面更改网络配置,更改之后,确保所有节点上的新网卡生效:

$ ifconfig -a

$ ping <private hostname>

6. 使用 root 用户激活 oracle 集群并重新启动集群中的所有节点:

# crsctl enable crs

# crsctl start crs

7. 删除旧的网卡信息:

$ oifcfg delif -global <if_name>[/<subnet>]

如:

$ oifcfg delif -global eth0/192.168.0.0

10.关于 11gR2 的一些注意事项

1. 关于 11gR2 的一些注意事项

1. 如果底层网络配置已经更改, 但是 oifcfg 尚未执行同样的变更,则重启 oracle 集群会导致 crsd 进程不能启动。

crsd.log 日志将会显示如下:

2010-01-30 09:22:47.234: [ default][2926461424] CRS Daemon Starting

..

2010-01-30 09:22:47.273: [ GPnP][2926461424]clsgpnp_Init: [at clsgpnp0.c:837] GPnP client pid=7153, tl=3, f=0

2010-01-30 09:22:47.282: [ OCRAPI][2926461424]clsu_get_private_ip_addresses: no ip addresses found.

2010-01-30 09:22:47.282: [GIPCXCPT][2926461424] gipcShutdownF: skipping shutdown, count 2, from [ clsinet.c : 1732], ret gipcretSuccess (0)

2010-01-30 09:22:47.283: [GIPCXCPT][2926461424] gipcShutdownF: skipping shutdown, count 1, from [ clsgpnp0.c : 1021], ret gipcretSuccess (0)

[ OCRAPI][2926461424]a_init_clsss: failed to call clsu_get_private_ip_addr (7)

2010-01-30 09:22:47.285: [ OCRAPI][2926461424]a_init:13!: Clusterware init unsuccessful : [44]

2010-01-30 09:22:47.285: [ CRSOCR][2926461424] OCR context init failure. Error: PROC-44: Error in network address and interface operations Network address and interface operations error [7]

2010-01-30 09:22:47.285: [ CRSD][2926461424][PANIC] CRSD exiting: Could not init OCR, code: 44

2010-01-30 09:22:47.285: [ CRSD][2926461424] Done.

以上错误显示操作系统层面的设置(oifcfg iflist)与 gpnp profile.xml 配置文件设置不匹配。

解决方法:恢复操作系统网络配置到最初的状态,启动 oracle 集群,然后再按照上面的步骤重新更改。

如果底层的网络并没有改变,但 oifcfg 已经被设置了一个错误的子网地址或接口名字,则会发生同样的问题。

2. 如果集群中的任何一个节点关闭,oifcfg 命令将会失败并显示错误:

$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect

PRIF-26: Error in update the profiles in the cluster

解决方案:启动 oracle 集群中没有运行的节点,确保集群中所有的节点都已启动,如果由于操作系统原因不能启动的节点,请先将此节点从集群中删除在执行私网网络变更。

3. 如果执行上面命令的的用户非 GI 的拥有者,则会出现相同的错误:

$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect

PRIF-26: Error in update the profiles in the cluster

解决方案:确保使用 GI 的拥有者登录并执行上面命令。

4. 从 11.2.0.2 开始,如果在没有加入一个新私有网卡,就试图删除最后一个私有网卡(集群私网)则会发生下面错误:

PRIF-31: Failed to delete the specified network interface because it is the last private interface

解决方案:在删除旧的私有网卡之前,先加入新的私有网卡。

5. 如果主机节点的 oracle 集群关闭在关闭状态,则会报下面错误:

$ oifcfg getif

PRIF-10: failed to initialize the cluster registry

解决方案:启动该主机节点上的 oracle 集群软件。

2. 关于 Windows 系统注意事项

更改网卡的语法在 windows/RAC 和Unix/Linux 集群是一样的,但是网卡名称会略有不同,在 windows 系统上,默认分配给接口通常的名称为:

Local Area Connection

Local Area Connection 1

Local Area Connection 2

如果使用一个网卡名称含有空格,则名称必须使用引号括起来,同时,请注意这是区分大小写的。例如,在 windows上,设置集群私网链接:

C:\oracle\product\10.2.0\crs\bin\oifcfg setif -global "Local Area Connection 1"/192.168.1.0:cluster_interconnect

然而,在 windows 上重新命名网卡按最佳实践更有意义,如重命名为”ocwpublic” 和”ocwprivate”。如果 oracle 集群安装完成后需要更改网卡名字,则需要运行”oifcfg”命令来添加新的网卡并删除旧的。综上所述。

您可以运行下面命令查看每个节点上可用的网卡名字。

oifcfg iflist -p -n

必须在每个节点上运行这个命令来验证网卡名称相同的定义。

3. oifcfg 命令

使用 oifcfg 命令更改网卡名字的影响

对于私网网卡,数据库将使用存储在 OCR 中定义为集群互联的网卡作为节点间缓存融合通信。在告警日志开始的时候,就会显示集群互联有效的信息。在参数清单。例如:

For pre 11.2.0.2:

Cluster communication is configured to use the following interface(s) for this instance

192.168.1.1

For 11.2.0.2+: (HAIP address will show in alert log instead of private IP)

Cluster communication is configured to use the following interface(s) for this instance

169.254.86.97

如果上面信息不正确,则实例需要重启以便 OCR 条目修正,这同样适用于 ASM 实例和数据库实例。在 windows 系统上,实例被关闭后,在 OCR 将被重读之前,还需要停止/启动 OracleService < SID >(或 OracleASMService < ASMSID > 。

Oifcfg 命令用法

查看 oifcfg 命令的全部选项,只需输入:

$ <CRS_HOME>/bin/oifcfg

例5 对于 11gR2 或以上版本的 HAIP 添加或删除集群私网

1. 添加另外的私有网络到现有的使用 HAIP 的集群中,作为 grid 用户执行:

$ oifcfg setif -global <interface>/<subnet>:cluster_interconnect

例如:

$ oifcfg setif -global enp0s8/192.168.57.0:cluster_interconnect

关闭 CRS 中的所有节点,通过重新启动 crs 中的所有节点,来使 HAIP 读入新的接口,不能使用滚动方式重启。

2. 在使用 HAIP 的集群中删除私有网络,作为 grid 用户执行:

$ oifcfg delif -global <if_name>

例如:

$ oifcfg delif -global enp0s8

HAIP 将切换至其它可用接口,在接口被删除后,集群/数据库会继续采用此方式运行。

删除多余的 HAIP 接口,应关闭 CRS 所有节点,然后重启 CRS 所有节点。不能采用以滚动的方式重新启动 CRS。