88 關於data guard的結構常識

2021-06-04 10:50:33 字數 1809 閱讀 2156

之前,原本已經嘗試過配置oracle例項的邏輯和物理standby結構,並且做個一些role交換操作,可是由於昨天學習rman的部分命令時沒留意,誤刪掉了primary db上的所有歸檔日誌,因為原來是在maximum protection模式下,standby db上還存在archivel gap,結果之前搭建的standby實驗環境徹底掛了,primary db也自動停了。我只好把primary db在nomount模式下改為maximum performance模式,並將控制standby redo log傳輸的log_archive_dest_state_n設定為defer,才把primary db啟動起來。現在,除了重建standby,還沒找到其他的彌補方法,看來對data guard的理解還是停留在照貓畫虎的操作上,根本公尺有理解它的原理啊。所以重新來過,從基礎開始好了。

首先,data guard的主要原理主要是primary db將所有操作產生的redo log 傳輸到standby db上,在由standby db對此進行應用的。從而產生乙個一致的standby db。在data guard中,存在兩類sync和async,下面分別描述兩類的工作方法,從而進一步認識它的原理。

下圖是sync模式的流程圖。

1、當user 發出 commit命令後,將產生一條 redo record (也稱作redo entry)放入sga中的 redo buffer 中,後台程序lgwr將讀取此redo record,將其寫入online redo log file。並等待從lns程序傳來的確認資訊。

2、lns(log network server) 程序同樣從redo log buffer讀取redo record,並將其通過oracle net services傳輸給standby db。在standby db上的rfs後台程序將接收到的redo record寫入standby database中。

3、當rfs確定寫入所有的redo record到磁碟後,向primary db的lns傳送確認資訊。當lgwr收到lns**的確認資訊後,才返回commit成功的訊息給user。

接下來來看async:類似於sync,只是primary db上的lgwr可以不必等待lns的確認資訊,而且lns可以讀取online redo log中的redo record。對於async,就可以考慮使用壓縮方式傳輸redo record,從而節省頻寬,但是這會使cpu的利用公升高。此外,如果lns在讀取online redo log中記錄時剛好遇到online switch,則可能造成standby的archivelog gap。lns的不同步記錄,在提高效能的同時也可能會產生資料的丟失。

對於redo log的gap的處理,oracle的data guard有自己的自動處理方法。log file gap主要出現在primary db上不斷有事務被提交,同時,lns可能由於網路或是standby db的問題,不能及時同步造成的。此時,primary db會繼續執行,迴圈使用redo logs,並進行歸檔。data guard會在primary db上使用乙個arch程序不斷的ping standby db。當與standby db可以進行通訊時,arch的ping程序會通過rfs查詢standby的控制檔案,獲得上一次完成log同步的scn從而確定從哪乙個歸檔log開始進行同步,從而填補gap。當完成這一步,會自動過度到從當前的日誌檔案中同步。具體的流程圖如下:

對於物理standby來說,它應用接受到的redo record是按下圖的方式的:

關於data guard的結構常識

之前,原本已經嘗試過配置oracle例項的邏輯和物理standby結構,並且做個一些role交換操作,可是由於昨天學習rman的部分命令時沒留意,誤刪掉了primary db上的所有歸檔日誌,因為原來是在maximum protection模式下,standby db上還存在archivel gap...

關於PN結

一直以來,我對pn的形成中的幾個細節耿耿於懷。最近和乙個小夥伴討論後,更加深了認識。對於半導體而言,載流子的概念讓人感到迷糊。對於n型半導體,比如在si基里摻雜p原子,此時p原子外層有9個電子,其中的1個就會比較自由,可以移動,這很好理解。而p型半導體就不怎麼好理解,摻入了b原子後,由於除了4個共價...

dataguard引數的解釋

1.db name,資料庫 名字,需要保持同乙個data guard 中所有資料庫db name相同 primary端和 standby 端相同 db name ora10g db name ora10g 2.db unique name,對應資料庫的例項名,每乙個資料庫需要指定乙個唯一的名字 pr...