加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

DataGuard - 操作Cascaded Redo Log Destinations停止WAN不变性题目

发布时间:2018-08-17 12:46:46 所属栏目:电商 来源:站长网
导读:最近一向头疼于DataGuard情形中万一收集失败将导致的Primary库短时刻内无法正常事变的题目。 这个题目的征象根基上是这样: 当Primary和Standby之间的收集呈现题目,好比说在测试情形中我们拔掉Standby的网线,此时当Primary产生日记切换(Log Switch)的时
最近一向头疼于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事变站就可以满意要求了。至于是不是确实可以满意机能需求,我还会有后续的测试。
呵呵,敬请等候。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读