standby database三種模式的相互關係
環境:windows 2k advServer SP2 + oracle 8.1.7.4
一 standby database不同模式的特點及其作用
……standby
database可以分別執行在三種模式下,即手工恢復模式(manual recover mode)、自動恢復模式(managed
recover mode)和只讀模式(read only mode)。透過這三種不同的執行方式,oracle standby
database提供了豐富的功能。
……1
手工模式:手工模式是standby database執行的基礎模式,在這個模式下,standby
database並不自動使用主庫傳遞過來的日誌進行恢復而保持與主庫的同步,而是需要手工進行恢復。雖然我們可以配置主庫的歸檔位置,使得主庫的歸檔日
志能自動傳遞到手工模式的待用庫,但更多的情況下是使用作業系統命令手工傳遞日誌,因而理論上我們可以為一個主庫配置無窮多個手工模式的待用庫。
……
在手工模式下,待用庫可以看作是處於靜止狀態,資料檔案、控制檔案等是一致的,我們可以簡單的關閉一個手工模式的待用庫,從而得到一個資料檔案一致的冷備
份,再用這個冷備份結合歸檔日誌來做其他方式的恢復,比如時間點恢復,指定事務號的恢復,特定的資料檔案的恢復,或者是做完全恢復等。
……
當建立完一個備用庫,並且使用alter database mount standby
database載入以後,待用庫即處於手工恢復模式。在這個模式的基礎上,我們可以以只讀方式開啟(open)它,或者是將他切換到自動恢復模式,或者
是進行手工恢復,或者是關閉它而得到一個一致的冷備份,或者是啟用它成為一個普通的資料庫。
……2
自動恢復模式:將一個standby
database切換到自動恢復模式需要兩個前提:一是主庫的歸檔日誌能自動傳遞過來,二是切換之前,standby
database與主庫的最大歸檔日誌號是一致的,即沒有日誌序列缺失(gap sequence
我實在不知道這樣的一個單詞應該怎樣翻譯,從原文來講,應該是序列縫隙,而從oracle文件裡的意思來講,應該是指待用庫的v$log_history
裡的最大日誌號與主庫的v$log_history
裡的最大日誌號之間的差距,即是待用庫裡還有多少個主庫的日誌沒有用於恢復,就起了這樣一個名字。各位大俠如果有更合適的詞來翻譯這個短語,請不吝賜
教)。有了這兩個前提,就可以將一個standby database 從手工模式切換到自動模式。當standby database
處於自動模式時,它可以自動應用主庫傳遞過來的歸檔日誌進行恢復,從而使得standby
database資料與主庫保持一致(相差主庫線上日誌裡記錄的事務)。在8i版本,一個主庫的日誌歸檔路徑最多有5個,其中一個必須是本地路徑,因此,
從理論上講,一個主庫最多隻能帶4個自動模式的待用庫。
……
自動模式的待用庫使用起來非常方便,只要日誌能正常歸檔,不需要對它進行干預。當主庫出現問題時,我們可以簡單的將一個自行恢復模式的待用庫啟用,即可替
代主庫執行,數秒鐘的操作即可完成這個轉換。但是,如果因為任何原因出現了日誌序列缺失,那麼自動模式就會中止,從而回到手工模式。
……3
只讀模式:將一個standby database 置於只讀模式是oracle在8i以後才增加的功能。Oracle 7
只有手工模式,8.0以後增加了自動模式,815以後才增加了standby database 的只讀模式。我們可以將一個standby
database以只讀模式開啟,然後對資料庫進行查詢,在上面執行較大較複雜的查詢事務,比如統計報表之類的,減輕主庫的負擔。也可以透過查詢最新的數
據來檢驗standby
database是否真的自動恢復了主庫的資料,是否真的與主庫同步了。如同oracle文件所講的那樣,我們可以將一個只讀模式的standby
database切換到手工模式,或者是自動模式,從而再次使得這個standby database能保持與主庫同步。
……
據oracle文件講,在只讀模式上執行較大較複雜的查詢事務時,我們可能需要使用磁碟進行排序操作。在只讀模式下,我們可以為一個只讀的庫建立一個臨時
表空間來進行排序,這樣將在磁碟上建立一個臨時檔案,而不需要改變standby
database的控制檔案。關於oracle文件裡講到的臨時表空間的問題,我看得不是很明白,當時也沒有時間做這方面的測試,這裡就不細細的再翻譯文
檔了,免得誤導大家。等我詳細的做完測試,徹底搞清楚這個臨時表空間的問題之後,再專門的寫一個專題貼上來。
二 oracle standby database三種模式的相互關係
……
在oracle文件裡,提供了一張圖片,描述了三種模式的相互關係。據我的測試,這張圖片是錯誤的。如圖1所示,oracle文件講,這三種模式可以直接
的互相轉換。按照我在做standby
database的測試時得出的結論(具體的測試後面單獨的寫一文貼上來)以及我的理解這三種模式,包括standby
database建立、啟用的關係,應該是如圖2所示
……
我們可以將一個手工模式的standby database切換到其他的任何一個模式,反過來講,當一個standby
database處於其他模式時,要切換到另外一種模式,都必須先切換回手工恢復模式(或者取消只讀,或者中止自動恢復),然後才能切換到想要切換的模
式。並不是如oracle文件裡所講,手工模式,自動模式與只讀模式可以互相(直接)切換。不同模式的轉換,必須透過手工模式作為中介(只限於8i版本。
據說9i版本可以直接的切換而不需要透過手工模式進行轉換,因為我沒有9i環境,也沒有針對9i作過測試,也沒有看過9i的文件,姑且存疑)。這就是為什
麼我說手工模式是oracle standby database三種模式的基礎模式的原因。後面的相互切換的測試將詳細的說明這種關係。
三 standby database相互切換的測試結果
1 手工模式切換到其他模式:
……手工模式————> 自動模式
SQL>recover managed standby database;
……此時,當前的SQL*PLUS視窗停止響應。可以關閉當前視窗或者開啟另外的SQL*PLUS視窗來對待用庫進行管理或查詢。也可以在另外的視窗中輸入命令取消待用庫的自動模式,即中止待用庫自動恢復。
……手工模式————> 只讀模式
SQL> alter database open read only;
……將一個待用庫置於只讀模式以後,就可以進行查詢。
2 自動模式到其他模式:
……
雖然oracle文件講,自動模式可以切換到手工模式,也可以切換到只讀模式,但是文件所提供的方法,都是首先取消自動模式的自動恢復。實際上,將一個自
動模式的自動恢復取消,就是將它切換到了手工模式了。因此,自動模式的standby
database只能直接切換到手工模式,然後再透過手工模式切換到其他模式。
SQL>recover managed standby database cancel;
……或者
SQL>recover managed standby database cancel immediate;
……
這兩個命令的不同之處在於,如果不帶immediate選項,那麼managed standby
database將當前正在進行恢復的日誌恢復完成以後,才中止自動恢復,而不再讀取下一個歸檔日誌。如果新增了immediate選項,那麼
managed standby
database將在讀取當前使用的歸檔日誌的下一個塊之前,或者是在讀取下一個日誌之前中止恢復。如果輸入此命令時,oracle正在使用當前日誌的最
後一個塊,即在讀取下一個日誌之前中止了恢復,那麼與不帶immediate選項是一樣的。如果是在讀取當前日誌的下一個塊之前中止了恢復,那麼
oracle的檔案是不一致的,這種情況下,不能以只讀方式開啟待用庫(這一步未做測試,因為我的測試環境裡沒有產生過超過100K的日誌檔案,姑且信
之)。
……要想快速檢測備庫是否自動使用了主庫的最
新的歸檔日誌,即檢測備庫是否真的處於自管理模式,可以手工強制切換主庫日誌後,分別查詢主庫與備庫的最大歸檔日誌號是否一致。如果不一致,等待一段時間
後再查詢(有可能備庫還沒有來得及用主庫的日誌進行自動恢復),等待的時間取決於歸檔日誌的大小,以及機器的效能。
查詢最大歸檔日誌號的命令:
SQL>select max(sequence#) from v$log_history;
3 只讀模式到其他模式:
……
同樣地,oracle文件也說可以將只讀模式的standby
database轉換到其他模式,前提是首先關閉所有連線到待用庫的連線,然後再進行切換。我在測試中發現,就連當前輸入切換命令的連線也需要關閉,只讀
模式的standby
database才能切換。在實際的應用中,如果連輸入命令的視窗都關閉了,那麼如何輸入切換的命令呢?因此,想要將一個只讀模式的待用庫切換到其他模
式,只能先將它關閉,然後再載入它,切換到其他的模式。
SQL>shutdown immediate;
SQL>startup nomunt;
SQL>alter database mount standby database;
……此時,standby database就置於手工模式了,可以進行手工恢復,或者在消除了日誌序列缺失後,切換到自動模式。
4 啟用一個standby database:
……如果standby database處於手工模式之外的其他模式,首先應將之切換到手工模式,然後做手工恢復,消除日誌序列缺失,再將它啟用,否則可能丟失資料。
SQL>alter database activate standby database;
……完成這一步操作之後,檢視線上日誌組所在的目錄,可以看到新生成了線上日誌組。此時查詢v$instance檢視,資料庫為start狀態,此時資料庫還不能進行查詢或其他操作。Oracel文件講,需要關閉資料庫,然後再開啟它,即作如下操作:
SQL>shutdown immdiate;
SQL>startup;
……但經測試發現,雖然在啟用standby database之後資料庫處於start狀態,但是可以不關閉再開啟它,而可以先載入,然後再開啟:
SQL>alter database activate standby database;
SQL>alter database mount;
SQL>alter database open;
……這時就可以正常的使用資料庫了。
這是oracle文件描述的standby database 三種模式的相互關係,按文件的說法,三種模式可以“直接”相互切換。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-670036/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- standby databaseDatabase
- Convert a Physical Standby Database into a Snapshot Standby DatabaseDatabase
- standby database to primary database.Database
- Physical Standby Database 切換到 Snapshot Standby DatabaseDatabase
- archivelog模式和flashback db以及guarantee restore point之間的相互制約關係!Hive模式REST
- Standby Database的工作原理Database
- Standby Database ---09Database
- 淺談OOCSS、SMACSS、BEM三種設計模式與前端架構優化的關係CSSMac設計模式前端架構優化
- dispaly、position、float之間的關係與相互作用
- RXJS元件間超越父子關係的相互通訊JS元件
- 探索 DevOps 和質量內建的相互關係dev
- [20170302]關於activate standby databaseDatabase
- (轉)Standby Database的工作原理Database
- Create RAC Standby Database for RAC Primary DatabaseDatabase
- standby database No RFS 程式Database
- Rman backup standby databaseDatabase
- Standby Database for reportDatabase
- +3.3V_Standby和+3.3V_Normal的關係ORM
- kubeproxy 的三種模式模式
- 設計模式存在哪些關聯關係,六種關係傻傻分不清--- UML圖示詳解設計模式
- 交叉熵、KL 散度 | 定義與相互關係熵
- 物理standby database的日常維護Database
- 建立 Logical Standby DatabaseDatabase
- manage logical standby databaseDatabase
- How a Standby Database Is Mounted (295)Database
- java三大特性的關係?Java
- cmsis和各種庫的關係
- 淺談框架與模式的關係框架模式
- 設計模式中類的關係設計模式
- Java的三種代理模式Java模式
- ER模型轉關係模式模型模式
- Logical Standby Database的配置步驟.Database
- 使用rman建立standby database的過程Database
- password_reuse_time與password_reuse_max之間的相互關係
- Setup Standby Database on One PC(轉)Database
- Oracle DG Standby Database型別OracleDatabase型別
- Oracle DG建立Physical Standby DatabaseOracleDatabase
- Creating a Physical Standby DatabaseDatabase