您好,登錄后才能下訂單哦!
這篇文章主要介紹“oracle11g dg broker配置服務(wù)的高可用例子分析”,在日常操作中,相信很多人在oracle11g dg broker配置服務(wù)的高可用例子分析問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”oracle11g dg broker配置服務(wù)的高可用例子分析”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
前提:
主庫(kù):10.9.21.178 db_name :db2
dg庫(kù):10.9.21.179 db_name :db1
一:oracle DG 服務(wù)的自動(dòng)故障切換操作整體步驟:
1.配置先創(chuàng)建服務(wù)dbha
2.創(chuàng)建觸發(fā)器 自動(dòng)在主庫(kù)啟動(dòng)hbha服務(wù)
3.在primary庫(kù)上設(shè)置service的TAF功能
4.修改程序 中的 url,實(shí)現(xiàn)服務(wù)的自動(dòng)切換
二:解釋幾個(gè)概念
1.TAF(Transparent Application Failover)即透明應(yīng)用程序故障轉(zhuǎn)移技術(shù)。當(dāng)初始化連接出現(xiàn)問(wèn)題無(wú)法連接時(shí),該功能可以保證應(yīng)用程序重新連接到可用服務(wù)。在重新連接過(guò)程中,之前的活動(dòng)事務(wù)將會(huì)被回滾,但在“具體條件”下TAF可以保證SELECT語(yǔ)句不被終止。
TAF的特性:
1:TAF是ORACLE客戶端提供的一項(xiàng)特性,使用TAF,對(duì)客戶端的環(huán)境有一定的要求,比如JAVA的JDBC驅(qū)動(dòng)、Oracle客戶端的版本等(8i開(kāi)始支持TAF);
2:大致上TAF可以分為2種,連接時(shí)的TAF和會(huì)話建立后TAF;
3:TAF本身與是否RAC環(huán)境無(wú)關(guān),但一般都用在RAC環(huán)境,最小程度的減少最應(yīng)用的影響,單實(shí)例環(huán)境下也可以使用TAF,這樣使用PL/SQL developer連接數(shù)據(jù)庫(kù),即使數(shù)據(jù)庫(kù)實(shí)例重啟,也不需要重新連接;
4:TAF配置可以在客戶端也可以在服務(wù)器端,也就是在連接數(shù)據(jù)庫(kù)的時(shí)候,比如程序url添加,
或者tnsname.ora中配置FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 180)(DELAY = 15))),這就是客戶端的配置,那么服務(wù)端配置的話就是在服務(wù)端修改每個(gè)服務(wù)的屬性!
begin
dbms_service.modify_service
('dbha',
FAILOVER_METHOD=>'BASIC',
FAILOVER_TYPE=>'SELECT',
FAILOVER_RETRIES=>15,
FAILOVER_DELAY=>5);
end;
/
5:配置listener.ora文件的GLOBAL_DBNAME參數(shù)后將會(huì)禁用TAF;
6:oracle TAF特性和scan ip failover的區(qū)別是,scan ip連接的話如果scan ip所在的節(jié)點(diǎn)故障,
那么該連接就斷開(kāi)了,如果程序中沒(méi)有自動(dòng)重連機(jī)制,或者程序連接池中的timeout值還沒(méi)有
到時(shí)間,那么你就必須重啟服務(wù)以便于重連數(shù)據(jù)庫(kù),但是TAF的話不會(huì)讓程序報(bào)錯(cuò),只是會(huì)回滾
沒(méi)有提交的事務(wù),自動(dòng)重連另一個(gè)節(jié)點(diǎn),并且FAILOVER_TYPE=>'SELECT'這種方式下select是不會(huì)
停的,繼續(xù)在另一個(gè)節(jié)點(diǎn)查出結(jié)果!
三:具體流程如下:
3.1在主庫(kù)添加并啟動(dòng)服務(wù),注意這個(gè)服務(wù)是要給程序中配置URL使用的!
先添加,然后啟動(dòng)該服務(wù),如果不啟動(dòng),那么show parameter service_name 看不到,啟動(dòng)后service_name參數(shù)中就出現(xiàn)了新的服務(wù),并且pmon進(jìn)程自動(dòng)完成監(jiān)聽(tīng)注冊(cè)上這個(gè)服務(wù),并且重啟數(shù)據(jù)庫(kù)后添加的服務(wù)就消失了,失效了!
添加服務(wù)的程序包如下:
DBMS_SERVICE.CREATE_SERVICE(
service_name IN VARCHAR2,
network_name IN VARCHAR2,
goal IN NUMBER DEFAULT NULL,
dtp IN BOOLEAN DEFAULT NULL,
aq_ha_notifications IN BOOLEAN DEFAULT NULL,
failover_method IN VARCHAR2 DEFAULT NULL,
failover_type IN VARCHAR2 DEFAULT NULL,
failover_retries IN NUMBER DEFAULT NULL,
failover_delay IN NUMBER DEFAULT NULL,
clb_goal IN NUMBER DEFAULT NULL,
edition IN VARCHAR2 DEFAULT NULL);
--The network name of the service as used in SQLNet connect descriptors for client connections. This is limited to the NET
具體執(zhí)行:其中第一個(gè)dbha是添加服務(wù)的名字,第二個(gè)是網(wǎng)絡(luò)服務(wù)名
1.添加服務(wù)
begin
dbms_service.create_service('dbha','dbha');
end;
/
2.啟動(dòng)服務(wù)
begin
DBMS_SERVICE.START_SERVICE('dbha');
end;
/
這時(shí)候你去看監(jiān)聽(tīng)的狀態(tài),你會(huì)發(fā)現(xiàn)剛添加的服務(wù)已經(jīng)被pmon進(jìn)程動(dòng)態(tài)注冊(cè)了
3.停止服務(wù):
begin
DBMS_SERVICE.STOP_SERVICE('dbha');
end;
/
4.刪除服務(wù):
begin
DBMS_SERVICE.DELETE_SERVICE('dbha');
end;
/
3.2.在主庫(kù)添加觸發(fā)器,該觸發(fā)器的作用是判斷這個(gè)實(shí)例為主庫(kù)角色(read write)則啟動(dòng)前邊添加的
服務(wù)(dbha)
create trigger tri_startservice after startup on database
declare
dg_role varchar(30);
begin
select database_role into dg_role from v$database;
if dg_role='PRIMARY' then
DBMS_SERVICE.START_SERVICE('dbha');
end if;
end;
/
3.3在主庫(kù)給前面添加的服務(wù)開(kāi)啟TAF特性:
begin
dbms_service.modify_service
('dbha',
FAILOVER_METHOD=>'BASIC',
FAILOVER_TYPE=>'SELECT',
FAILOVER_RETRIES=>15,
FAILOVER_DELAY=>5);
end;
/
3.4.修改程序的URL
datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.9.21.178)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.9.21.179)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=dbha)(FAILOVER_MODE=(TYPE=SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5)) ) )
如果是oracle rac 的話:
datasource.url=jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.216)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.217)(PORT = 1521))(LOAD_BALANCE = yes)(FAILOVER = yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = cbl)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 180)(DELAY = 15))))
至此oracle 11g adg服務(wù)高可用配置完畢
總結(jié):這時(shí)候可以測(cè)試下,當(dāng)你主庫(kù)shutdown abort的時(shí)候,你的從庫(kù)自動(dòng)轉(zhuǎn)換成主庫(kù),然后觸發(fā)器啟動(dòng)dbha服務(wù),然后pmon自動(dòng)注冊(cè)監(jiān)聽(tīng),然后由于你配置了TAF特性,所以你的服務(wù)并不會(huì)報(bào)錯(cuò)(ORA-0133:ORACLE initialization or shutdown in progress錯(cuò)誤),而是自動(dòng)的連接到新的主庫(kù)!
驗(yàn)證過(guò)程:
1.客戶端配置tnsnames.ora
dbha=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.9.21.178)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.9.21.179)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbha)
)
)
2.使用dbha服務(wù)連接數(shù)據(jù)庫(kù),
[oracle@beijing-fuli-hadoop-02 admin]$ sqlplus liuwenhe/liuwenhe@dbha
SQL*Plus: Release 11.2.0.4.0 Production on Sat Jul 13 17:11:55 2019
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
確認(rèn)連接的是主庫(kù)db2
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db2
3.異常關(guān)閉db2
SQL> shu abort
ORACLE instance shut down.
4.在之前連接好的會(huì)話繼續(xù)查詢實(shí)例名字,不報(bào)錯(cuò)但是卡著,因?yàn)橹鲙?kù)db2已經(jīng)關(guān)閉了,而dg庫(kù)
db1還在自動(dòng)轉(zhuǎn)換中,所以都無(wú)法提供服務(wù)(大概10秒),然后連接上了db1:
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db2
SQL> select instance_name from v$instance; -----卡了10秒大概之后顯示了db1
INSTANCE_NAME
----------------
db1
到此,關(guān)于“oracle11g dg broker配置服務(wù)的高可用例子分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。