On tnsnames.ora file
service1_by_scan =Case 1: Nothing on database service (***just created and started it***)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db-scan)(PORT = 1521))
(FAILOVER=on)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = service1)
)
)
SQL> select name, failover_method from dba_services where name='service1';
NAME FAILOVER_METHOD
---------------------------------------------------------------- ----------------------------------------------------------------
service1 NONE
$ sqlplus system@service1_by_scanConnect by SYS user:
SQL*Plus: Release 11.2.0.2.0 Production on Sun Jul 10 19:26:51 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Enter password:
SQL> SELECT INST_ID, username, program, machine, service_name, FAILOVER_TYPE FROM gv$session where username='SYSTEM';
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME FAILOVER_TYPE
---------- ------------------------------ ------------------------------------------------ --------------- --------------- -------------
2 SYSTEM oracle@db02 (PZ99) client service1 NONE
2 SYSTEM sqlplus@client (TNS V1-V3) client service1 NONE
1 SYSTEM oracle@db01 (PZ99) client service1 NONE
SQL> show user;Test Instance on db02 Crashed!!! *** don't do this on Production ***
USER is "SYS"
SQL> SELECT INST_ID, username, program, machine, service_name FROM gv$session where username='SYSTEM';
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME
---------- ------------------------------ ------------------------------------------------ --------------- ---------------
2 SYSTEM sqlplus@client (TNS V1-V3) client service1
$ ps -aef | grep smon |grep dbGo back to "system" User session.
oracle 5582 1 0 Jun09 ? 00:02:09 ora_smon_db2
$ kill -9 5582
SQL> /Case2: Modified database service with DBMS_SERVICE.MODIFY_SERVICE -> failover_type => DBMS_SERVICE.FAILOVER_TYPE_SELECT, failover_retries => 10,failover_delay => 1
SELECT INST_ID, username, program, machine, service_name, FAILOVER_TYPE FROM gv$session where username='SYSTEM'
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 28757
Session ID: 200 Serial number: 7
SQL> exec DBMS_SERVICE.MODIFY_SERVICE(service_name=>'service1',goal => DBMS_SERVICE.GOAL_THROUGHPUT, failover_method => DBMS_SERVICE.FAILOVER_METHOD_BASIC, failover_type => DBMS_SERVICE.FAILOVER_TYPE_SELECT, failover_retries => 10,failover_delay => 1, clb_goal => DBMS_SERVICE.CLB_GOAL_LONG);Test again... with database service.
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> select name, failover_method from dba_services where name='service1';
NAME FAILOVER_METHOD
---------------------------------------------------------------- ----------------------------------------------------------------
service1 BASIC
$ sqlplus system@service1_by_scanConnect by SYS user:
SQL*Plus: Release 11.2.0.2.0 Production on Sun Jul 10 19:36:39 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Enter password:
SQL> SELECT INST_ID, username, program, machine, service_name, FAILOVER_TYPE FROM gv$session where username='SYSTEM';
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME FAILOVER_TYPE
---------- ------------------------------ ------------------------------------------------ --------------- --------------- -------------
1 SYSTEM oracle@db01 (PZ99) client service1 NONE
1 SYSTEM sqlplus@client (TNS V1-V3) client service1 SELECT
2 SYSTEM oracle@db02 (PZ99) client service1 NONE
SQL> show user;Test Instance on db01 Crashed!!! *** don't do this on Production ***
USER is "SYS"
SQL> SELECT INST_ID, username, program, machine, service_name FROM gv$session where username='SYSTEM';
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME
---------- ------------------------------ ------------------------------------------------ --------------- ---------------
1 SYSTEM sqlplus@client (TNS V1-V3) client service1
$ ps -aef | grep smon | grep dbGo back to "system" User session.
oracle 29353 1 0 Jun09 ? 00:02:15 ora_smon_db1
$ kill -9 29353
SQL> /Use SYS user to check.
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME FAILOVER_TYPE
---------- ------------------------------ ------------------------------------------------ --------------- --------------- -------------
1 SYSTEM oracle@db01 (PZ99) client service1 NONE
1 SYSTEM sqlplus@client (TNS V1-V3) client service1 SELECT
2 SYSTEM oracle@db02 (PZ99) client service1 NONE
SQL> /
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME FAILOVER_TYPE
---------- ------------------------------ ------------------------------------------------ --------------- --------------- -------------
2 SYSTEM sqlplus@client (TNS V1-V3) client service1 SELECT
SQL> /
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME FAILOVER_TYPE
---------- ------------------------------ ------------------------------------------------ --------------- --------------- -------------
2 SYSTEM sqlplus@client (TNS V1-V3) client service1 SELECT
SQL> /
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME FAILOVER_TYPE
---------- ------------------------------ ------------------------------------------------ --------------- --------------- -------------
2 SYSTEM oracle@db02 (PZ99) client service1 NONE
2 SYSTEM sqlplus@client (TNS V1-V3) client service1 SELECT
1 SYSTEM oracle@db01 (PZ99) client service1 NONE
SQL> show user;This case, I used "DBMS_SERVICE.MODIFY_SERVICE" for server side. but You can set on client side.
USER is "SYS"
SQL> SELECT INST_ID, username, program, machine, service_name FROM gv$session where username='SYSTEM';
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME
---------- ------------------------------ ------------------------------------------------ --------------- ---------------
2 SYSTEM sqlplus@client (TNS V1-V3) client service1
On tnsnames.ora file.
service1_by_scan =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db-scan)(PORT = 1521))
(FAILOVER=on)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = service1)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 10)
(DELAY = 1)
)
)
)
$ sqlplus system@service1_by_scanThis case, After test instance crashed... Connection still work(Not lost connection). FAILOVER work... When I used failover_type -
SQL*Plus: Release 11.2.0.2.0 Production on Sun Jul 10 19:45:28 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Enter password:
SQL> select name, failover_method from dba_services where name='service1';
NAME FAILOVER_METHOD
---------------------------------------------------------------- ----------------------------------------------------------------
service1 NONE
SQL> SELECT INST_ID, username, program, machine, service_name, FAILOVER_TYPE FROM gv$session where username='SYSTEM';
INST_ID USERNAME PROGRAM MACHINE SERVICE_NAME FAILOVER_TYPE
---------- ------------------------------ ------------------------------------------------ --------------- --------------- -------------
1 SYSTEM oracle@db01 (PZ99) client service1 NONE
1 SYSTEM sqlplus@client (TNS V1-V3) client service1 SELECT
2 SYSTEM oracle@db02 (PZ99) client service1 NONE
(FAILOVER_MODE =Good Idea with FAILOVER on client side with FAILOVER_MODEL: TYPE + METHOD + RETRIES + DELAY.
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 10)
(DELAY = 1)
)
No comments:
Post a Comment