物理data guard原理的理解(zt)

jolly10發表於2008-05-12

本文網址:

物理data guard原理的理解

這裡只談物理data guard的原理

*******************************************************************************
一般來說,我們在談到data guard的時候,都會用很簡單的語言來描述整個data guard的運做流程。
通常是這樣的: primary database透過arch 程式,或者lgwr程式把archive log 送到standby database的archive_dest,然後standby database 透過RFS來接收這個archive log,然後MRP程式運用此log,也就是redo apply,使物理特徵和primary database一模一樣。

[@more@]


這樣講清楚了嗎? 表面看起來很清楚,其實非常不清楚,歧義很多。
歧義在哪裡? 那麼我來問幾個問題:
1.arch 和lgwr的區別在哪裡?
2.standby log file到底要不要?
其實就光standby log file到底要不要這個問題就要回答很長一段才能解釋清楚,因為這裡涉及到很多東西,比如database執行模式,比如你是 archive log傳送還是real-time? 這些都是有關係的。
下面從arch 和 lgwr 分開來談data guard
一。 執行arch 程式
當使用arch程式的時候,其實很容易理解,因為一定要等待redo log-----&gtarchive log才可以進行傳送。 也就是說這個時候是不可能做real-time的。 既然是一定要等待歸檔,怎麼又可能實時呢?(從這裡可以看出,如果要做real-time redo apply那就一定要使用lgwr程式)
這個時候整個流程其實比較簡單:
arch程式使redo log歸檔,然後透過oracle net來傳送到設定好的log_archive_dest_2目的地(可以先想想standby log file有用嗎?) ,standby database發現有新的 archive log進來了,MRP程式使用此archive log進行 redo apply ,完成了.
疑問:如果我開始就建好了standby log file,請問,這個過程可能用到standby log file嗎?
個人認為根本不需要,因為archive log直接傳到目的地。而且此時不能使用高可用和高保護模式。因為這2個模式必須使用lgwr程式。
二. 執行lgwr 程式
當使用lgwr程式時分2種情況:
1.當在standby database執行 alter database recover managed standby database disconnect from session時,其實這裡已經說明了要執行archive log來進行redo apply,所以此時就算你指定為lgwr也無效,因為primary database 還是預設的使用arch程式。所以這裡的原理和上面的原理是一樣的.
2.當使用real-time模式時就不一樣了.也就是執行alater database recover managed standby database using current logfile disconnect from session,這個情況和 database 模式有關係。
1)高保護,高可用模式下
這個時候由於一定要等待redo log傳送到standby log,primary database才可以commit,所以此時一定要使用standby log,否者redo log傳到哪裡呢? 而且此時 lgwr 一定要 sync 模式(也就是一定要同步執行,不能非同步,想一下,如果可以非同步,1萬年都可能不去commit.)
2).高效率模式下
這個時候其實redo log還是傳送到standby log,既然不是傳送archive log,當然不可能直接把redo log的資料放到log_archive_dest_2中去了。而是先放到standby log file中,然後由standby database 去archive。但是此模式下 lgwr不用等待,也就是說primary database不用去等待redo log傳送到standby database才可以commit。
但是官方文件說:在這個模式下可以使用lgwr sysnc/asysnc,還可以使用arch,還說standby log file可以有也可以沒有。
疑問出來了:如果沒有standby log file,請問如果使用real-time模式怎麼辦? 這個我是解釋不清楚了,感覺這個是有問題的。(ORACLE公司總是喜歡打腫臉當胖子).
能解決這個疑問恐怕只有這句話了:if you use standby redo log files, you can enable real-time apply。我們可以確定一點,當沒有使用standby log files的時候是不可以使用real-time apply的。
這樣還差不多,這樣的話疑問就沒了,因為不能real-time嘛。
不過還有一點疑問是:既然不能real-time, 那麼要lgwr sync幹什麼? lgwr 從redo log拿資料到哪裡呢?
本文來自: 中國網管論壇(bbs.bitsCN.com) 詳細出處參考:

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

相關文章