Data Guard實現故障自動切換(二)(r11筆記第39天)
今天下午我的一個朋友碰到了一個Data Guard的問題,大體是主備網路出現問題,因為環境中配置了自動切換,結果備庫就自動切換為了主庫,這樣就成了“雙主”,我幫忙看了下,對備庫做了閃回,然後直接轉換主庫為備庫角色,一個看似繁瑣的修復工作就完成了。
在一個一主多備的環境中,的確需要一個強大的工具來支援,所以最後朋友說DG Broker真是個好東西,我回了句 用好了DG Broker,手工管理Data Guard就是小米加步槍啊。
就如同我昨天文章Data Guard故障自動切換的想法(r11筆記第39天)所說,自動切換也是故障自愈的一個關鍵環節。而其中Oracle自帶的Fast-Start Failover就是一個相對不錯的選擇,如果你的環境網路層面做了統一的管理規劃,只關注資料層面的自動切換,這個自帶的方案其實很強悍,完全可以實現一些較為複雜的自動化切換需求。
我們先來示範一下,看看它的好,然後說說它的限制和改進之處。
首先就是DG Broker最基礎的兩個命令了。
第一個命令是建立配置,新增主節點
DGMGRL> create configuration dg_dataguru as
> primary database is dataguru
> connect identifier is dataguru;
Configuration "dg_dataguru" created with primary database "dataguru"啟用一下配置
DGMGRL> enable configuration;
第二個命令是新增備庫節點
DGMGRL> add database sdataguru as
> connect identifier is sdataguru
> maintained as physical;
Database "sdataguru" added
DGMGRL> enable database sdataguru
Enabled.剩下的命令都主要是圍繞這兩個命令來服務的,檢視一下配置成功後的資訊情況。
DGMGRL> show configuration;
Configuration - dg_dataguru
Protection Mode: MaxPerformance
Databases:
dataguru - Primary database
sdataguru - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS正如紅色字型標識的,目前的主備是在最大效能模式下,我看很多文章說要配置Fast-Start Failover需要在最大高可用模式下,這是錯誤的,實際上在最大效能模式和最大高可用模式下均可。
如果要開啟Fast-Start Failover,單單使用enable選項是不夠的。
DGMGRL> enable fast_start failover;
Error: ORA-16651: requirements not met for enabling fast-start failover
Failed檢視oerr ora 16651你會看到一螢幕的提示資訊,把要點都說全了。我點幾個主要的點
1.主備庫需要開啟閃回資料庫
主庫開啟在open狀態下即可,非常方便,至於為什麼主庫需要開啟,主要是作為reinstate來鋪墊的,是故障自愈的一個環節。
SQL> alter database flashback on;
Database altered.
備庫開啟閃回資料庫略有不同,大體步驟如下:
SQL> recover managed standby database cancel;
Media recovery complete.
SQL> alter database flashback on;
Database altered.
SQL> recover managed standby database disconnect from session;
Media recovery complete. --最後的步驟或者使用enable database的方式也可以2.主備庫的網路配置
這個其實根據我的瞭解,絕大多數的系統中都是會忽略掉這個配置,因為對於基本的Switchover,Failover來說也夠用了,所以有的同學也會偷懶不配置了。
一個簡單的listener.ora的配置如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = newtest.oracle.com)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dataguru)
(ORACLE_HOME = /U01/app/oracle/product/11.2.0.4)
(SID_NAME = dataguru)
)
(SID_DESC =
(GLOBAL_DBNAME=DATAGURU_DGMGRL)
(ORACLE_HOME = /U01/app/oracle/product/11.2.0.4)
(SID_NAME = dataguru)
)
)重點就是紅色的部分,基本格式就是<DB_Unique_Name>_DGMGRL
配置後要確保監聽的服務正確註冊了,重啟對應的監聽保證服務使用無誤。
備庫的配置也是類似的形式,就不重複貼出了。
2.主備延遲,Failover的一些觸發條件
設定資料庫的切換優先順序,可以配置FastStartFailoverTarget
如果我要設定資料庫sdataguru的Failover物件為dataguru,就可以使用如下的命令。
edit database sdataguru set property FastStartFailoverTarget=dataguru;
如果主備的設定為最大高可用保護模式,則需要設定LogXptMode為sync
如果主備的設定為最大效能保護模式,則需要設定LogXptMode為async
啟用FastStart Failover
DGMGRL> enable fast_start failover;
Enabled.
DGMGRL> start observer ;
Observer started檢視狀態的資訊如下,有幾點需要注意的就是我們可以設定Lag Limit,Observer Reconnect等屬性。
DGMGRL> show fast_start failover;
Fast-Start Failover: ENABLED
Threshold: 30 seconds
Target: dataguru
Observer: snewtest2.cyou.com
Lag Limit: 30 seconds
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configurable Failover Conditions
Health Conditions:
Corrupted Controlfile YES
Corrupted Dictionary YES
Inaccessible Logfile NO
Stuck Archiver NO
Datafile Offline YES
Oracle Error Conditions:
(none)
在此你可能對故障自愈沒有深刻的體驗,我們就來實驗一下。
主庫直接shutdown abort
DG Broker中的observer的日誌如下:
22:36:07.60 Tuesday, January 10, 2017
Initiating Fast-Start Failover to database "sdataguru"...
Performing failover NOW, please wait...
Failover succeeded, new primary is "sdataguru"
22:36:16.52 Tuesday, January 10, 2017可以清晰的看到,是做了Failover的操作。
對於故障自愈,如果主庫已經修復,可以正常啟動,那麼就會自動觸發由主庫調整為備庫,也就是我們開頭所說的reinstate.
我們只需要把資料庫啟動到mount階段,然後靜觀日誌變化。
22:37:34.67 Tuesday, January 10, 2017
Initiating reinstatement for database "dataguru"...
Reinstating database "dataguru", please wait...
Operation requires shutdown of instance "dataguru" on database "dataguru"
Shutting down instance "dataguru"...
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance "dataguru" on database "dataguru"
Starting instance "dataguru"...
ORACLE instance started.
Database mounted.
Continuing to reinstate database "dataguru" ...
Reinstatement of database "dataguru" succeeded
22:38:24.08 Tuesday, January 10, 2017
就這樣一個看似複雜的reinstate工作就自動修復了,無需手工干預和處理。
當然你要說這個過程中還有什麼特別的研製,資料庫層面來說,這種方式是非常好的,可以在這個基礎上去借鑑更多的有點和細節之處。
而這個方案的一個瓶頸就在於這個完全自動化的部分,如果出現了誤判的情況,可能這時候問題就會很尷尬,會導致一些資料庫切換的難解問題。
從實踐的角度和通用的角度來說,我們需要定義更多的規則和邏輯。這種方式可以作為一種非常好的參考理念。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2132214/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Data Guard故障自動切換的想法(r11筆記第40天)筆記
- Oracle Data Guard 快速啟動故障切換指南Oracle
- Oracle Data Guard延遲的幾個可能(r11筆記第69天)Oracle筆記
- Oracle Data Guard快速啟動故障切換 - fast-start failover(FSFO)OracleASTAI
- [Data Guard]Oracle10g Data Guard學習筆記(二)Oracle筆記
- Data Guard主備庫切換
- Data Guard交換控制檔案實現主備切換實現步驟
- DATA GUARD物理STANDBY的 SWITCHOVER切換
- 半自動化搭建Data Guard的想法和實踐(二)
- 【DG】Data Guard主備庫Switchover切換
- DATA GUARD物理STANDBY的FAILOVER切換AI
- DATA GUARD物理備庫的SWITCHOVER切換
- ORACLE 10G Data Guard 模式切換Oracle 10g模式
- DATA GUARD物理STANDBY的 SWITCHOVER切換[zt]
- 【DG】Data Guard主備庫Failove切換AI
- Data Guard Broker系列之二:Data Guard Broker配置實戰
- [Data Guard]Oracle10g Data Guard學習筆記(一)Oracle筆記
- [Data Guard]Oracle10g Data Guard學習筆記(三)Oracle筆記
- Oracle Data Guard主庫備庫角色切換(Switchovers)Oracle
- 閃回原理測試(二)(r11筆記第23天)筆記
- MySQL Online DDL(二)(r11筆記第88天)MySql筆記
- 12c data guard 使用 sqlplus 主備切換最佳實踐SQL
- 使用shell自動化診斷效能問題(一)(r11筆記第41天)筆記
- Redis主從複製 - 通過Keepalived實現Redis Failover自動故障切換功能RedisAI
- 9 Oracle Data Guard 故障診斷Oracle
- Dledger是如何實現主從自動切換的
- 通過keepalived實現 MySQL VIP 自動切換MySql
- 返京途中(r11筆記第61天)筆記
- Redis 哨兵模式實現主從故障互切換Redis模式
- 半自動化搭建Data Guard的想法和實踐(一)
- 半自動化搭建Data Guard的想法和實踐(四)
- 半自動化搭建Data Guard的想法和實踐(三)
- Data guard archive GAP 故障處理案例Hive
- 物化檢視實現的特殊資料複製(r11筆記第42天)筆記
- 複雜SQL效能優化的剖析(二)(r11筆記第37天)SQL優化筆記
- 👾 筆記 | react-transition-group 實現路由切換過渡動畫筆記React路由動畫
- 簡單批處理,實現ip地址的自動切換
- Oracle 12c Data guard 物理主備庫正常切換(switchover)流程Oracle