Oracle之11g DataGuard

vmsysjack發表於2019-12-31

1、什麼是DataGuard

DataGuard是Oracle推出的一項專門針對oracle資料庫的高可用技術,在8i之前被稱之為Standby Dtabase,從9i開始正式更名為DataGuard。通常情況下至少會有兩個資料映象節點構成的主備關係。通過redo日誌的同步技術來保證資料的實時同步,可以實現資料庫的主備快速切換實現資料的容災。

2、為什麼要用DataGuard

DataGuard 中文名又叫 資料衛士,顧名思義,是為了保證資料安全ORACLE推出的一項技術,主要用於對資料安全性重視程度比較高的一些場合,比如:銀行,電信等行業他們都在應用了非常多套的DataGuard資料衛士來保障資料的安全。

當然同時也用於資料庫日常維護而不中斷業務,比如例行停機,測試改變,升級維護等等。

3、DataGuard所帶來的價值

可以實現資料的零丟失,維護的零停機,保證業務的持續線上執行,通過讀寫分離有效的分擔資料庫壓力,降低由於各種原因當機的風險。

4、DataGuard的體系架構

clip_image002

clip_image004

clip_image006

5、DataGuard 是否安全

DataGuard的同步是通過redo傳輸並且在standby端應用實現資料的同步,那麼它的同步鏈路是建立在Oracle Net之上,通過Oracle Net來進修資料的傳輸,其之間走的是SSL協議,SSL使用RSA公鑰密碼和對稱金鑰加密,提供身份驗證、加密和資料完整性。SSL是自動用於重做運輸驗證在兩個Oracle資料庫。如果SSL身份驗證需求沒有得到滿足,每個資料庫必須使用遠端登入密碼檔案。在一個DataGuard配置,所有物理和快照備用資料庫必須使用密碼檔案的一個副本從主資料庫,重新整理副本須當SYSOPER或SYSDBA特權授予或撤銷後,任何使用者的密碼與這些特權是改變

當一個密碼檔案是用於redo傳輸驗證,密碼檔案中的的使用者帳戶用於redo傳輸各資料庫之間的比較啟動一個redo傳輸會話和目標資料庫。密碼必須是同樣在兩個資料庫中。預設情況下,系統使用者的密碼是用於驗證重做運輸會話密碼檔案時使用。

6、DataGuard的三種保護模式

最大保護模式:

1)這種模式提供了最高階別的資料保護能力;
2)要求至少一個物理備庫收到重做日誌後,主庫的事務才能夠提交;
3)主庫找不到合適的備庫寫入時,主庫會自動關閉,防止未受保護的資料出現;
4)優點:該模式可以保證備庫沒有資料丟失;
5)缺點:主庫的自動關閉會影響到主庫的可用性,同時需要備庫恢復後才能提交,對網路等客觀條件要求非常的高,主庫的效能會因此受到非常大的衝擊。

最大可用性模式:
1)該模式提供了僅次於“最大保護模式”的資料保護能力;
2)要求至少一個物理備庫收到重做日誌後,主庫的事務才能夠提交;
3)主庫找不到合適的備庫寫入時,主庫不會關閉,而是臨時降低到“最大效能模式”模式,直到問題得到處理;
4)優點:該模式可以在沒有問題出現的情況下,保證備庫沒有資料丟失,是一種折中的方法;
5)缺點:在正常執行的過程中缺點是主庫的效能受到諸多因素的影響。

最大效能模式:
1)該模式是預設模式,可以保證主資料庫的最高可用性;
2)保證主庫執行過程中不受備庫的影響,主庫事務正常提交,不因備庫的任何問題影響到主庫的執行;
4)優點:避免了備庫對主資料庫的效能和可用性影響;
5)缺點:如果與主庫提交的事務相關的恢復資料沒有傳送到備庫,這些事務資料將被丟失,不能保證資料無損失;

從DG的架構圖開始瞭解一下DG的各個組成部分:



簡單來看由三部分組成:主庫,備庫,中間層(各種服務+日誌、歸檔檔案),中間層我們放到後面說,先看一下主庫和備庫:

Primary Database

DG環境包含一個主庫。 主庫可以是單例項,也可以是RAC 叢集。備庫至少有一個standby 資料庫組成。 主備庫之間通過oracle Net進行通訊,主備庫不受地理位置的限制。

Standby Databases

Standby 資料庫與主庫一致保持事務一致。一個主庫可以對應多個備庫。備庫的種類在11g中有三種:

1.物理備庫

2.邏輯備庫

3.快照備庫

 

物理standby(Physical standby database)

        物理standby是對主庫進行physically identical copy。 這是一種Media recovery,是基於block-for-block的恢復。在資料塊級別進行恢復,這種方式沒有資料型別的限制,可以保證兩個資料庫完全一致。

        在Oracle 11g之前,standby 資料庫只能在Mount 狀態下進行恢復,也可以是開啟,但只能已只讀方式開啟,並且開啟時不能執行恢復操作。到了11g,standby 可以啟動到read-only狀態並同步,這樣standby 資料庫就可以用來進行一些資料查詢操作,提高資料庫的利用率。


邏輯standby(Logical standby database)

        邏輯standby 的同步使用的是SQL Apply。這種方式 像logminer挖掘日誌,但是通過Logminer 技術,通過把日誌內容還原成SQL 語句,然後SQL引擎執行這些語句,Logminer Standby不支援所有資料型別,可以在檢視 DBA_LOGSTDBY_UNSUPPORTED 中檢視不支援的資料型別,如果使用了這種資料型別,則不能保證資料庫完全一致。


快照 standby(Snapshot Standby Database)

Snapshot standby 是Oracle 11g中的新特性,也是對standby database的一次升級。Snapshot standby 和 物理standby,邏輯standby 一樣,也會從主庫接收歸檔檔案,但是不同的是,snapshot standby 不會應用這些接收的歸檔。

Snapshot Standby Database和邏輯備庫都建立在物理standby基礎上,如果我們想在standby 庫上做一些測試,因為主庫我們不能動,我們可以在備庫測。 那麼我們就可以把這個standby 切換成snapshot standby。 

切換語句如下:

SQL> alter database convert to snapshot standby;

把snapshot standby 資料庫開啟,進行我們的測試。

SQL> alter database open;

測試完畢後,我們把資料庫重啟到mount 狀態。 執行命令將資料庫從snapshot狀態切換到之前的狀態,如物理standby或者邏輯standby。

SQL> alter database convert to physical standby;

從snapshot standby的功能看來oracle是逐漸弱化邏輯備庫的,在11g中使用物理備庫和快照備庫將是主流



一、為何要設定資料庫強制歸檔?

alter database force logging;

Oracle日誌記錄的三種模式:logging,force logging,nologging

logging:在建立資料庫物件時(檢視,索引,序列等)將日誌資訊寫入聯機重做日誌檔案,logging相當於

物件的一個屬性,用來標記建立物件時是否記錄了REDO日誌,包括在DML時是否記錄了REDO日誌。

force logging:強制記錄日誌,對資料所有的操作都產生日誌資訊,並將資訊寫入聯機重做日誌檔案。

nologging:相反,較少的記錄日誌。

在做DATA GUARD時要保證資料的一致性,所以開啟資料庫強制歸檔模式。


二、為什麼要在mount狀態下開啟資料庫歸檔?

Oracle資料庫啟動的三個階段,nomount,mount,open,分別載入的檔案為引數檔案,控制檔案,資料檔案,

將資料庫啟動到mount階段時,資料庫根據引數檔案中指定的控制檔案路徑開啟控制檔案,

獲取資料檔案和日誌檔案的資訊,此時可對資料庫進行維護,開啟歸檔模式,Oracle規定要在mount例項下開啟歸檔。


三、為什麼要配置靜態監聽引數?

在DATA GUARD架構中,在資料庫mount狀態下,動態監聽無法將服務註冊到資料庫,靜態監聽則可以完成這個任務。

典型監聽檔案listen.ora分為兩個部分,LISTENER註冊的是服務,SID_LIST_LISTENER註冊的是例項。


四、引數檔案中各項引數的意義是什麼?

1、*.db_name='orcl' 

資料庫名,需要保持同一個DATA GUARD中所有的資料庫db_name一致


2、*.db_unique_name='orcl_p'

每一個資料庫都要有唯一的名稱


3、*.log_archive_config='dg_config=(orcl_p,orcl_s)'

該引數用於控制傳送歸檔日誌到遠端位置,以及接收遠端歸檔日誌,並指定DATA GUARD配置的唯一資料庫名,

預設值為SEND,RECEIVE,NODG_CONFIG,  當該

            引數為SEND時,會啟用傳送歸檔日誌到遠端位置,

             引數為NOSEND時,會禁止傳送歸檔日誌到遠端位置;

             引數為RESEIVE時,會啟用接收遠端歸檔日誌;

             引數為NORECEIVE時會禁止接收遠端歸檔日誌;

             引數為DG_CONFIG時,可以指定最多9個惟一資料庫名;

             引數為NODG_CONFIG時,會禁止指定惟一資料庫名,

該引數是動態引數,可以使用alter system set log_archive_config='SEND';來修改。


4、 *.log_archive_dest_1='location=/u01/arch valid_for=(all_logfiles,all_roles) db_unique_name=orcl_p'

log_archive_dest_1是DG重做日誌傳輸的主要引數,一般在主庫中起作用,在處理級聯備庫的時候會在備庫發揮作用,

該引數也可指定線上重做日誌(ORL)和備庫重做日誌(SRL)產生歸檔日誌的傳輸目的地。

(1)service:指定備庫的網路連線名

(2)sync:指定使用同步的方法傳送重做資料,即客戶端事務的提交會發生在LGWR程式收到備庫LNS發來的

資訊確認之後,對於最大可用及最大保護模式,需要至少一個備庫net_timeout指定LGWR程式

等待LNS程式響應時間,如果期間沒有收到響應,則認為備庫發生故障(failed),預設為30s,

等待期間需要做以下事情:

                     a:停止舊的LNS程式

                     b:啟動新的LNS程式

                     c:與備庫建立連線

                     d:檢測並停止舊的RFS程式

                     e:啟動新的RFS程式

                     f:選擇並開啟新的SRL

                     g:初始化SR頭,即備庫的重做日誌資料庫

                     h:響應LNS程式告知已經完成準備工作

完成上面的操作後,LNS程式會通知LGWR備庫連線成功,如果該過程超過了30s,則會繼續放棄備庫。


(3)reopen:屬性控制主庫嘗試重新連線已經發生故障的備庫的等待時間,預設為30s

(4)db_unique_name屬性要在log_archive_dest_n中使用的話同時要在log_archive_config中設定,否則DATA GUARD會拒絕連線這個目標庫,必須在主備庫中將db_unique_name新增到log_archive_config引數中,當主庫發起連線時,它將會傳送自己的db_unique_name到備庫,同時要求備庫返回惟一的db_unique_name。在備庫中將會檢查log_archive_config引數,以確保主庫的db_unique_name存在,如果不存在,那麼連線請求就會被拒絕,如果存在,備庫會把自己db_unique_name返回主庫的LNS程式,如果返回值與主庫該值不匹配,連線就會被終止。


(5)valid_for:屬性定義了何時使用目標引數log_archive_dest_n以及作用於何種型別的日誌檔案

                            日誌檔案的合法值有以下三種:

                                        online_logfile僅在歸檔ORL中有效

                                        standby_logfile僅在歸檔SRL中有效

                                        all_logfiles無論哪種重做日誌檔案型別都有效

                            角色的合法值有以下三種:

                                        primary_role僅在主庫中有效

                                        standby_role僅在備庫中有效

                                        all_roles主備庫都有效   

(6)affirm:屬性是使用sync方式目標的預設值

5、*.log_archive_dest_state_1=enable

用來指定歸檔目錄是否可用。

6、*.standby_file_management='auto'

在主庫建立資料檔案時備庫會自動建立資料檔案

7、*.log_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'

      *.db_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'

log_file_name_convert與db_file_name_convert來保證主備庫資料檔案路徑一致

8、*.fal_server='orcl_s'

FAL指獲取歸檔日誌(fetch archive log),因為網路中斷或者資源緊張等問題導致主備日誌不同步,

MRP(Managed recovery process)/LSP(Logical Standby Process)不能直接與主庫連線來獲取丟失的歸檔日誌,因此需要用到FAL來解決,fal_server後對應備庫的db_unique_name


五、Oracle DATA GUARD程式結構是怎樣的?

1、存在於主庫的程式:

(1)LGWR:收集事務日誌,更新聯機日誌,在同步模式下,LGWR將redo資訊直接傳送到備庫的RFS程式,主庫在繼續處理前等待備庫的確認。在非同步的情況下,也是直接將日誌資訊傳到備庫的RFS程式,但是不等待備庫的確認資訊。

(2) ARCH:在歸檔的同時,傳遞日誌到備庫RFS程式,可以用於解決GAP日誌不連續問題。

(3)LNSn:Primary Database 產生的Redo日誌要同時寫到日誌檔案和網路。也就是說LGWR程式把日誌寫到本地日誌檔案的同時還要傳送給本地的LNSn程式(Network Server Process),再由LNSn(LGWR Network Server process)程式把日誌通過網路傳送給遠端的目的地,每個遠端目的地對應一個LNS程式,多個LNS程式能夠並行工作。

2、存在於備庫的程式:

(1)FAL:只有物理備庫才有的程式,FAL指獲取歸檔日誌(Fetch Archive Log),因為網路中斷或者資源緊張等問題導致主備日誌不同步,MRP(Managed recovery process)/LSP(Logical Standby Process)不能直接與主庫連 接來獲取丟失的歸檔日誌,因此需要用到FAL來解決。

(2)RFS(Remote File Server):主要用於接收從主庫傳過來的日誌資訊。arch程式歸檔重做日誌,由MPR應用到備庫。

(3)MRP(Managed Recovery Process):只針對於物理備庫,應用歸檔日誌到備庫

(4)LSP(Logic Standby Process):只有邏輯備庫擁有,控制歸檔日誌應用到邏輯備庫。


3、Oracle DG通過同步日誌檔案來保證主庫與備庫的一致性

如果一個資料庫與單個或者多個備庫之間連線出現問題,那麼主庫產生的日誌檔案便無法傳輸到備庫上去,使用歸檔日誌程式(FAL)提供一個客戶服務機制,用於在主庫與備庫中斷連線後將歸檔日誌傳送到備庫上,以實現自動填充間隔和重新同步。在備庫上,Oracle DATA GUARD使用遠端檔案伺服器(RFS)程式從主資料庫接收重做記錄,使用管理恢復程式(MRP)將重做資訊應用到物理備庫中,使用邏輯備用程式(LSP)將經過SQL轉換的重做資訊應用到邏輯備庫中。


4、Oracle DATA GUARD三種保護模式

保護模式


出現災難時資料丟失風險


重做傳輸機制


最大保護


零資料丟失;雙重故障保護


LGWR SYNC


最高可用性


零資料丟失;單故障保護


LGWR SYNC


最高效能


最小資料丟失


LGWR SYNC 或ARCH


預設保護模式為最高效能模式,可以使用alter database set standby database to maximize (protection|availability|performance}; 來切換保護模式


最大保護模式保證在事務提交時同時寫到主庫與備庫的日誌檔案中來保證一致性,優點是安全,缺點是在備庫出現故障時,主庫也無法正常使用。


最高可用性相同與最大保護模式基本一樣,不同點在於當備庫出現故障時主庫會立即切換為最高效能模式。


最高效能只需要確保提交的事 務寫到主庫的日誌檔案中即可。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29099879/viewspace-2671517/,如需轉載,請註明出處,否則將追究法律責任。

相關文章