国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

DataGuard - 利用Cascaded Redo Log Destinations避免WAN穩

2024-07-21 02:05:59
字體:
來源:轉載
供稿:網友
最近一直頭疼于dataguard環境中萬一網絡失敗將導致的primary庫短時間內無法正常工作的問題。

這個問題的現象基本上是這樣:
當primary和standby之間的網絡出現問題,比如說在測試環境中我們拔掉standby的網線,此時當primary發生日志切換(log switch)的時候,primary將試圖通知standby同樣作歸檔,但是由于網絡不通,就會默認有30秒的timeout,而在這30秒的時間內,primary上的任何dml操作都將被懸停。
至今為止我還沒有找到很好的辦法可以有效地縮短這個timeout時間,雖然按照文檔上說應該可以縮短到最小15秒。即使是15秒,也是無法忍受的,特別是如果dataguard環境搭建在wan上,比如說通過2m的ddn專線,那么出現網絡故障的幾率是比較高的。
如果說將有可能由于dataguard的網絡原因而導致主業務庫的操作懸停,無論對于客戶還是對于我個人而言都是不太容易接受的。

wan上的網絡故障幾率較大,那么如果我們換到lan上,就可以降低這種故障的發生率。由此想到可以利用dataguard中的cascaded redo log destinations功能。今天作了此項測試,效果還是很理想的。
所謂cascaded redo log destinations功能,是指a機器(primary)將redo數據傳遞給b機器(standby),然后b機器再將接收到的redo傳遞給c機器(standby),這種中轉方式在physical standby和logical standby中都可以實現。如果a,b處于同一個lan中,而b,c則通過wan通信,那么即使wan出現網絡問題,也不會影響a將redo傳遞到b,也就不會影響a的業務進行。

大概配置如下:
1。a (primary)的init參數:
*.log_archive_dest_1='location=/oradata/ctsdb/archive'
*.log_archive_dest_2='service=ctsdb.jumper lgwr async=20480 net_timeout=15 max_failure=2 reopen=10'

2。b (standby1)的init參數:
*.log_archive_dest_1='location=/oradata/ctsdb/archive'
*.log_archive_dest_2='service=ctsdb.standby'
*.standby_archive_dest='/oradata/ctsdb/archive'

3。c (standby2)的init參數:
*.log_archive_dest_1='location=/oradata/ctsdb/archive'
*.standby_archive_dest='/oradata/ctsdb/archive'
*.fal_client='ctsdb.standby'
*.fal_server='ctsdb.jumper'

其它的配置文件,比如listener.ora和tnsnames.ora,不再贅述。

在b機器上的alertlog中一些比較有趣的地方:
thu jan 13 12:05:27 2005
rfs: successfully opened standby logfile 4: '/oradata/ctsdb/redo04.log'
thu jan 13 12:05:33 2005
rfs: successfully opened standby logfile 5: '/oradata/ctsdb/redo05.log'
thu jan 13 12:05:38 2005
rfs: successfully opened standby logfile 6: '/oradata/ctsdb/redo06.log'
rfs: successfully opened standby logfile 7: '/oradata/ctsdb/redo07.log'
rfs: no standby redo logfiles of size 6144 blocks available

以前的測試和freelists中的一些郵件列表的討論都表明在dataguard環境中我們最多只能使用到2組standby redolog(一般情況我們只會只用到1組),這是因為oracle對于srl的啟用機制就是從首個srl開始找第一個可以使用的,正常情況下只有在接受下一次redo信息時,redo04.log還沒有被歸檔成功,這時候才會使用redo05.log,而redo05被寫滿以后,redo04還沒有被歸檔結束的情況我們幾乎不可能碰到,所以下一次的redo信息又被寫到redo04中。
而這次測試,由于b和c之間的網絡中斷,導致redo04-redo07這四組srl都被啟用了,并且再接下去rfs報了no standby redo logfiles的錯誤,這個同樣很明顯地表示了如果網絡中斷,在timeout時間內,redo是無法被正常歸檔的。
那么大家可能要問,如果b的4組srl都無法使用了,a繼續傳過來的redo數據是不是也會被阻塞,從而也間接導致了a同樣無法正常繼續業務?
在測試之前,我也同樣擔心這個問題,但是測試表明這種情況沒有出現。原因在于dataguard的機制是,即使a指定了使用lgwr傳遞redo(如本例所示),如果出現b上的srl無法使用的情況,b的rfs進程將把接受到的redo直接寫入本機的archivelog中,當a開始歸檔的時候,b同時歸檔剛才寫入了數據的archivelog(此歸檔的sequence比a上歸檔的sequence大1)。從下面的alertlog中可以確認這點:
arc1: evaluating archive   log 6 thread 1 sequence 600
arc1: beginning to archive log 6 thread 1 sequence 600
creating archive destination log_archive_dest_2: 'ctsdb.standby'
creating archive destination log_archive_dest_1: '/oradata/ctsdb/archive/1_600.dbf'
arc1: completed archiving  log 6 thread 1 sequence 600

從以上的測試中我們得出一個結論,只要是primary可以跟standby的rfs進程正常通信,那么就不會產生操作被懸停的問題,不管standby到底是使用了srl還是使用了archivelog。

最后,由于這樣的環境添加了額外的機器(機器b),而由于dataguard環境必須要求同構,所以如果整個環境是unix的,那么也許大家要問,這樣豈不是需要再購買一臺小型機,這在budget方面是不是就有些問題了。
確實,需要額外的投入,但是由于b機器只是作中轉redo的作用,所以我們甚至可以不將b置于managed recover模式下,也就是b只負責接受a的redo,再把redo傳送到c,這樣對于b機器的性能要求就可以下降很多,也許一臺普通的sunray工作站就可以滿足要求了。至于是不是確實可以滿足性能需求,我還會有后續的測試。
呵呵,敬請期待。
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 舞阳县| 秦皇岛市| 崇义县| 米林县| 洪江市| 卫辉市| 突泉县| 甘肃省| 丹江口市| 乌拉特后旗| 于田县| 靖州| 东光县| 克东县| 宜黄县| 小金县| 南澳县| 平泉县| 兴业县| 明光市| 海南省| 天峻县| 内黄县| 万州区| 竹北市| 宁海县| 巫溪县| 岐山县| 达拉特旗| 安新县| 乌海市| 游戏| 徐水县| 祁连县| 疏附县| 呼玛县| 汶上县| 永泰县| 临安市| 德兴市| 大石桥市|