ORACLE RAC节点关机之后,service没有漂移到备用的节点

环境说明:oracle 11g r2,rhel linux
状况描述:使用crs_stat stop crs停掉集群组件时,运行在当前节点上的service没有漂移到备用节点上,导致数据库无法访问。
在搜索了大量帖子以及个人实验之后发现,要实现service自动漂移需要具备以下两个条件:
1、srvctl config service -d db_name -s service该命令下查看当前servie:
Preferred instances: service_name_1
Available instances: service_name_2
即在添加服务的时候就需要指定-r 和-a参数
2、使用sqlplus->shutdown immediate 关闭数据库实例,service会自动漂移,但是使用srvctl stop instance 则不会漂移(11.2以前的版本会自动漂移)
11.2及以后的版本需要使用如下命令关闭:
srvctl stop instance -d db_name -i instance_name -f 必须加上参数-f
12c的语法有所变更,如果不使用-force 或者-failover参数,关闭实例会报错
$ srvctl stop instance -d orcl -i orcl1
PRCD-1315 : failed to stop instances for database orcl
PRCR-1014 : Failed to stop resource ora.orcl.db
PRCR-1065 : Failed to stop resource ora.orcl.db
CRS-2529: Unable to act on ‘ora.orcl.db’ because that would require stopping or relocating ‘ora.orcl.orcl_service01.svc’, but the force option was not specified
如果想让实例漂移,则添加-failover参数:
srvctl stop instance -d db_name -i instance_name -failover
如果不想让service漂移,则添加-force参数:
srvctl stop instance -d db_name -i instance_name -orce
PS:个人感觉这个可能还可以指定service是否漂移,具体的可以-h查看更多参数了
3、其实上述还有另外一种处理方式,就是在关闭数据库之前,先把service手动漂移:
srvctl relocate service -d db_name -s service_name -i old_instance_name -t new_instance_name
4、关于srvctl add/config/remove service的一些操作:
srvctl add service
-d Unique name for the database
-s Service name
-r “” Comma separated list of preferred instances
-a “” Comma separated list of available instances
-P {NONE | BASIC | PRECONNECT} TAF policy specification
-e Failover type (NONE, SESSION, or SELECT)
-m Failover method (NONE or BASIC)
-q AQ HA notifications (TRUE or FALSE)
Usage: srvctl add service -d -s -u {-r “” | -a “”} [-f]
-d Unique name for the database
-s Service name
-u Add a new instance to service configuration
-r Name of new preferred instance
-a Name of new available instance
-f Force the add operation even though a listener is not configured for a network
-h Print usage
上述只列出了我自己了解的部分参数,其他的可以通过-h查看
config和remove相对简单
srvctl config service -d db_name -s service_name
srvctl remove service -d db_name -s service_name -i instance_name [-f]

你可能感兴趣的:(failover,oracle,rac,srvctl,add,service)