oracle的TAF淺析
而在failover的實現中,還是有一定的使用限定,比如11g中預設的scan-ip的實現其實還是預設沒有failover的選項,如果兩個節點,某個節點掛了,那麼原有的連線中繼續查詢就會提示session已經斷開,需要重連。
很多應用都在這樣使用scan-ip,也都相安無事,所以對於failover的選擇還是有一定選擇空間,如果說failover的實現方式,簡單來說,主要就是透過換取時間,或者換取資源來實現。
怎麼理解呢。
假設我們存在兩個節點,如果某個session連線到了節點2,突然節點2掛了,那麼故障轉移的方式就有透過換取時間或者換取資源。
比如說換取時間,為了更快達到failover的速度,failover method 有preconnect,這種預連線方式還是會佔用較多的資源使用,在各個節點上還是會預先佔用一部分額外的資源,在切換時會相對更加平滑,速度更快。這種就是preconect的方式
另外一種情況,則在發生failover的情況時,再去切換對應的資源,中間會有一些卡頓,但是對於資源的相對來說要小很多。這種就是預設的basic模式。
failover method側重於使用者對於何時建立到例項的連線,即basic方式會在故障發生時採取判斷,有一種delay的味道,而preconnect則是未雨綢繆,先準備後,在出現故障的時候,能夠更快切換,從實際的應用來說,還是basic這種方式更加通用。
而對於failover的型別來說,rac的實現更加豐富而且靈活,這在別的資料庫中真是不可想象。這個時候它的粒度就在於使用者對於sql的執行情況進行控制。
比如說,我們有個很大的查詢在節點2上進行,結果節點2突然掛了,然後這個時候,failover的型別就有兩種,即對於正在執行的查詢,比如說有1萬條資料,結果剛好故障發生的時候查出了8000條,那麼剩下的2000該怎麼處理。
一種方式就是使用select,即會完成故障切換,繼續把剩下的2000條記錄返回,當然中間會有一些上下文環境的切換,對於使用者基本還是透明的,但是會有一定的延時。
另外一種是直接斷開連線,要求重新查詢。這種type是session
在10g版本中藉助於vip的配置達到load balance+failover的配置如下:
racdb=
(DESCRIPTION =
(ADDRESS= (PROTOCOL= TCP)(HOST=192.168.3.101)(PORT= 1521))
(ADDRESS= (PROTOCOL= TCP)(HOST=192.168.3.201)(PORT= 1521))
(LOAD_BALANCE = yes)
(FAILOVER = ON)
(CONNECT_DATA =
(SERVER= DEDICATED)
(SERVICE_NAME = racdb)
(FAILOVER_MODE =
(TYPE= SELECT)
(METHOD= BASIC)
(RETRIES = 30)
(DELAY = 5))))
當然有一個不同之處是在10g中我們可以直接透過dbca來完成配置,就是簡單清晰。
在11g中,只能藉助於命令或者EM來實現了。不知道為什麼把這塊功能的圖形介面部分給去掉了。
透過命令其實也不算麻煩,我們可以使用下面的方式做一個簡單的配置。
比如我們選擇failover_mode為basic建立的taf為racdb_taf
srvctl add service -d RACDB -s racdb_taf -r "RACDB1,RACDB2" -P BASIC
bash-4.1$ crs_stat -t|grep taf
Name Type Target State Host
------------------------------------------------------------
ora....taf.svc ora....ce.type OFFLINE OFFLINE
我們手工開啟
srvctl start service -d RACDB -s racdb_taf
然後透過dbms_service來配置更多的屬性。
execute dbms_service.modify_service (service_name => 'racdb_taf', aq_ha_notifications => true, failover_method => dbms_service.failover_method_basic, failover_type => dbms_service.failover_type_select, failover_retries => 181,failover_delay => 5,clb_goal => dbms_service.clb_goal_long);
在資料庫中可以簡單檢視相關的service情況。
SQL> select service_id ,name from dba_services ;
SERVICE_ID NAME
---------- ----------------------------------------------------------------
1 SYS$BACKGROUND
2 SYS$USERS
3 racdb_taf
5 RACDBXDB
6 RACDB
select name, failover_method, failover_type, failover_retries,goal, clb_goal,aq_ha_notifications from dba_services where service_id =3;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1780579/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle的resetlogs機制淺析Oracle
- Oracle Xmltype型別淺析OracleXML型別
- 【TAF】使用Oracle RAC的TAF技術之SESSION型別OracleSession型別
- 轉:oracle的resetlogs機制淺析Oracle
- Oracle RAC TAF [zt]Oracle
- ORACLE關閉過程淺析Oracle
- ORACLE啟動過程淺析Oracle
- Oracle相關NUMA特性淺析Oracle
- Oracle 12c PDB淺析Oracle
- Oracle 12c PDB淺析(二)Oracle
- Oracle Lob型別儲存淺析Oracle型別
- 【TAF】使用Oracle RAC的TAF技術實現不間斷查詢Oracle
- Oracle RAC的TAF簡單測試Oracle
- Oracle資料庫字符集淺析Oracle資料庫
- iOS Block淺淺析iOSBloC
- Oracle 10g RAC TAFOracle 10g
- 淺析Oracle(rownum)和Mysql(limit)分頁的區別OracleMySqlMIT
- 淺析 JWTJWT
- MongoDB淺析MongoDB
- RunLoop 淺析OOP
- Nginx淺析Nginx
- 淺析 requestAnimationFramerequestAnimationFrame
- 淺析PromisePromise
- 淺析GitGit
- 淺析RedisRedis
- Jvm 淺析JVM
- 淺析oracle b-tree index搜尋原理OracleIndex
- Oracle中like效率正規表示式淺析Oracle
- Oracle RAC TAF 無縫failoverOracleAI
- Oracle RAC Failove 之二:TAFOracleAI
- 淺析前端的模組化前端
- 淺析MySQL replace into 的用法MySql
- 淺析.NET的反射特性反射
- 淺析Redux 的 store enhancerRedux
- python的metaclass淺析Python
- 淺析Java的流 (轉)Java
- Webpack 原理淺析Web
- css: clip淺析CSS