主備切換的準備工作

jeanron100發表於2016-01-19
對於dataguard說,switchover,failover是一種互補可選的容災解決方案。但是對於這種容災思路還是存在著一些實踐中的細節需要,從資料層面而言,只能是最大程度保證了資料的不丟失,但是資料切換過去了,許可權,配置這些資訊還是需要考慮的,如果切換過程很快,收尾的補充工作很慢,那麼總體來看切換的時間就被拉長了。
在提出準備的需求之前,容我花一點時間來簡單吐槽一下10g中的dataguard.
10g中的狀態切換
10g中的dataguard沒有adg的特性,在使用中還是有很大的限制,很多時候備庫就當做黑盒的備庫來用,只要看到備庫能接收應用歸檔就證明備庫是沒有問題了,但是有時候需要在備庫中開啟一個大查詢,這個時候就需要DBA和開發的同事互相配合,開啟一個視窗時間來進行這類工作,如果開發忘了反饋,DBA也忘了,那麼這個備庫就會默默開啟RFS接收歸檔,但是不會去應用歸檔,這樣在如果時間長了,很可能接收的歸檔也會被自動維護的歸檔任務給刪除。這樣一來,備庫就會始終處於read-only狀態,使用dg broker來驗證是沒有任何問題的,而且透過dg broker設定為Onliine時,資料庫後臺也不會報什麼錯誤,它認為是存在gap,但是後續的處理就愛莫能助了。所以這個時候只能選擇重建備庫。

dg broker的使用細則
10g和11g的dg broker還是差別不小,舉幾個使用中的小細節,在10g中show database verbose xxx的時候,給出的資訊非常概要,延遲和狀態的顯示資訊也不夠全面,用了11g之後會有很大的落差,而且11g中本身開啟了adg,就是一個Online狀態了,檢視備庫的狀態時,很容易看到延遲的情況。而且對於local listener的支援,11g更加全面,而10g中相對來說還會限制較多。如果配置不夠規範,會出現enable configuration無響應的情況。

dataguard本身的bug
10g中還是有不少的bug,這一點毋庸置疑,我也奇怪前端時間怎麼碰到了那麼多的小問題,而且還是在10gR2相對較新的版本中。drop datafile會在子版本中存在bug導致MRP掛掉,rman備份也可能提示失敗,需要重啟備庫作為一個WA,如果頻繁切換資料庫狀態在read-only和online的情況下,也很可能觸發bug.備庫的temp的控制程式碼釋放問題,需要重啟備庫作為一種補充WA.

搭建備庫的苦楚
當然10g中的duplicate實在是有些雞肋,和11g相差太大,如果我一個資料庫本身很大,採用常規思路,那麼我需要在主庫做一個rman備份,然後複製到備庫,然後在備庫做還原,其實整個過程持續的時間其實會很長。如果是跨IDC機房的情況下,網路如果不夠穩定,那麼對於大資料庫容量的被庫搭建就是一個很大的挑戰。11g的確實duplicate簡單,再這麼做下去,感覺搭建dataguard就是一個純體力活了。

好了,吐槽完畢,我來說說主備切換中的一些準備工作,其實故障切換,或者硬體升級,或者平臺遷移等等。都需要用到dataguard,那麼我們在切換或者採取容災措施之前,需要做好一些前提的準備。
如果是在同機房的情況下,可能希望切換對於應用來說透明,那麼一種直接的思路就是切換之後,修改備庫的IP為原來主庫的IP,這個過程中,備庫中的一切配置都需要參考自主庫,如果主庫掛掉了,那麼這個參考就失去了基線,所以這部分的資訊還是需要重點儲存下來,而且需要重點關注,如果備庫需要保留和主庫一樣的情況,那麼防火牆許可權,網路監聽和埠,服務配置都需要和主庫一樣。這種情況下才算是一個平滑的遷移,切換。
那麼對於dataguard而言,這些準備大體改主意哪些呢,我直接來一段虛擬碼。
 ### get iptables details 防火牆的資訊
 cat /etc/sysconfig/iptables > /home/conf/$ip/iptables;
### get crontab list for root crontab的資訊,可能需要考慮ntp的設定等等
 crontab -l > /home/conf/$ip/crontab_root;
### get crontab list for oracle  資料庫層面的crontab
crontab -l > /home/conf/$ip/crontab_oracle
### get host details from /etc/hosts   host的配置資訊
cat /etc/hosts > /home/conf/$ip/hosts;
### get listener.ora from $ORACLE_HOME/network/admin 監聽的配置資訊
cat $ORACLE_HOME/network/admin/listener.ora > /home/conf/$ip/listener.ora;
### get tnsnames.ora from $ORACLE_HOME/network/admin 本地服務的配置資訊
cat $ORACLE_HOME/network/admin/tnsnames.ora > /home/conf/$ip/tnsnames.ora;
### get sqlnet.ora from $ORACLE_HOME/network/admin    網路的配置選項
cat $ORACLE_HOME/network/admin/tnsnames.ora > /home/conf/$ip/tnsnames.ora;
### get parameter file details from $ORACLE_HOME/dbs    資料庫引數檔案的配置
cat $ORACLE_HOME/dbs/initxxx.ora > /home/conf/$ip/init.or

所以一個看似簡單的切換要想滿足需要還是需要考慮很多的因素,當然這些如果前期準備充分,切換回更加的從容。

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

相關文章