深入理解oracle ADG和RAC

1. 引言

本節詳細介紹oracle ADG和RAC。當然這里講得的詳細是相對理論的深入,不涉及到實驗,比如ADG和RAC的搭建及調優等。
RAC (Real Application Clusters) 和 ADG (Active Data Guard)是Oracle 的兩大核心高可用和災備技術。它們是 Oracle 數據庫高可用性(HA)、災難恢復(DR)、可擴展性和數據保護架構的基石,但解決的問題和實現方式有本質區別。

2. Oracle RAC (Real Application Clusters):

2.1 目標:

實例級高可用性 (HA) 和橫向擴展 (Scale-Out)。

2.2 原理:

多個服務器(節點)共享訪問同一個物理數據庫(存儲)。每個節點運行一個獨立的 Oracle 實例(包含 SGA、后臺進程等),這些實例同時掛載并打開同一個數據庫文件(數據文件、控制文件、聯機重做日志)。如下圖
在這里插入圖片描述

2.3 關鍵組件:

共享存儲: SAN, NAS, ASM, Exadata Storage 等。所有節點必須能并發讀寫同一份數據。
集群軟件: Oracle Clusterware (包括 OCR, Voting Disk) 管理節點成員、心跳檢測、故障轉移協調。
高速互連: 專用網絡(通常是 InfiniBand 或 10GbE+)用于節點間高速緩存同步(Cache Fusion)。
SCAN (Single Client Access Name): 簡化客戶端連接,自動負載均衡和故障轉移。

2.4 如何工作:

并行處理: 應用程序可以連接到任何一個活動節點執行操作。多個節點可以同時處理針對同一個數據庫的不同事務或查詢。
Cache Fusion: RAC 的核心技術。當一個節點需要訪問的數據塊不在其本地 SGA 中,但可能在另一個節點的 SGA 中時,它可以通過高速互連直接從其他節點的內存中獲取該塊(而不是從磁盤讀取),極大提升性能。這涉及復雜的全局鎖管理(Global Resource Directory - GRD)。
故障轉移 (Failover): 如果某個節點發生故障(硬件、軟件、網絡):

  1. Clusterware 檢測到故障。
  2. 故障節點被逐出集群。
  3. 故障節點上正在運行的事務會回滾。
  4. 客戶端連接(通過 TAF/SCAN)會透明地重新連接到存活的節點。
  5. 存活的節點接管故障節點的工作負載(可能需要從磁盤重新讀取一些數據塊到自己的 SGA)。
  6. 數據庫本身(數據文件)始終在線且可用。 服務中斷時間通常很短(秒級到分鐘級)。

2.5 主要優勢:

高可用性: 單節點故障不影響數據庫整體可用性。
可擴展性: 通過添加節點,可以線性或接近線性地提升處理能力(特別是讀密集型負載,寫密集型需要更謹慎設計)。
負載均衡: 工作負載可以自動或手動分配到不同節點。
透明客戶端故障轉移: 應用程序感知不到后端節點的變化(需配合 TAF/FAN/SCAN)。

2.6 主要局限性:

復雜性: 安裝、配置、管理、調優(尤其是 Cache Fusion)比單實例復雜得多。
成本: 需要額外硬件(服務器、高速網絡、共享存儲)、Oracle RAC 許可證(按 CPU 核心計費)。
共享存儲單點故障: 雖然存儲本身通常有 RAID/鏡像保護,但如果整個共享存儲不可用,所有節點都會宕機。需要配合 ASM 冗余或存儲級復制解決。
腦裂風險: 需要 Voting Disk 和冗余網絡防止。
寫擴展性: 對寫沖突非常敏感的應用,擴展性可能受限(需要精心設計應用和數據分區)。
不解決數據損壞/邏輯錯誤: 一個節點上的誤操作(如 DROP TABLE)會立即影響整個數據庫。
不提供地理分散的容災: 節點通常位于同一個數據中心內(或近距離同城)。

3. Oracle ADG (Active Data Guard):

3.1目標:

數據保護、災難恢復 (DR)、報表/查詢卸載。提供物理備用數據庫。

3.2原理:

基于 Oracle 的 Redo Apply 技術。在主數據庫(Primary Database)之外,維護一個或多個物理上完全相同的備用數據庫(Standby Database)。主庫產生的重做日志(Redo Log)實時或近實時地傳輸到備庫,并在備庫上應用(Redo Apply),使備庫的數據與主庫保持同步。ADG架構如下圖:
在這里插入圖片描述

3.3 關鍵組件:

主數據庫: 生產數據庫,接受讀寫操作。
備用數據庫: 物理副本,通常(在最大可用性或最大保護模式下)處于 MOUNT 狀態或 READ ONLY WITH APPLY 狀態。數據文件結構與主庫完全相同。
日志傳輸服務: 負責將主庫的重做日志(歸檔日志或在線日志)傳輸到備庫(使用 LGWR/ARCH 進程 + Net Services)。
日志應用服務: 在備庫上,使用 MRP (Managed Recovery Process) 應用接收到的重做日志,保持數據同步。
Data Guard Broker: 可選的管理框架,簡化配置、監控和角色切換。

3.4 工作模式:

物理備用: 備庫是主庫的逐塊物理副本。通過應用重做直接修改數據文件。這是 ADG 的基礎。
ADG 核心特性: 物理備庫可以在應用重做的同時,以 READ ONLY 模式打開!這是與普通物理備庫(只能 MOUNT)的關鍵區別。

  1. 只讀訪問: 允許在備庫上執行只讀查詢、生成報表、運行 BI 工具等,完全不影響主庫性能,也不影響重做應用。
  2. 實時查詢: 從 Oracle 11gR2 開始,支持實時查詢,即使接收到的重做尚未完全應用到數據文件,查詢也能看到最新的已傳輸重做所對應的數據狀態(需要 STANDBY_MAX_DATA_DELAY 參數配合)。

3.5 保護模式:

最大性能 (Max Performance): 默認模式。異步傳輸重做。主庫提交事務無需等待備庫確認。提供最高主庫性能,但備庫可能有少量數據丟失(RPO > 0)。適用于異地災備。
最大可用性 (Max Availability): 同步傳輸重做。主庫提交事務需等待至少一個備庫確認寫入重做日志(但不一定已應用)。如果備庫不可用,主庫會自動降級為最大性能模式,不會掛起。平衡了高可用和數據保護(RPO ≈ 0)。適用于同城或近距離災備。
最大保護 (Max Protection): 同步傳輸重做。主庫提交事務必須等待至少一個備庫確認重做已寫入磁盤日志文件。如果所有同步備庫不可用,主庫會關閉,防止數據丟失。提供最高數據保護(RPO = 0),但犧牲了主庫可用性。較少使用。

3.6 角色切換:

切換 (Switchover): 計劃的、無損的主備角色互換。用于維護、升級等。主庫變為備庫,備庫變為主庫。操作相對簡單,停機時間短。
故障轉移 (Failover): 當主庫發生不可恢復的故障(硬件損壞、數據中心故障)時,將備庫提升 (Activate) 為新的主庫。這通常是有損操作(可能有數據丟失,取決于保護模式和傳輸延遲),需要手動介入或 Broker 自動執行。

3.7 主要優勢:

強大的災難恢復: 提供地理上獨立的數據庫副本,應對站點級故障。
數據保護: 防止存儲故障、數據損壞(可利用備庫恢復主庫)、人為誤操作(可利用備庫閃回或恢復)。
報表/查詢卸載: 利用 ADG 的只讀能力,將昂貴的只讀負載(報表、BI、查詢)從主庫卸載到備庫,顯著提升主庫性能和可擴展性。這是 ADG 非常核心的價值。
零數據丟失潛力: 在最大可用性/保護模式下可實現 RPO=0。
滾動升級/打補丁: 通過 Switchover,可以在備庫(新主庫)上先應用變更,驗證后再切換回來,減少計劃停機時間。
數據庫快照: 可以在 ADG 備庫上創建臨時的、可寫的快照數據庫用于測試、開發,不影響主庫或備庫的同步。
備份卸載: 可以在備庫上進行備份操作,減輕主庫壓力。

3.8 主要局限性:

備庫只讀: ADG 備庫是物理只讀的,不能直接接受寫操作(快照數據庫除外)。
延遲: 備庫數據與主庫存在一定的延遲(RPO),取決于網絡帶寬、距離、保護模式、主庫負載。
資源需求: 需要額外的服務器、存儲、網絡帶寬和 Oracle 許可證(ADG 需要額外許可,但比 RAC 便宜很多)。
不解決主庫實例級故障: 主庫實例崩潰,需要 RAC 或其他機制保證實例級高可用。
應用兼容性: 卸載查詢到備庫時,需注意只讀限制(如不能修改序列)和會話狀態問題。

4. RAC 與 ADG 的關系

RAC 和 ADG 是互補的技術,它們解決不同層面的問題:

4.1 RAC + ADG 黃金組合: 這是企業級高可用和災備的最佳實踐。

  1. RAC: 在主站點提供實例級高可用性,解決單臺服務器故障問題,提供負載均衡和橫向擴展能力。
  2. ADG: 將整個 RAC 數據庫(包含所有節點共享的數據)復制到一個或多個異地站點的物理備庫(可以是單實例或另一個 RAC)。提供:
    災難恢復: 應對站點級故障。
    數據保護: 防止邏輯/物理損壞。
    報表卸載: 在備庫運行只讀負載,釋放主 RAC 集群資源。
    效果: 實現了從服務器、實例到數據中心的多層次高可用和容災。

4.2獨立使用:

**只有 RAC:**能應對單節點故障,但無法應對共享存儲故障、站點故障、數據損壞/誤操作。缺乏異地容災和查詢卸載。
**只有 ADG:**能提供數據保護、容災和查詢卸載,但主庫本身是單點故障(單實例)。如果主庫實例宕機,需要手動 Failover 到備庫,恢復時間(RTO)較長。

4.RAC 與 ADG綜合對比

在這里插入圖片描述
簡單來說,RAC 是“多個人(實例)同時操作同一份文件(數據庫)”,解決的是干活的人(服務器)突然病倒(故障)的問題,并可以加人提高效率(擴展)。ADG 是“實時復印機”,把主文件(數據庫)一模一樣地復制一份或多份到其他地方(備庫)。主文件壞了(災難/損壞),可以用復印件(備庫)。同時,復印件可以用來查閱(只讀查詢),減輕主文件查閱壓力(卸載)。

本文完。
碼字不易,寶貴經驗分享不易,請各位支持原創,轉載注明出處,多多關注作者,后續不定期分享DB基本知識和排障案例及經驗、性能調優等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88863.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88863.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88863.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡安全實踐:從環境搭建到漏洞復現

要求:1.搭建docker2.使用小皮面板搭建pikachu靶場3.使用BP的爆破模塊破解pikachu的登陸密碼步驟4.Kail的msf復現永恒之藍一.搭建docker1. Docker介紹Docker 是容器,可以部分完全封閉。封閉意味:一個物質(放到容器)&…

車載診斷架構 --- 診斷功能開發流程

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

mysql數據庫知識

MySQL數據庫詳解MySQL是目前全球最流行的關系型數據庫管理系統之一,以其開源免費、高效穩定、易于擴展等特點,被廣泛應用于Web開發、企業級應用等場景。本文將從基礎概念、核心特性到實際應用,對MySQL進行全面解析。一、MySQL的基本概念1. 關…

基于springboot的美食文化和旅游推廣系統

博主介紹:java高級開發,從事互聯網行業多年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了多年的畢業設計程序開發,開發過上千套畢業設計程序,沒有什么華麗的語言&#xff0…

Rust賦能文心大模型4.5智能開發

文心大模型4.5版本概論 文心大模型4.5是百度推出的最新一代大規模預訓練語言模型,屬于文心大模型(ERNIE)系列。該模型在自然語言處理(NLP)、多模態理解與生成等領域表現出色,廣泛應用于智能搜索、內容創作、對話交互等場景。 核心能力 語言理解與生成 支持復雜語義理解…

前端抓包(不啟動前端項目就能進行后端調試)--whistle

1、安裝 1.1.安裝node.js 1.2.安裝whistle npm install -g whistle2.安裝瀏覽器插件【SwitchyOmega】在谷歌瀏覽器應用商店下載安裝即可配置proxy127.0.0.1:8989是w2 start的端口號啟用代理3.啟動服務(每次抓包都得啟動) w2 start點擊鏈接訪問網頁 http:…

kettle從入門到精通 第102課 ETL之kettle xxl-job調度kettle的兩種方式

之前我們一起學習過xxl-job調度carte,采用的xxl-job執行器方式,不了解的可以查看《kettle從入門到精通 第六十一課 ETL之kettle 任務調度器,輕松使用xxl-job調用kettle中的job和trans 》 今天我們一起來學習下使用xxl-job直接使用http調用…

純前端 JavaScript 實現數據導出到 CSV 格式

日常開發中,數據導出到文件通常有兩種方式: 在后端處理,以文件流或者資源路徑的方式返回;后端返回數據,前端按需處理后再觸發瀏覽器的下載事件,已保存到本地文件。 這里介紹后者的一種零依賴的實現方式。…

香港理工大學實驗室定時預約

香港理工大學實驗室定時預約 文章目錄香港理工大學實驗室定時預約簡介接單價格軟件界面網站預約界面代碼對爬蟲、逆向感興趣的同學可以查看文章,一對一小班教學(系統理論和實戰教程)、提供接單兼職渠道:https://blog.csdn.net/weixin_35770067/article/d…

Spring AI 項目實戰(十七):Spring Boot + AI + 通義千問星辰航空智能機票預訂系統(附完整源碼)

系列文章 序號文章名稱1Spring AI 項目實戰(一):Spring AI 核心模塊入門2Spring AI 項目實戰(二):Spring Boot + AI + DeepSeek 深度實戰(附完整源碼)3Spring AI 項目實戰(三):Spring Boot + AI + DeepSeek 打造智能客服系統(附完整源碼)4

STM32CubeMX+CLion 使用ARM_CMSIS_DSP

安裝 參考: 【CLion開發stm32】如何使用DSP庫 - 未知的奇跡 - 博客園 實際上這樣配置會出一點小問題,現對其修改 1. 項目根目錄下新建 DSP_LIB文件夾 將目錄STM32CubeMX\Repository\STM32Cube_FW_G4_V1.6.1\Drivers\CMSIS\DSP下的Include文件夾和So…

深入解析C#接口實現的兩種核心技術:派生繼承 vs 顯式實現

—— 如何優雅解決多接口沖突問題 🔍 核心概念速覽 派生成員實現 類通過繼承基類方法隱式滿足接口實現需求 interface IIfc1 { void PrintOut(string s); }class MyBaseClass { // 基類實現方法 public void PrintOut(string s) > Console.WriteLine($"Cal…

鴻蒙項目構建配置

鴻蒙項目構建配置 參考文檔 深入鴻蒙開發之后,一般會遇到以下幾個問題。 每次編譯的時候需要手動配置不同的 versionCode 和 versionName;在使用 git 管理代碼的時候,不同的人或者不在同一臺電腦上,dev eco 這個編譯器需要經常…

os.machine()詳解

核心功能返回硬件架構 返回字符串表示系統的硬件架構,常見值包括: x86_64:64 位 x86 架構(Intel/AMD)armv7l:32 位 ARM 架構(如樹莓派 3B)aarch64:64 位 ARM 架構&#x…

linux-shell腳本

linux-shell腳本一、什么是shell腳本?二、為什么要學習shell腳本?三、腳本執行的方式3.1 bash test.sh3.2 ./test.sh3.3 source test.sh3.4 . test.sh四、變量的使用4.1 變量定義與使用4.2 避免變量混淆4.3 位置變量for循環和位置變量的結合案例4.4 read…

【嵌入式】51單片機學習筆記-Keil5軟件安裝教程

00. 目錄 文章目錄00. 目錄01. Keil C51概述02. Keil C51下載03. Keil C51安裝04. Keil C51注冊05. 附錄01. Keil C51概述 Keil C51 是德國Keil公司(現被ARM收購)開發的嵌入式開發工具,專注于8051單片機的C語言和匯編開發。它是μVision IDE…

ai之 ubuntu本地安裝mineru2.1.0

MinerU 目錄 一、更新內容概述寫在前面的話:總體來看,2.0版本升級為全新的 VLM 解析模式,更優于以前的基礎解析方式。二、MinerU 安裝部署下面使用源碼來進行環境安裝。注意:當前狀態說明推薦解決方案如果是下載插件慢可以 指定阿里源三、MinerU 使用1. 在線體驗2. 命令行使…

華為昇騰NPU與NVIDIA CUDA生態兼容層開發實錄:手寫算子自動轉換工具鏈(AST級代碼遷移方案)

點擊 “AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力,按量計費,靈活彈性,頂級配置,學生專屬優惠。 當國產AI芯片崛起遭遇生態壁壘,如何實現CUDA算子到昇騰平臺的無損遷移成為關鍵挑…

GraphRAG Docker化部署,接入本地Ollama完整技術指南:從零基礎到生產部署的系統性知識體系

相關推薦:Umi-OCR 的 Docker安裝(win制作鏡像,Linux(Ubuntu Server 22.04)離線部署) 一、技術背景與發展脈絡 1.1 RAG技術演進歷程分析 檢索增強生成(RAG)技術的發展經歷了三個重要…

Android 系統默認Launcher3 菜單模式雙層改成單層-3

Android 系統默認自帶Launcher3 菜單都為雙層模式 各手機大廠的Launcher的菜單模式都為單層 如何將launcher3的菜單模式改為單層模式 mOverviewPanel = (ViewGroup) findViewById(R.id.overview_panel); mWidgetsButton = findViewById(R.id.widget_butto…