如需轉(zhuǎn)載,請(qǐng)注明出處!(刁饞在此先謝過了……) Oracle TAF的配置
TAF為Transparent Application FailOver的縮寫,一般應(yīng)用TAF都是在OPS/RAC環(huán)境中。從8i開始有的這一功能,目的和想法都是很好的,但目前應(yīng)用還很有限,本文將針對(duì)TAF相關(guān)問題作個(gè)詳細(xì)探討。
本文的測試環(huán)境是Tru64 V5.1+ Oracle9.2.0.1 RAC。
一、相關(guān)參數(shù)的說明
說實(shí)話oracle關(guān)于網(wǎng)絡(luò)的幾個(gè)配置參數(shù)真的是太亂了,很多人都弄不清到底是怎么回事,常見的錯(cuò)誤為: "ORA-12514 :TNS:listener could not resolve SERVICE_NAME given in connect descriptor" 和 "ORA-12154 :TNS: Could not resolve service name" 實(shí)質(zhì)都是一樣的,要解決這樣的問題需要我們弄情幾個(gè)參數(shù):
initsid.ora中的幾個(gè)參數(shù): DB_NAME --- database name,即建數(shù)據(jù)庫時(shí)所提供的名稱。 GLOBAL_NAMES --- True/false,設(shè)定是否使用數(shù)據(jù)庫域名。 DB_DOMAIN --- 數(shù)據(jù)庫域名,如果GLOBAL_NAMES=True則要求提供這個(gè)參數(shù)。 SERVICE_NAMES --- service names list,服務(wù)名稱,可以有多個(gè)。
INSTANCE_NAME --- instance name,和SERVICE_NAMES一樣從817開始支持,即從817開始可以將數(shù)據(jù)庫、實(shí)例和服務(wù)名稱分開。默認(rèn)instance_name的值為instance的SID,即環(huán)境變量ORACLE_SID所對(duì)應(yīng)的值。在817以前沒有instance_name參數(shù)時(shí),不同的instance是以SID來區(qū)分的。按照oracle817以后的文檔解釋:SID是為了區(qū)別同一主機(jī)上各instance的共享內(nèi)存,并不是instance的唯一區(qū)別標(biāo)示,而instance_name則是區(qū)別各個(gè)instance的。
環(huán)境變量: ORACLE_SID --- 在817以前沒有instance_name參數(shù)時(shí),不同的instance是以SID來區(qū)分的(詳細(xì)說明見上面的initsid.ora參數(shù)解釋)。
listener.ora中的幾個(gè)參數(shù): GLOBAL_DBNAME --- 全局?jǐn)?shù)據(jù)庫名稱,在分布式環(huán)境中唯一確定不同的數(shù)據(jù)庫。它的值為initsid.ora中DB_NAME和DB_DOMAIN的組合,即GLOBAL_DBNAME=DB_NAME.DB_DOMAIN,其中DB_DOMAIN如果沒有設(shè)此處也就不需要了。這個(gè)參數(shù)在分布式環(huán)境中建議明確指定。 SERVICE_NAME --- 服務(wù)名稱,取initsid.ora中service_names list至一即可。 SID_NAME --- 對(duì)應(yīng)環(huán)境變量ORACLE_SID的值。 INSTANCE_NAME ---對(duì)應(yīng)初始化參數(shù)instance_name。
tnsnames.ora中的幾個(gè)參數(shù): service_name --- 服務(wù)名稱,取initsid.ora中service_names list至一即可。 sid_name --- 可以簡寫成:sid,對(duì)應(yīng)ORACLE_SID,也可以是初始化參數(shù)instance_name,當(dāng)?shù)扔趇nstance_name且instance_name不等于ORACLE_SID時(shí),oracle會(huì)自動(dòng)注冊一個(gè)監(jiān)聽進(jìn)程,此用以區(qū)分不同的instance。 instance_name --- 從817開始有了這個(gè)新的參數(shù)可以使用,對(duì)應(yīng)初始化參數(shù)instance_name。
這樣一來,參數(shù)就很復(fù)雜了,不過我們實(shí)際使用并不會(huì)用當(dāng)然十月簡單越好了。
二、相關(guān)參數(shù)設(shè)置
下面我將舉例說明相關(guān)參數(shù)的設(shè)置: 1、環(huán)境變量:ORACLE_SID=rac1/2
2、initsid.ora: db_name=ora92 service_names = ora92 instance_name=rac1/2 global_names=false db_domain=""
3、listener.ora: SID_LIST_RAC1 = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ora92) (ORACLE_HOME = /oracle/oracle9/app/oracle/product/9.2.0) (SERVICE_NAME=ora92)(SID_NAME = rac1) ) )
SID_LIST_RAC2 = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ora92) (ORACLE_HOME = /oracle/oracle9/app/oracle/product/9.2.0) (SERVICE_NAME=ora92)(SID_NAME = rac2) ) )
RAC1 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.3.1)(PORT = 1522)) ) ) )
RAC2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.3.2)(PORT = 1522)) ) ) )
三、TAF的設(shè)置 其實(shí)TAF設(shè)置很簡單,在tnsnames.ora中添加failover=on即可,有兩種不同的設(shè)置方法: 1、公用一個(gè)tns name方式:================================================== myrac = (description= (load_balance=on) (failover=on) (address= (protocol=tcp)(host=10.1.3.1)(port=1522)) (address= (protocol=tcp)(host=10.1.3.2)(port=1522)) (connect_data= (service_name=ora92) (failover_mode=(type=select)(method=basic)(retries=20)(delay=20)) ) ) ==========================================================================
2、指明instance backup方式:=============================================== rac1 = (description= (load_balance=on) (failover=on) (address= (protocol=tcp)(host=10.1.3.1)(port=1522)) (connect_data= (service_name=ora92) (failover_mode=(type=select)(method=basic) (backup=rac2)(retries=20)(delay=20)) ) )
rac2 = (description= (load_balance=on) (failover=on) (address= (protocol=tcp)(host=10.1.3.2)(port=1522)) (connect_data= (service_name=ora92) (failover_mode=(type=select)(method=basic) (backup=rac1)(retries=20)(delay=20)) ) ) ==========================================================================
四、TAF測試方法 一般可以將當(dāng)前連接的instance down下來,client端將不會(huì)斷開,并自動(dòng)切換到backup節(jié)點(diǎn)上。相反也會(huì)自動(dòng)切換回來。
當(dāng)然也有人提出用post_transaction的方式來測試TAF,其實(shí)這樣有時(shí)是得不到預(yù)期結(jié)果的,原因在于Oracle連接到一個(gè)instance上后,此后它會(huì)優(yōu)先嘗試對(duì)該instance的連接,當(dāng)你disconnect后,client端一有新的請(qǐng)求就會(huì)自動(dòng)嘗試對(duì)最近連接的instance進(jìn)行連接,如果不成功才會(huì)嘗試對(duì)backup instance進(jìn)行連接。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!