[Oracle][Data Guard]Oracle 10g DG第六章Configuring data protection modes and redo transport services

Oracle 10g DG第六章Configuring data protection modes and redo transport services


这章内容可说是又臭又长,不过看完内容希望能帮助你更了解DG。

文章均为自己见解,如有错误还请指教

Defining the redo transport mode

LOG_ARCHIVE_DEST_n说明

LOG_ARCHIVE_DEST_n(n 从1到10)定义redo文件路径。该参数定义必须透过location或service指明归档文件路径。location表示本地路 径,service通常是net service name,即传送redo的standby数据库。
对于每一个LOG_ARCHIVE_DEST_n参数,还有一个对应的LOG_ARCHIVE_DEST_STATE_n参数。LOG_ARCHIVE_DEST_STATE_n参数用来指定对应的LOG_ARCHIVE_DEST_n参数是否生效,拥有4个属性值

例如︰指定本地归档路径
LOG_ARCHIVE_DEST_1='LOCATION=/oradata/pridg/'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
又比如,指定redo传输服务
LOG_ARCHIVE_DEST_2='SERVICE=pridg'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
当然,LOG_ARCHIVE_DEST_n参数的属性远不止这些。
这些参数都可以透过alter system set语句直接线上修改,修改会在primary下次日志切换时生效,当然你直接shutdown再重启数据库的话也会生效

比如︰
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=pridg VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)';
除show parameter log_archive_dest外,还可以透过查询V$ARCHIVE_DEST 查看参数配置,并且V$ARCHIVE_DEST 还可以看到更详细的同步资讯。


使用ARCn归档redo数据
默认情况下,redo传输服务使用ARCn process归档redo日志。不过ARCn归档 process只支持最高性能的保护模式。如果standby数据库处于其它类型的保护模式,那你必须使用LGWR传输redo数据(想想为什么ARCn process会这样呢,我们知道对于最大保护和最高可用性两种模式而言,其实强调的就是一点,redo数据必须及时应用于standby数据库,我们再看来归档,归档是做什么呢?是备份已完成切换的redolog,完成切换的redolog又说明着什么呢?说明该redo中所有数据均已提交至datafile中(写入硬盘),那再回过头来看,数据已完成提交的redo并且完成了切换还被复制了一份做为归档,这个时候才准备开始传输到standby数据库,这与最大保护和最高可用所要求的即时应用背道而驰,现在,应该明白为什么ARCn归档 process 只能支持最高性能的保护模式)。
初始化参数控制ARCn归档行为
影响ARCn process的初始化参数有︰
LOG_ARCHIVE_DEST_n及LOG_ARCHIVE_MAX_PROCESSES。
关于LOG_ARCHIVE_DEST_n参数我们知道该参数的部分属性与ARCn process相关,而 LOG_ARCHIVE_MAX_PROCESSES初始化参数则可看做是专为ARCn process设计,该参数用来指定最大可被调用的ARCn process的数量,我们指定的是最大值,也就是说数据库在运行过程中是会根据归档的任务繁重程度自动调整归档 process数量的。当然如果说你觉得你的系统归档任务比较繁重,可以透过设定较多的归档 process数量提升归档速度,但是这个数字也不是越高越好,过高的归档 process数量有可能反而影响系统性能。调整该参数可以透过下列语句︰
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = n;
注︰n>0 and n<=30

使用LGWR归档redo数据
使用LGWR process与使用ARCn process有明显不同,LGWR无须等待日志切换及完成归档。
Standby 数据库的LGWR process会先选择一个standby redo log文件map primary数据库当前redolog的sequence(含文件大小,这也说明ORACLE为什么建议standby redo size最好与online redo相同,因为直接mapping,减少DB再做一次搜寻比对过程),一旦primary数据库有redo数据产生,视 LOG_ARCHIVE_DEST_n初始化参数中sync或async属性设定,以同步或异步模式传输到standby数据库。
再来谈谈LGWR归档 process密切相关的几个LOG_ARCHIVE_DEST_n参数的属性,如果选择LGWR归档redo数据,那么在LOG_ARCHIVE_DEST_n中必须指定SERVICE和LGWR属性以允许日志传输服务使用LGWR process来传送redo数据到远端归档目录。我们还需要指定SYNC(同步)还是ASYNC(异步)的传输模式,如果指定SYNC属性(默认是SYNC),则primary数据库任何会产生redo操作都会同步触发网络I/O,并且等到网络I/O全部完成才会继续下面的提交,而如果指定了ASYNC属性,则会primary数据库的操作会先记录online redologs,然后再传输到standby。

LGWR同步归档的流程
例如初始化参数中有如下设定︰
LOG_ARCHIVE_DEST_1='LOCATION=E:oradatasdb2 '
LOG_ARCHIVE_DEST_2='SERVICE=pridg LGWR SYNC NET_TIMEOUT=30'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
如果设定LOG_ARCHIVE_DEST_n初始化参数SYNC属性,建议同时设定NET_TIMEOUT属性,该属性控制网络连接的超时时间,如果超时仍无响应,则会返回错误消息。

primary数据库LGWR写online redologs的同时,同步传输redo数据到standby数据库一旦primary数据库执行日志切换,就会联动触发standby的ARCn将standby redo写入归档,然后透过redo apply(MRP process)或sql apply(LSP process)读取归档文件将apply至standby数据库。(如果启用了及时应用 的话,MRP/LSP会直接读取standby redolog并应用到standby数据库,无须再等待归档)。

LGWR不同步归档的流程
例如初始化参数中有如下设定︰
LOG_ARCHIVE_DEST_1='LOCATION=E:oradatasdb2 '
LOG_ARCHIVE_DEST_2='SERVICE=pridg LGWR ASYNC'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
ASYNC 模式归档就不需要再指定NET_TIMEOUT了,因为LGWR与LNSn之间已无关联,所以指定不指定NET_TIMEOUT就都没任何影响了,因此对于异步传输而言,即使网络出现故障造成primary与standby之间通信中断,也并不会影响到primary数据库的提交。

大致步骤与同步传输相同,差别只在LNSn process这里,LGWR写数据到online redolog,LNSn process访问online redolog并传输数据到远端standby的RFS而不再与本地LGWR之间有联系。standby数据库方面的处理逻辑仍然不变。

AFFIRM and NOAFFIRM

确认所有的archivelog files or standby redo log files全都传输成功并同步。

默认:NOAFFIRM(使用默认即可)

Delaying the application of redo

照字面上解释就是设定archive redo log file延迟时间(默认30min) for standby DB。

但DB要是maximum protecion,maximum availablility还是会确保数据同步所以会忽略这参数设定又或者enable real-time apply这参数也会忽略。

相关参数属性

ALTERNATE:设定替代路径

LOG_ARCHIVE_DEST_3='SERVICE=sdb2_path1 REOPEN=0 ALTERNATE=LOG_ARCHIVE_DEST_4’

LOG_ARCHIVE_DEST_4='SERVICE=sdb2_path2 REOPEN=0 OPTIONAL'

LOG_ARCHIVE_DEST_STATE_3=ENABLE

LOG_ARCHIVE_DEST_STATE_4=ALTERNATE

设定了替代路径 REOPEN=0(必须)

MAX_FAILURE:重试次数(传送archive redo log),如有设定此参数那也一定要设定REOPEN。

NET_TIMEOUT:by pass netwotk timeout(默认180s)。

MAX_CONNECTIONS:传送archive redo log file到达standby db by using parallel connections(max=5)。设定了此参数也一定要设定log_archive_max-processes且要大于max_connections。

补充:DG在Oracle 11g名称为Active Data Guard,小弟有测试过一些新功能真是不赖(如果早点释放出来就好了><),最大特点就是physical standby enable read only,同时还可开启redo apply services,这在10gR2是不可能做到的(想要只有升级版本了),外加结合flashback技术所衍生出来的snapshot standby db,可说是测试DB的好功能,也修正了logical standby在同步上的限制...等。相关Oracle 11g Active Data Guard新特性等有空小弟再整理。