Oracle數(shù)據(jù)庫高可用之DG+RAC詳解
一、DG的概念和原理
Oracle Data Guard是Oracle數(shù)據(jù)庫的一種高可用性解決方案,它通過在主數(shù)據(jù)庫和一個或多個輔助數(shù)據(jù)庫之間自動復制和同步數(shù)據(jù),來實現(xiàn)數(shù)據(jù)庫的持續(xù)可用性和災難恢復能力。
以下是Oracle Data Guard的工作原理
- 主數(shù)據(jù)庫(Primary Database):主數(shù)據(jù)庫是應用程序連接和執(zhí)行事務的數(shù)據(jù)庫。在主數(shù)據(jù)庫中進行的所有更改都會被記錄在歸檔日志中。
- 輔助數(shù)據(jù)庫(StandBy database):輔助數(shù)據(jù)庫是通過復制主數(shù)據(jù)庫的歸檔日志來保持與主數(shù)據(jù)庫同步的數(shù)據(jù)庫。輔助數(shù)據(jù)庫可以是物理備庫或邏輯備庫。
物理備份
主數(shù)據(jù)庫將歸檔日志傳輸給輔助數(shù)據(jù)庫。
這可以通過物理方式(通過網(wǎng)絡傳輸二進制歸檔日志)進行
DG保護模式
| 模式 | 數(shù)據(jù)丟失風險 | 傳輸 | 特點 |
| 最大保護 | 零數(shù)據(jù)丟失 | 同步 | 只有備考確認收到日志,主庫才進行下一步操作 |
| 最大可用 | 零數(shù)據(jù)丟失 | 同步 | 與最大保護不同,最大可用在日志傳輸超時和備庫收到日志后都會進行下一步操作 |
| 最大性能 | 有少量數(shù)據(jù)丟失風險 | 異步 | 主數(shù)據(jù)庫不等待備用數(shù)據(jù)庫確認 |

- LGWR進程:將日志寫入寫入在線日志中,
- LNSN進程:將在線日志傳輸?shù)絺鋷?/li>
- ARcn:對在線日志進行歸檔
- RFS進程:遠程接數(shù)據(jù),連接備庫的日志
- MRP進程:將日志應用恢復到備用數(shù)據(jù)庫
業(yè)務中主庫一般用作更新,備庫一般用作讀,查詢操作。
二、RAC原理
Oracle RAC(Real Application Clusters)是一種高可用性和可伸縮性的數(shù)據(jù)庫解決方案,它基于共享磁盤架構(gòu),允許多個服務器共享同一個數(shù)據(jù)庫實例。
以下是Oracle RAC的工作原理:
- 共享存儲:Oracle RAC使用共享存儲,將數(shù)據(jù)庫文件存儲在共享的磁盤陣列上。這使得多個服務器可以同時訪問和修改數(shù)據(jù)庫文件。
- 共享緩存:Oracle RAC使用共享緩存(Shared Cache),也稱為共享SGA(System Global Area),來緩存數(shù)據(jù)和SQL語句。每個服務器都可以訪問并更新共享緩存,這樣可以提高性能和并發(fā)能力。
- 共享連接:Oracle RAC使用公共網(wǎng)絡連接來提供對數(shù)據(jù)庫的訪問。客戶端可以通過網(wǎng)絡連接到任意一個服務器節(jié)點,然后通過Oracle Clusterware將請求路由到運行數(shù)據(jù)庫實例的節(jié)點。
- 數(shù)據(jù)庫實例:Oracle RAC包含多個數(shù)據(jù)庫實例,每個實例都運行在獨立的服務器上。每個實例都有自己的SGA和后臺進程,但它們共享同一個數(shù)據(jù)庫。
- 數(shù)據(jù)共享:共享存儲和共享緩存使得所有的數(shù)據(jù)庫實例都可以訪問相同的數(shù)據(jù)。當一個實例修改數(shù)據(jù)時,其他實例可以立即看到這些修改。
- 數(shù)據(jù)同步:Oracle RAC使用高速的內(nèi)部網(wǎng)絡來保持所有數(shù)據(jù)庫實例之間的數(shù)據(jù)同步。當一個實例修改數(shù)據(jù)時,這些修改會被寫入共享存儲,并通過內(nèi)部網(wǎng)絡傳播到其他實例,以確保數(shù)據(jù)的一致性。
- 故障轉(zhuǎn)移:如果一個數(shù)據(jù)庫實例故障,Oracle Clusterware會檢測到這個故障,并將數(shù)據(jù)庫會話和工作負載遷移到其他正常運行的實例上,實現(xiàn)高可用性和容錯能力。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
oracle?指定類型和指定位數(shù)創(chuàng)建序列號的代碼詳解
這篇文章主要介紹了oracle?指定類型和指定位數(shù)創(chuàng)建序列號,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
Oracle數(shù)值型函數(shù)之EXP(y)函數(shù)詳解
本文主要介紹了Oracle數(shù)值型函數(shù)之EXP(y)函數(shù)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-07-07
Oracle數(shù)據(jù)庫將表數(shù)據(jù)轉(zhuǎn)儲為JSON格式文件的詳細步驟
這篇文章主要介紹了如何將Oracle數(shù)據(jù)庫表數(shù)據(jù)轉(zhuǎn)儲為JSON格式文件的詳細步驟,包括所需參數(shù)、數(shù)據(jù)庫連接、數(shù)據(jù)獲取和保存JSON文件等,需要的朋友可以參考下2025-11-11
oracle表空間不足ORA-01653的問題:?unable?to?extend?table
這篇文章主要介紹了oracle表空間不足ORA-01653:?unable?to?extend?table的問題?,出現(xiàn)這種表空間不足的問題一般有兩種情況:一種是表空間的自動擴展功能沒有打開,另一種確實是表空間確實不夠用了,已經(jīng)達到了擴展的極限,本文給大家分享解決方法,需要的朋友參考下2022-08-08
ORACLE中dbms_output.put_line輸出問題的解決過程
最近用dbms_output.put_line來輸出變量的一些信息,卻總是看不到結(jié)果,所以這篇文章主要給大家介紹了關(guān)于ORACLE中dbms_output.put_line輸出問題的解決過程,需要的朋友可以參考下2022-06-06
oracle 12c創(chuàng)建可插拔數(shù)據(jù)庫(PDB)與用戶詳解
Oracle12c 中,增加了可插接數(shù)據(jù)庫的概念,即PDB,允許一個數(shù)據(jù)庫容器(CDB)承載多個可插拔數(shù)據(jù)庫(PDB)。下面這篇文章主要給大家介紹了利用oracle 12c創(chuàng)建可插拔數(shù)據(jù)庫(PDB)與用戶的相關(guān)資料,文中介紹的很詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02
Oracle查詢語句中rownum與rowid的不同之處分析
這篇文章主要介紹了Oracle查詢語句中rownum與rowid的不同之處分析,需要的朋友可以參考下2014-07-07
oracle統(tǒng)計時間段內(nèi)每一天的數(shù)據(jù)(推薦)
這篇文章主要介紹了oracle統(tǒng)計時間段內(nèi)每一天的數(shù)據(jù),需要的朋友可以參考下2018-03-03

