在12c中的RAC中,由于是flex cluster,常常会出现实例乱跑的现象,如实例3跑到了节点2上,实例2跑到节点3上。而且重启之后也还是如此。
我们可以这样处理,让原来乱跑的实例改回去:
1. 关闭数据库:
1 |
srvctl stop database -d cdbrac -stopoption immediate |
2.检查crs中记录的实例和节点对应关系的信息:
1 2 3 4 5 |
[oracle@12102-rac2 ~]$ crsctl stat res ora.cdbrac.db -p |grep SERVERNAME GEN_USR_ORA_INST_NAME@SERVERNAME(12102-rac1)=cdbrac_1 GEN_USR_ORA_INST_NAME@SERVERNAME(12102-rac2)=cdbrac_3 GEN_USR_ORA_INST_NAME@SERVERNAME(12102-rac3)=cdbrac_2 [oracle@12102-rac2 ~]$ |
3. 修改,需要使用unsupported参数。需要加unsupported参数的原因,参考这里。
1 2 |
crsctl modify res ora.cdbrac.db -attr "GEN_USR_ORA_INST_NAME@SERVERNAME(12102-rac2)=cdbrac_2" -unsupported crsctl modify res ora.cdbrac.db -attr "GEN_USR_ORA_INST_NAME@SERVERNAME(12102-rac3)=cdbrac_3" -unsupported |
4. 到每个节点检查,是否都已经改好:
1 2 3 4 5 |
[oracle@12102-rac2 ~]$ crsctl stat res ora.cdbrac.db -p |grep SERVERNAME GEN_USR_ORA_INST_NAME@SERVERNAME(12102-rac1)=cdbrac_1 GEN_USR_ORA_INST_NAME@SERVERNAME(12102-rac2)=cdbrac_2 GEN_USR_ORA_INST_NAME@SERVERNAME(12102-rac3)=cdbrac_3 [oracle@12102-rac2 ~]$ |
5. 重启crs(含DB)
(update 2016-05-17)发现其实只要关闭数据库后,用如下命令启动instance,指定到某个节点上,那么ora.cdbrac.db的资源会被自动更新,不需要手工修改。
1 2 3 |
srvctl stop database -d cdbrac -stopoption immediate srvctl start instance -d cdbrac -n 12102-rac2 -i cdbrac_2 srvctl start instance -d cdbrac -n 12102-rac3 -i cdbrac_3 |
(update 2017-03-28):这其实是因为policy-managed的关系,和flex cluster无关。参考Kamus的【Oracle Policy-Managed Cluster – Growing for DBaaS】