需要了解的Data Guard理論知識(三)
一. 物理Standby 和邏輯Standby 的區別
Standby資料庫型別分為兩類:物理Standby和邏輯Standby。
1.物理Standby
我們知道物理Standby與Primary資料庫完全一模一樣,DG透過REDO應用來維護物理Standby資料庫。
通常在物理Standby沒有執行REDO應用操作的時候,可以將物理Standby資料庫以READ ONLY模式開啟,如果資料庫中指定了Flashback Area的話,甚至還可以被臨時性的置為READ WRITE模式,操作完之後再透過Flashback Database特性恢復回READ WRITE前的狀態,以便繼續接收Primary端傳送的REDO並應用。
REDO應用。物理Standby透過REDO應用來保持與Primary資料庫的一致性,所謂的REDO應用,實質是透過Oracle的恢復機制,應用歸檔檔案(或Standby Redologs檔案)中的REDO資料。恢復操作屬於塊對塊的應用。如果正在執行REDO應用的操作,Oracle資料庫就不能被Open。
READ ONLY模式開啟。以READ ONLY模式開啟後,可以在Standby資料庫執行查詢或備份等操作(變相減輕Primary資料庫壓力)。此時Standby資料庫仍然能夠繼續接收Primary資料庫傳送的REDO資料,不過並不會應用,直到Standby資料庫重新恢復REDO應用。
也就是說在READ ONLY模式下不能執行REDO應用,REDO應用時資料庫肯定處於未開啟狀態。如果需要的話,你可以在兩種狀態間轉換,如先應用REDO,然後將資料庫置為READ ONLY狀態,需要與Primary同步時再次執行REDO應用命令,切換回REDO應用狀態。呵呵,人生就是迴圈,資料庫也是一樣。
提 示: Oracle 11g版本中增強物理Standby的應用功能,在11g版本中,物理Standby可以在OPEN READ ONLY模式下繼續應用REDO資料,這就極大地提升了物理Standby資料庫的應用場合。
READ WRITE模式開啟。如果以READ WRITE模式開啟,那麼Standby資料庫將暫停從Primary資料庫接收REDO資料,並且暫時失去災難保護的功能。當然,以READ WRITE模式開啟也並非一無是處,如你可能需要臨時除錯一些資料,但又不方便在正式庫中操作,那就可以臨時將Standby資料庫置為READ WRITE模式,操作完之後將資料庫閃回到操作前的狀態(閃回之後,Data Guard會自動同步,不需要重建物理Standby,不過如果從另一個方向看,沒有啟動閃回,那就回不到READ WRITE前的狀態了)。
物理Standby特點如下:
(1)災難恢復及高可用性。物理Standby提供了一個健全、高效的災難恢復,以及高可用性的解決方案。更加易於管理switchover/failover角色轉換及在更短的計劃內或計劃外停機時間。
(2)資料保護。使用物理Standby資料庫,DG能夠確保即使面對無法預料的災害也能夠不丟失資料。前面也提到物理Standby是基於塊對塊的複製,因此與物件、語句無關,Primary資料庫上有什麼,物理Standby資料庫端也會有什麼。
(3)分擔Primary資料庫壓力。透過將一些備份任務、僅查詢的需求轉移到物理Standby資料庫,可以有效節省Primary資料庫的CPU及I/O資源。
(4)提升效能。物理Standby所使用的REDO應用技術使用最底層的恢復機制,這種機制能夠繞過SQL級程式碼層,因此效率最高。
2.邏輯Standby
邏輯Standby也要透過Primary資料庫(或其備份,或其複製庫,如物理Standby)建立,因此在建立之初與物理Standby資料庫類似。不過由於邏輯Standby透過SQL應用的方式應用REDO資料,因此邏輯Standby的物理檔案結構,甚至資料的邏輯結構都可以與Primary不一致。
與物理Standby不同,邏輯Standby正常情況下是以READ WRITE模式開啟,使用者可以在任何時候訪問邏輯Standby資料庫,就是說邏輯Standby是在OPEN狀態執行SQL應用。同樣有利也有弊,由於SQL應用自身特點,邏輯Standby對於某些資料型別及一些DDL/DML語句會有操作上的限制。可以在檢視DBA_LOGSTDBY_UNSUPPORTED 中檢視不支援的資料型別,如果使用了這種資料型別,則不能保證資料庫完全一致。
邏輯Standby 的讀寫開啟可以使它做報表系統,這樣減輕系統的壓力。
除了上述物理Standby中提到的類似災難恢復、高可用性及資料保護等特點之外,邏輯Standby還有下列一些特點:
(1)有效地利用備機的硬體資源。除災難恢復外,邏輯Standby資料庫還可用於其他業務需求。如透過在Standby資料庫建立額外的索引、物化檢視等提高查詢效能並滿足特定業務需要;又如建立新的SCHEMA(該SCHEMA在Primary資料庫端並不存在),然後在這些SCHEMA中執行那些不適於在Primary資料庫端執行的DDL或者DML操作等。
(2)分擔Primary資料庫壓力。邏輯Standby資料庫可以在保持與Primary同步時仍然置於開啟狀態,這使得邏輯Standby資料庫能夠同時用於資料保護和報表操作,從而將主資料庫從報表和查詢任務中解脫出來,節約寶貴的 CPU和I/O資源。
(3)平滑升級。可以透過邏輯Standby來實現如跨版本升級,為資料庫打補丁等操作。應該說應用的空間很大,而帶來的風險卻很小(前提是如果你擁有足夠的技術實力。另外雖然物理Standby也能夠實現一些升級操作,但如果跨平臺的話恐怕就力不從心了,所以此項沒有作為物理Standby的特點列出),我個人認為這是一種值得可行的線上的滾動的平滑的升級方式,如果你的應用支援建立邏輯Standby的話。
二. Log應用服務(Log Apply Services)
Data Guard透過應用REDO維持Primary資料庫與各Standby資料庫之間的一致性,在後臺默默無聞地支撐著的就是傳說中的Log應用服務。Log應用服務又分以下兩種方式:
REDO應用:物理Standby資料庫專用,透過介質恢復的方式保持與Primary資料庫的同步。
SQL應用:邏輯Standby資料庫專用,核心是透過LogMiner分析出SQL語句在Standby端執行。
因此物理Standby在應用REDO資料時必須是MOUNT狀態,而邏輯Standby則是以READ WRITE模式開啟並應用REDO資料,不過被維護的物件預設處於只讀狀態,無法在邏輯Standby端直接修改。
7.1 Log應用服務配置選項
預設情況下,Log應用服務會等待單個歸檔檔案全部接收之後再啟動應用,如果Standby資料庫配置了Standby Redologs,就可以開啟實時應用(Real-Time Apply),這樣Data Guard就不需要再等待接收完歸檔檔案,只要RFS程式將REDO資料寫入Standby Redologs,即可透過MRP/LSP實時寫向Standby資料庫。
7.1.1.REDO資料實時應用
啟動實時應用的優勢在於,REDO資料不需要等待歸檔完成,接收到即可被應用,這樣執行角色切換時,操作能夠執行得更快,因為日誌是被即時應用的。
要啟動實時應用也簡單,前提是Standby資料庫端配置了Standby Redologs。
物理Standby要啟用實時應用,要在啟動REDO應用的語句後附加USING CURRENT LOGFIE子句,例如:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE ;
邏輯Standby要啟用實時應用,只需要在啟動REDO應用的語句後附加IMMEDIATE子句即可,例如:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
7.1.2.REDO資料延遲應用
有實時就有延遲,某些情況下你可能不希望Standby資料庫與Primary太過同步,那就可以在Primary資料庫端傳送REDO資料的相應LOG_ARCHIVE_DEST_n引數中指定DELAY屬性(單位為分鐘,如果指定了DELAY屬性,但沒有指定值,則預設是30分鐘)。
注意:該屬性並不是說延遲傳送REDO資料到Standby,而是指明歸檔到Standby後,開始應用的時間。
例如:設定LOG_ARCHIVE_DEST_3的DELAY屬性為15分鐘:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=DavePrimary ARCH VALID_ FOR=
(ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=Dave DELAY=15';
不過,如果DBA在啟動REDO應用時指定了實時應用,那麼即使在LOG_ ARCHIVE_DEST_n引數中指定了DELAY屬性,Standby資料庫也會忽略DELAY屬性。
另外,Standby端還可以在啟動REDO應用時,透過附加NODELAY子句的方式,取消延遲應用。
物理Standby可以透過下列語句取消延遲應用:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY;
邏輯Standby可以透過下列語句取消延遲應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NODELAY;
一般設定延遲應用的需求都是基於容錯方面的考慮,如Primary資料庫端由於誤操作,資料被意外修改或刪除,只要Standby資料庫尚未應用這些修改,你就可以快速從Standby資料庫中恢復這部分資料。不過自Oracle從9i版本開始提供FLASHBACK特性之後,對於誤操作使用FLASHBACK特性進行恢復,顯然更加方便快捷,因此DELAY方式延遲應用已經非常少見了。
7.2 應用REDO資料到Standby資料庫
7.2.1.物理Standby應用REDO資料
物理Standby啟動REDO應用,資料庫要處於MOUNT狀態或是OPEN READ ONLY狀態,啟動REDO應用的命令相信大家已經非常熟悉了。
前臺應用:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;
語句執行完成後,不會將控制權返回到命令列視窗,除非你手動中止應用。在這種情況下如果還需要對資料庫進行操作,只能新開一個命令列連線,在Oracle 8i剛推出Standby特性時(那時不叫Data Guard),只提供了這種方式。
後臺應用:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
這是現在比較通用的方式,語句執行完後,控制權自動返回到當前的命令列模式,REDO應用以後臺程式執行。
啟動實時應用,附加USING CURRENT LOGFILE子句即可:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;
如果要停止REDO應用,執行下列語句即可:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
7.2.2.邏輯Standby應用REDO資料
SQL應用的原理是將接收到的REDO資料轉換成SQL語句在邏輯Standby資料庫端執行,因此邏輯Standby需要啟動至OPEN狀態。
(1)啟動SQL應用。邏輯Standby資料庫啟動SQL應用沒有前、後臺執行之說,語句執行完之後,控制權就會自動返回當前命令列視窗。
要啟動SQL應用,直接執行下列語句即可:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
如果要啟動實時應用,附加IMMEDIATE子句即可,例如:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
(2)停止SQL應用,如:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
由於是執行SQL語句的方式應用REDO資料,因此上述語句的執行需要等待當前執行的SQL觸發的事務結束,才能真正停止REDO應用的狀態。
如果不考慮事務執行情況,馬上停止REDO應用,可以透過下列的語句來完成:
SQL> ALTER DATABASE ABORT LOGICAL STANDBY APPLY;
注: 整理自 張曉明《大話Oracle RAC》和 李丙洋《塗抹Oracle》
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69994536/viewspace-2762482/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 需要了解的Data Guard理論知識(一)
- 需要了解的Data Guard理論知識(二)
- Oracle Data Guard 理論知識Oracle
- 技術白皮書:Oracle Data Guard 11gOracle Data Guard 理論知識OracleGo
- 前端需要了解的http知識前端HTTP
- 前端需要了解的色彩知識前端
- 關於機器學習需要了解的知識機器學習
- 前端需要了解的SSO與CAS知識前端
- 前端需要了解的 SSO 與 CAS 知識前端
- Android開發需要了解的 IM 知識Android
- 直播中需要了解的AAC基礎知識
- [討論]IT專案經理需要很專業的IT知識嗎
- Oracle10g Data Guard (Standby) 理論與實踐Oracle
- [譯] Web 開發者需要了解的基礎色彩理論Web
- 前端需要了解的計算機網路知識前端計算機網路
- 關於強化學習需要了解的知識強化學習
- Python爬蟲需要了解的代理IP知識Python爬蟲
- 需要擴充的知識 理財
- Oracle Data Guard 10g R2概念和理論Oracle
- Oracle10g Data Guard (Standby) 理論與實踐 2Oracle
- [Data Guard]Oracle10g Data Guard學習筆記(三)Oracle筆記
- 爬蟲之前需要先了解哪些專業知識?爬蟲
- 開發微信小程式需要了解哪些知識?微信小程式
- 程式設計師需要了解的硬核知識之磁碟程式設計師
- 程式設計師需要了解的硬核知識之CPU程式設計師
- 後端工程師需要了解的跨域知識後端工程師跨域
- 新手學習Java需要了解的幾個知識點!Java
- 移動開發需要了解的UI設計知識移動開發UI
- Data Guard維護管理三之處理archivelog gapHive
- 論基礎理論知識的重要性
- Oracle10g Data Guard (Standby) 理論與實踐 [final]Oracle
- 華為 組播理論知識
- 資料庫理論知識資料庫
- 學習UI設計都需要了解哪些知識?UI
- 作為產品經理,你需要了解的基本演算法知識和實操演算法
- data guard的結構常識(轉載)
- 入門Java你需要了解的幾個知識要點!Java
- 設計師也需要了解的一些前端知識前端