11gR2 RAC Service Not Failing Over To Other Node When Instance Is Shut Down (文档 ID 1324574.1)
适用于11.2.0.2后任何平台下的企业版
使用srvctl stop instance 让服务切换到可用实例上
在11.2之前的版本 通过srvctl stop 会将服务切换到可用实例上
示例
1) Create service called "grb_stest01" on GRB DB with GRB1 prefer and GRB2 available.
srvctl add service -d GRB -s grb_stest01 -r GRB1 -a GRB2
2) Check service created
srvctl config service -d GRB -a
==>
Service name: grb_stest01
Service is enabled
Server pool: GRB_grb_stest01
Cardinality: 1
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: NONE
Failover method: NONE
TAF failover retries: 0
TAF failover delay: 0
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: NONE
Preferred instances: GRB1
Available instances: GRB2
Service name: grb_test01
Service is enabled
Server pool: GRB_grb_test01
Cardinality: 1
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: NONE
Failover method: NONE
TAF failover retries: 0
TAF failover delay: 0
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: NONE
Preferred instances: GRB1
Available instances:
3) start grb_stest01 service
srvctl start service -d GRB -s grb_stest01
4) confirm the service is srunning on GRB1
srvctl status service -d GRB
==>
Service grb_stest01 is running on instance(s) GRB1
5) Stop instance using srvctl with imemediate(default) or abort
srvctl stop instance -d GRB -i GRB1
OR
srvctl stop instance -d GRB -i GRB1 -o abort
srvctl status service -d GRB
==>
Service grb_stest01 is not running
The service does not failover but stops
change
升级到11.2
这在11.2中可以预见的情况
如果在sqlplus里使用shutdown 关闭实例
那么10g和11g 都会将服务故障转移到可用的实例上去。
如果使用srvctl 关闭实例
在11.2之前,服务会转移到可用实例
11.2服务并不会转移但是服务会停掉
在11.2,如果希望服务转移到其他实例上那么需要在使用srvct 时指定-f选项
srvctl stop instance -d xxx -i xxx1 -f
还有一种选择是在通过srvctl 停止实例之前将服务搬迁到另一个实例上
srvctl relocate service -d exdb -s testsv -i exdb1 -t exdb2
solution
使用 -f选项将服务转移到可用实例上
srvctl stop instance -d GRB -i GRB1 -f
srvctl status service -d GRB
==>
Service grb_stest01 is running on instance(s) GRB2
在12c版本,情况不一样
1)如果停止实例不使用-force或-failover 选项,服务会依然运行在停止的实例上。这样就会有报错(PRCD-1315,PRCR-1014, PRCR-1065, CRS-2529
ie)
$srvctl config service -d orcl -s orcl_service01
Service name: orcl_service01
...
....
Preferred instances: orcl1
Available instances: orcl2
$srvctl status service -d orcl
Service orcl_service01 is running on instance(s) orcl1
$ 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
2)如果想将服务实例转移到其他实例上,需要使用-failover 来代替-force
ie)
$ srvctl status service -d orcl
Service orcl_service01 is running on instance(s) orcl1
$ srvctl stop instance -d orcl -i orcl1 -failover
$ srvctl status service -d orcl
Service orcl_service01 is running on instance(s) orcl2
3) 如果想要停止所有实例和服务那么使用-force选项
ie)
srvctl status service -d orcl -s orcl_service01
Service orcl_service01 is running on instance(s) orcl1
$ srvctl stop instance -d orcl -i orcl1 -force
$ srvctl status service -d orcl -s orcl_service01
Service orcl_service01 is not running.