9.2 STANDBY資料庫出現ORA-16009錯誤

yangtingkun發表於2011-01-21

客戶的一個9.2.0.4STANDBY資料庫上發現了ORA-16009錯誤。

 

 

詳細的錯誤資訊為:

2011 1 28 17:30:44
ARCO :Error 16009  Creating acchive log file to 'oric1'
ora-16009 romate archive log destination must be a stand by database

Error 16009 attaching rfs server to standby instance at host 'oric1'
Error 16009 attaching to destination LOG_ARCHIVE_DEST_2 standby host 'oric1'
remote archive log destination must be a standby database

錯誤資訊中的LOG_ARCHIVE_DEST_2引數設定的是歸檔到主庫。配置這個引數是為了SWITCHOVER操作後,可以將當前資料庫的歸檔傳送到切換後的備庫中。

不過這個錯誤有點奇怪,邏輯STANDBY確實可以產生日誌,而物理STANDBY資料庫只是應用日誌,不應該產生歸檔,更不要說向當前的主庫去遠端歸檔了。

開始認為是Oraclebug,檢查了metalink沒有發現類似的情況。

後來突然意識到了,這並非是Oraclebug,在9i上就是這樣實現的。

原本備庫正常,後臺沒有錯誤產生。在週末的時候,執行了兩次SWITCHOVER的操作,又給備庫新增了STANDBY REDO LOG,將日誌傳輸方式改為LGWR ASYNC

開始一直以為是Oraclebug,由於執行過SWITCHOVER,導致備庫曾經作為主庫工作過,而再次SWITCHOVER到備庫後,可能某些狀態被啟用,從而導致了這個錯誤。

其實問題不是由SWITCHOVER引起的,而是由於LGWR ASYNC傳輸日誌方式導致的。採用這種方式,主庫的LGWR程式會隨時先遠端資料庫的STANDBY REDO LOG寫入日誌資訊,當本地日誌寫滿後,遠端STANDBY日誌也會寫滿,這時會引發一個ARCHIVE LOG操作,而STATNDBY資料庫此時會應用這個歸檔日誌進行恢復。

既然這裡產生了歸檔,那麼由於配置了遠端歸檔目錄,自然在歸檔的時候也會嘗試寫到遠端伺服器,也就是當前的主庫。因此上面這個錯誤也就產生了。

這裡就看出10gDATA GUARD的優點了:可以對歸檔定製角色。比如本地歸檔可以是任何角色,而遠端歸檔則只發生在PRIMARY角色中,如果當前是STANDBY資料庫,那麼這個遠端歸檔就不會啟用。

9i中並沒有這樣的功能,要解決這個問題,只有將初始化引數log_archive_dest_state_2設定為的defer,當以後執行SWITCHOVER操作後,還要手工設定這個引數為enable,確保作為主庫可以向備庫發生歸檔。

 

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

相關文章