共計 4368 個字符,預計需要花費 11 分鐘才能閱讀完成。
這篇文章主要介紹“oracle11g dg broker 配置服務的高可用例子分析”,在日常操作中,相信很多人在 oracle11g dg broker 配置服務的高可用例子分析問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”oracle11g dg broker 配置服務的高可用例子分析”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
前提:
主庫:10.9.21.178 db_name :db2
dg 庫:10.9.21.179 db_name :db1
一:oracle DG 服務的自動故障切換操作整體步驟:
1. 配置先創建服務 dbha
2. 創建觸發器 自動在主庫啟動 hbha 服務
3. 在 primary 庫上設置 service 的 TAF 功能
4. 修改程序 中的 url,實現服務的自動切換
二:解釋幾個概念
1.TAF(Transparent Application Failover)即透明應用程序故障轉移技術。當初始化連接出現問題無法連接時,該功能可以保證應用程序重新連接到可用服務。在重新連接過程中,之前的活動事務將會被回滾,但在“具體條件”下 TAF 可以保證 SELECT 語句不被終止。
TAF 的特性:
1:TAF 是 ORACLE 客戶端提供的一項特性,使用 TAF,對客戶端的環境有一定的要求,比如 JAVA 的 JDBC 驅動、Oracle 客戶端的版本等(8i 開始支持 TAF);
2:大致上 TAF 可以分為 2 種,連接時的 TAF 和會話建立后 TAF;
3:TAF 本身與是否 RAC 環境無關,但一般都用在 RAC 環境,最小程度的減少最應用的影響,單實例環境下也可以使用 TAF,這樣使用 PL/SQL developer 連接數據庫,即使數據庫實例重啟,也不需要重新連接;
4:TAF 配置可以在客戶端也可以在服務器端,也就是在連接數據庫的時候,比如程序 url 添加,
或者 tnsname.ora 中配置 FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 180)(DELAY = 15))),這就是客戶端的配置,那么服務端配置的話就是在服務端修改每個服務的屬性!
begin
dbms_service.modify_service
(dbha ,
FAILOVER_METHOD= BASIC ,
FAILOVER_TYPE= SELECT ,
FAILOVER_RETRIES= 15,
FAILOVER_DELAY=
end;
/
5:配置 listener.ora 文件的 GLOBAL_DBNAME 參數后將會禁用 TAF;
6:oracle TAF 特性和 scan ip failover 的區別是,scan ip 連接的話如果 scan ip 所在的節點故障,
那么該連接就斷開了,如果程序中沒有自動重連機制,或者程序連接池中的 timeout 值還沒有
到時間,那么你就必須重啟服務以便于重連數據庫,但是 TAF 的話不會讓程序報錯,只是會回滾
沒有提交的事務,自動重連另一個節點,并且 FAILOVER_TYPE= SELECT 這種方式下 select 是不會
停的,繼續在另一個節點查出結果!
三:具體流程如下:
3.1 在主庫添加并啟動服務,注意這個服務是要給程序中配置 URL 使用的!
先添加,然后啟動該服務,如果不啟動,那么 show parameter service_name 看不到,啟動后 service_name 參數中就出現了新的服務,并且 pmon 進程自動完成監聽注冊上這個服務,并且重啟數據庫后添加的服務就消失了,失效了!
添加服務的程序包如下:
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
具體執行:其中第一個 dbha 是添加服務的名字,第二個是網絡服務名
1. 添加服務
begin
dbms_service.create_service(dbha , dbha
end;
/
2. 啟動服務
begin
DBMS_SERVICE.START_SERVICE(dbha
end;
/
這時候你去看監聽的狀態,你會發現剛添加的服務已經被 pmon 進程動態注冊了
3. 停止服務:
begin
DBMS_SERVICE.STOP_SERVICE(dbha
end;
/
4. 刪除服務:
begin
DBMS_SERVICE.DELETE_SERVICE(dbha
end;
/
3.2. 在主庫添加觸發器,該觸發器的作用是判斷這個實例為主庫角色 (read write) 則啟動前邊添加的
服務(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 在主庫給前面添加的服務開啟 TAF 特性:
begin
dbms_service.modify_service
(dbha ,
FAILOVER_METHOD= BASIC ,
FAILOVER_TYPE= SELECT ,
FAILOVER_RETRIES= 15,
FAILOVER_DELAY=
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 服務高可用配置完畢
總結:這時候可以測試下,當你主庫 shutdown abort 的時候,你的從庫自動轉換成主庫,然后觸發器啟動 dbha 服務,然后 pmon 自動注冊監聽,然后由于你配置了 TAF 特性,所以你的服務并不會報錯(ORA-0133:ORACLE initialization or shutdown in progress 錯誤),而是自動的連接到新的主庫!
驗證過程:
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 服務連接數據庫,
[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
確認連接的是主庫 db2
SQL select instance_name from v$instance;
INSTANCE_NAME
—————-
db2
3. 異常關閉 db2
SQL shu abort
ORACLE instance shut down.
4. 在之前連接好的會話繼續查詢實例名字,不報錯但是卡著,因為主庫 db2 已經關閉了,而 dg 庫
db1 還在自動轉換中,所以都無法提供服務(大概 10 秒),然后連接上了 db1:
SQL select instance_name from v$instance;
INSTANCE_NAME
—————-
db2
SQL select instance_name from v$instance; —– 卡了 10 秒大概之后顯示了 db1
INSTANCE_NAME
—————-
db1
到此,關于“oracle11g dg broker 配置服務的高可用例子分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!