Oracle ADG 切換方式詳解:Switchover 與 Failover 操作指南
引言
在 Oracle Data Guard(DG)環(huán)境中,切換操作是保障數(shù)據(jù)庫高可用性和業(yè)務(wù)連續(xù)性的關(guān)鍵環(huán)節(jié)。根據(jù)不同的應(yīng)用場景,Oracle DG 提供了兩種主要的切換方式:switchover(正常切換) 和 failover(故障轉(zhuǎn)移)。本文將詳細介紹這兩種切換方式的定義、操作流程、狀態(tài)校驗及注意事項,幫助數(shù)據(jù)庫管理員在實際環(huán)境中高效、安全地完成切換操作。
一、Switchover(正常切換)
Switchover 是一種計劃內(nèi)的、用戶主動發(fā)起的切換操作。其特點是切換過程中不會丟失數(shù)據(jù),且切換后 Data Guard 環(huán)境仍保持完整,主備關(guān)系可繼續(xù)正常運行。Switchover 需先后對主庫和備庫進行操作。
(一)主庫操作步驟
-
查看 switchover_status
執(zhí)行以下語句確認主庫是否可切換:SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;若
SWITCHOVER_STATUS為TO STANDBY,表示可正常切換。
![在這里插入圖片描述]()
-
切換主庫為物理備庫
根據(jù)上一步狀態(tài)執(zhí)行切換命令:- 若
SWITCHOVER_STATUS為TO STANDBY,可省略WITH SESSION SHUTDOWN:ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; - 否則需強制執(zhí)行:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
- 若
-
重啟至 MOUNT 狀態(tài)
- 11.2.0.4 及以上版本無需手動重啟,切換命令自動處理。
- 低版本需手動執(zhí)行:
SHUTDOWN ABORT; STARTUP MOUNT;
-
確認切換后狀態(tài)
驗證主庫是否已成功轉(zhuǎn)換為備庫:SELECT DB_UNIQUE_NAME, DATABASE_ROLE, PROTECTION_MODE, SWITCHOVER_STATUS, OPEN_MODE FROM V$DATABASE;
(二)備庫操作步驟
-
查看備庫狀態(tài)
確認備庫可切換為主庫:SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;若
SWITCHOVER_STATUS為TO PRIMARY或SESSION ACTIVE,表示可提升。 -
提升備庫為主庫
根據(jù)狀態(tài)執(zhí)行提升命令:- 若狀態(tài)為
TO PRIMARY,可省略WITH SESSION SHUTDOWN:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; - 否則需強制執(zhí)行:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
- 若狀態(tài)為
-
打開數(shù)據(jù)庫并確認角色
ALTER DATABASE OPEN; SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
二、Failover(故障轉(zhuǎn)移)
Failover 是在主庫發(fā)生故障時強制將備庫提升為主庫的操作。切換后原有的 DG 環(huán)境可能被破壞,且可能存在數(shù)據(jù)丟失(取決于主庫故障前的保護模式)。若原主庫啟用了閃回數(shù)據(jù)庫(Flashback Database),可在修復(fù)后重新加入環(huán)境作為新備庫。
備庫操作步驟
-
檢查歸檔日志間隙
查詢是否存在未同步的日志:SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; -
手動注冊缺失日志(如果存在間隙)
將從原主庫拷貝的歸檔日志注冊至備庫:ALTER DATABASE REGISTER PHYSICAL LOGFILE '/path/to/archive_log_sequence.rdo'; -
確認日志已應(yīng)用至最新
SELECT THREAD#, MAX(SEQUENCE#) OVER (PARTITION BY THREAD#) FROM V$ARCHIVED_LOG; -
執(zhí)行故障切換
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ALTER DATABASE OPEN;
三、狀態(tài)校驗與后續(xù)操作
無論執(zhí)行哪種切換,完成后均需進行以下檢查:
1. 確認數(shù)據(jù)庫角色
SELECT DATABASE_ROLE FROM V$DATABASE;
2. 檢查 DG 進程狀態(tài)
SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY;
3. 監(jiān)控同步延遲
SELECT NAME, VALUE, UNIT, TIME_COMPUTED
FROM V$DATAGUARD_STATS
WHERE NAME IN ('transport lag', 'apply lag');
4. 注意事項
- Switchover 需主備庫網(wǎng)絡(luò)連通且狀態(tài)同步。
- Failover 后需重新配置 DG 環(huán)境(若原主庫可恢復(fù),可通過閃回重建備庫)。
- 在最大性能模式下,failover 可能導(dǎo)致數(shù)據(jù)丟失,需評估業(yè)務(wù)容忍度。
- 建議在生產(chǎn)環(huán)境中提前演練切換流程。
總結(jié)
Switchover 和 Failover 是 Oracle Data Guard 中兩種關(guān)鍵的災(zāi)難恢復(fù)和高可用保障機制。前者適用于計劃內(nèi)維護,后者用于緊急故障響應(yīng)。理解其原理、掌握操作步驟、并嚴格完成狀態(tài)驗證,是確保數(shù)據(jù)庫業(yè)務(wù)連續(xù)性的基礎(chǔ)。建議結(jié)合定期演練和監(jiān)控工具,構(gòu)建安全可靠的數(shù)據(jù)庫容災(zāi)體系。

浙公網(wǎng)安備 33010602011771號