TAF为负载均衡和故障切换提供了所有必需的配置参数。
TAF除了用在RAC中﹐還可以為physical standby數據庫提供自動故障切換。
這里主要介紹oracle10g RAC中TAF方針的服務的建立﹐以及測試TAF。
一﹑建立具有正確TAF方針的服務的方法有三種﹕
1.通過dbca建立服務
2.通過SRVCTL建立服務
如果該服務(不正確)已經存在﹐需要先stop然后delete它。
現在可以使用正確的TAF方針重建它
3.使用DBMS_SERVICE包建立服務
如果一個服務已經存在﹐在重建它前需要把它刪除。
不管以上面三種方式中的何種方式建立﹐最終我們都可以從tnsnames.ora中看到類似下面設置(可以將下面設置直接拷貝到oracle客戶端)﹕
VMRACTEST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vmrac1-vip.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = vmrac2-vip.localdomain)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = vmractest.yyhj.com.cn)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
可以通過'crs_stat'檢查TAF服務在所有節點上是否online﹕
[oracle@vmrac1 admin]$ crs_stat ora.vmrac.vmractest.vmrac1.srv
NAME=ora.vmrac.vmractest.vmrac1.srv
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmrac1
[oracle@vmrac1 admin]$ crs_stat ora.vmrac.vmractest.vmrac2.srv
NAME=ora.vmrac.vmractest.vmrac2.srv
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmrac2
另外﹐可以通過DBA_SERVICES視圖查看當前建立的服務。
二﹑TAF測試
SQL> conn system/system@vmractest
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system
SQL>
SQL> set linesize 100
SQL> col INST# format 99999
SQL> col INST_NAME format a10
SQL> col HOST format a20
SQL> col USERNAME format a10
SQL> col TYPE format a10
SQL> col METHOD format a10
SQL> col "FAILED OVER" format a11
SQL> select
2 INSTANCE_NUMBER INST#,INSTANCE_NAME INST_NAME,HOST_NAME HOST,
3 USERNAME, FAILOVER_TYPE TYPE, FAILOVER_METHOD METHOD,
4 FAILED_OVER "FAILED OVER"
5 from
6 V$SESSION a, V$INSTANCE b
7 where
8 USERNAME = (select SYS_CONTEXT ('USERENV', 'SESSION_USER') from DUAL)
9 and
10 SID = (select SYS_CONTEXT ('USERENV', 'SID') from DUAL)
11 ;
INST# INST_NAME HOST USERNAME TYPE METHOD FAILED OVER
----- ---------- -------------------- ---------- ---------- ---------- -----------
2 vmrac2 vmrac2 SYSTEM SELECT BASIC NO
登入到vmrac2主機上﹐shutdown實例vmrac2﹕
[oracle@vmrac2 admin]$ srvctl stop instance -d vmrac -i vmrac2
再回上面的sql*plus中﹐直接執行上面的查詢﹐發現并沒有返回ORA-03113錯誤﹐而是把會話切換到了vmrac1實例﹕
SQL> select
2 INSTANCE_NUMBER INST#,INSTANCE_NAME INST_NAME,HOST_NAME HOST,
3 USERNAME, FAILOVER_TYPE TYPE, FAILOVER_METHOD METHOD,
4 FAILED_OVER "FAILED OVER"
5 from
6 V$SESSION a, V$INSTANCE b
7 where
8 USERNAME = (select SYS_CONTEXT ('USERENV', 'SESSION_USER') from DUAL)
9 and
10 SID = (select SYS_CONTEXT ('USERENV', 'SID') from DUAL)
11 ;
INST# INST_NAME HOST USERNAME TYPE METHOD FAILED OVER
----- ---------- -------------------- ---------- ---------- ---------- -----------
1 vmrac1 vmrac1 SYSTEM SELECT BASIC NO
一般可以将当前连接的instance down下来,client端将不会断开,并自动切换到backup节点上。相反也会自动切换回来。
当然也有人提出用post_transaction的方式来测试TAF,其实这样有时是得不到预期结果的,原因在于Oracle连接到一个instance上后,此后它会优先尝试对该instance的连接,当你disconnect后,client端一有新的请求就会自动尝试对最近连接的instance进行连接,如果不成功才会尝试对backup instance进行连接。
關于TAF的一些概念以及一些限制﹐可以參考(Enabling Advanced Features of Oracle Net Services)﹕
http://download-west.oracle.com/docs/cd/B19306_01/network.102/b14212/advcfg.htm#sthref1275
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/33600/viewspace-266412/ ,如需转载,请注明出处,否则将追究法律责任。