Oracle RAC環(huán)境下的應(yīng)用連續(xù)性
傳統(tǒng)企業(yè)比如銀行業(yè)和電信業(yè)的數(shù)據(jù)庫大多采用Oracle rac+dataguard的高可用架構(gòu),在rac項目實施過程中,由于業(yè)務(wù)連續(xù)性的苛刻要求,高可用的實施和測試工作顯得尤為重要。
Oracle在新版本12cR2的rac官方文檔里單獨列了一章叫Ensuring application Continuity,重視程度可見一斑。在以前的Oracle10g以及11g的版本中,client為實現(xiàn)RAC failover(故障轉(zhuǎn)移)特性,各類應(yīng)用app以及db需要作各種配置調(diào)整工作,隨著Oracle的12cR2新版本的到來,這些配置步驟變得更簡化。
下面簡要總結(jié)Oracle11gR2環(huán)境下的failover配置。
首先根據(jù)是否使用了事先已經(jīng)存在的連接(如連接池中的連接)將客戶端的連接分為Connect Time Connection Failover和Runtime Connection Failover,runtime前綴指連接已經(jīng)存在的情況,比如使用了連接池。
1、Connect Time Connection Failover
客戶端的tnsnames.ora中配置scan ip和service就可以實現(xiàn)連接數(shù)據(jù)庫時的Failover;
2、Runtime Connection Failover
Oracle通過兩種手段來實現(xiàn)Runtime Connection Failover,分別為TAF(Transparent Application Failover)和 FCF(Fast Connection Failover)。
首先是TAF:
它可以在 client 端的tnsnames.ora中的連接串里定義,也可以在 server 端的 service 中定 義。TAF 僅對使用 OCI 連接的客戶端和連接池有效,這里的 OCI 連接可以是在 OCI 連接上的封裝,比如 JDBC-OCI driver 就支持 TAF,但 JDBC thin driver 就不支持 TAF(因為 JDBC thin driver 不是基于 OCI 的)。
其次是FCF:
Fast Connection Failover,它實際上是客戶端通過訂閱 FAN HA events 來實現(xiàn)的。
因為 JDBC thin 連接不是基于 OCI 的,所以這種情況下的 Runtime Connection Failover 不能使用 TAF,只能用 FCF。
如果想讓應(yīng)用app具備TAF屬性,可進行簡單app改造:首先在app的client環(huán)境安裝Oracle客戶端程序,然后將jdbc thin連接調(diào)整為jdbc oci的連接方式。
在Oracle 12c R2的版本中,failover可基于事務(wù),且replay dml語句,相對于11g基于會話,failover功能又大大提升了。