RAC use Service to Separate Business Connection

1 DB ENV
---------------------------------------
OS: Linux 5
DB: 10.2.0.5
SID: gtsjk1,gtsjk2
-----------------------

10.148.63.114   gtdb-r1
10.148.63.115   gtdb-r1-vip
172.148.19.114  gtdb-r1-priv

10.148.63.116   gtdb-r2
10.148.63.117   gtdb-r2-vip
172.148.19.116  gtdb-r2-priv
----------------------------------------
2 Business DB Users

numen
topo

3 Business Target

 --App connection priority(pref) and in case instance down(avail):
          numen -> pref: gtsjk1 (115), avail: gtsjk2 (117)
          topo      -> pref: gtsjk1 (117), avail: gtsjk2 (115)

4 Create server side service with DBCA

numen  prefer: gtsjk1 available: gtsjk2  policy:basic
topo       prefer:
gtsjk2 available: gtsjk1  policy:basic

$srvctl config service -d gtsjk
numen PREF: gtsjk1 AVAIL: gtsjk2
topo PREF: gtsjk2 AVAIL: gtsjk1


!!Note: ensure local_listener is null

set linesize 180
col name for a30
col FAILOVER_METHOD for a20
col FAILOVER_TYPE for a20
col NETWORK_NAME for a20
select NAME,NETWORK_NAME,FAILOVER_METHOD,FAILOVER_TYPE,FAILOVER_RETRIES,FAILOVER_DELAY,ENABLED,GOAL,CLB_GOAL from dba_services
/


exec dbms_service.modify_service(service_name=>'numen',failover_method=>'BASIC',failover_type=>'SELECT',failover_retries=>180,failover_delay=>5);
exec dbms_service.modify_service(service_name=>'topo',failover_method=>'BASIC',failover_type=>'SELECT',failover_retries=>180,failover_delay=>5);


5 Connection Test

--Test scripts
-testconnect.sh

#!/bin/bash
#Usage: testconnect servicename 1000
count=0
while [ $count -lt $2 ]
do
        count=`expr $count + 1`
        sqlplus -s dba_ts/********@$1 @test.sql
done

- cat test.sql
col "Instance_name" for a20
select instance_name from v$instance
/
exit;



6 Failover test

if node 1 down, service numen will failover to node2

connection to numen node2 will failed,need to config below
--Client windows/system32/drivers/etc/hosts for

10.148.63.114   gtdb-r1
10.148.63.115   gtdb-r1-vip

10.148.63.116   gtdb-r2
10.148.63.117   gtdb-r2-vip

After node1 restore, ensure app connection use instance 1 on node1, can do:
$srvctl stop service -d gtsjk -s numen -i gtsjk2 -f   --stop run on node2

$srvctl start service -d gtsjk -s numen -i gtsjk1     --start run on node1


请使用浏览器的分享功能分享到微信等