明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Oracle Faq(Oracle TAF的設(shè)置)

[摘要]如需轉(zhuǎn)載,請(qǐng)注明出處。ǖ箴捲诖讼戎x過(guò)了……)Oracle TAF的配置TAF為Transparent Application FailOver的縮寫,一般應(yīng)用TAF都是在OPS/RAC環(huán)境中。從8i開始有的這一功能,目的和想法都是很好的,但目前應(yīng)用還很有限,本文將針對(duì)TAF相關(guān)問(wèn)題作個(gè)詳細(xì)探討。...

如需轉(zhuǎn)載,請(qǐng)注明出處。ǖ箴捲诖讼戎x過(guò)了……)
Oracle TAF的配置

TAF為Transparent Application FailOver的縮寫,一般應(yīng)用TAF都是在OPS/RAC環(huán)境中。從8i開始有的這一功能,目的和想法都是很好的,但目前應(yīng)用還很有限,本文將針對(duì)TAF相關(guān)問(wèn)題作個(gè)詳細(xì)探討。

本文的測(cè)試環(huán)境是Tru64 V5.1+ Oracle9.2.0.1 RAC。

一、相關(guān)參數(shù)的說(shuō)明

說(shuō)實(shí)話oracle關(guān)于網(wǎng)絡(luò)的幾個(gè)配置參數(shù)真的是太亂了,很多人都弄不清到底是怎么回事,常見(jiàn)的錯(cuò)誤為:
"ORA-12514 :TNS:listener could not resolve SERVICE_NAME given in connect descriptor" 和
"ORA-12154 :TNS: Could not resolve service name"
實(shí)質(zhì)都是一樣的,要解決這樣的問(wèn)題需要我們弄情幾個(gè)參數(shù):

initsid.ora中的幾個(gè)參數(shù):
DB_NAME --- database name,即建數(shù)據(jù)庫(kù)時(shí)所提供的名稱。
GLOBAL_NAMES --- True/false,設(shè)定是否使用數(shù)據(jù)庫(kù)域名。
DB_DOMAIN --- 數(shù)據(jù)庫(kù)域名,如果GLOBAL_NAMES=True則要求提供這個(gè)參數(shù)。
SERVICE_NAMES --- service names list,服務(wù)名稱,可以有多個(gè)。

INSTANCE_NAME --- instance name,和SERVICE_NAMES一樣從817開始支持,即從817開始可以將數(shù)據(jù)庫(kù)、實(shí)例和服務(wù)名稱分開。默認(rèn)instance_name的值為instance的SID,即環(huán)境變量ORACLE_SID所對(duì)應(yīng)的值。在817以前沒(méi)有instance_name參數(shù)時(shí),不同的instance是以SID來(lái)區(qū)分的。按照oracle817以后的文檔解釋:SID是為了區(qū)別同一主機(jī)上各instance的共享內(nèi)存,并不是instance的唯一區(qū)別標(biāo)示,而instance_name則是區(qū)別各個(gè)instance的。

環(huán)境變量:
ORACLE_SID --- 在817以前沒(méi)有instance_name參數(shù)時(shí),不同的instance是以SID來(lái)區(qū)分的(詳細(xì)說(shuō)明見(jiàn)上面的initsid.ora參數(shù)解釋)。

listener.ora中的幾個(gè)參數(shù):
GLOBAL_DBNAME --- 全局?jǐn)?shù)據(jù)庫(kù)名稱,在分布式環(huán)境中唯一確定不同的數(shù)據(jù)庫(kù)。它的值為initsid.ora中DB_NAME和DB_DOMAIN的組合,即GLOBAL_DBNAME=DB_NAME.DB_DOMAIN,其中DB_DOMAIN如果沒(méi)有設(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 --- 可以簡(jiǎn)寫成:sid,對(duì)應(yīng)ORACLE_SID,也可以是初始化參數(shù)instance_name,當(dāng)?shù)扔趇nstance_name且instance_name不等于ORACLE_SID時(shí),oracle會(huì)自動(dòng)注冊(cè)一個(gè)監(jiān)聽(tīng)進(jìn)程,此用以區(qū)分不同的instance。
instance_name --- 從817開始有了這個(gè)新的參數(shù)可以使用,對(duì)應(yīng)初始化參數(shù)instance_name。

這樣一來(lái),參數(shù)就很復(fù)雜了,不過(guò)我們實(shí)際使用并不會(huì)用當(dāng)然十月簡(jiǎn)單越好了。

二、相關(guān)參數(shù)設(shè)置

下面我將舉例說(shuō)明相關(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è)置很簡(jiǎn)單,在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測(cè)試方法
一般可以將當(dāng)前連接的instance down下來(lái),client端將不會(huì)斷開,并自動(dòng)切換到backup節(jié)點(diǎn)上。相反也會(huì)自動(dòng)切換回來(lái)。

當(dāng)然也有人提出用post_transaction的方式來(lái)測(cè)試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)行連接。