<span style="color:#006600;font-size:14px;"><strong>cascade redo transport用在多个standby的环境下,当standby与primary的距离较远需要通过WAN来传输Redo时,为减少传输过程中对primary的压力及网络带宽的占用,仅让其中的一个standby从primary直接接收redo,这个standby就称作cascading standby,而其余的standby从cascading standby接收redo,这些standby称作cascaded standby,cascading standby从中起到了redo转发的功能。比如DG环境中:A是主库、B、C、D都是A的备库,B与A的距离是500KM,B和C、B和D的距离都在50km,这时可以将B库作为cascading standby,把从A收到的redo转发给C、D,这时的C、D就是cascaded standby,因为它们从B库接收redo,而不是从A库直接接收。还有一个限制就是cascaded standby必须是一个physical standby</strong></span><br />
<br />
<span style="font-size:14px;"><strong>下面就来看看如何实现cascade redo transport</strong><br />
</span><br />
<span style="color:#000000;font-size:14px;"><strong>测试DG环境部署:</strong></span><br />
<span style="color:#000000;font-size:14px;">prmy:tstdb1</span><br />
<span style="color:#000000;font-size:14px;">cascading standby:tstdb1_stdby1</span><br />
<span style="color:#000000;font-size:14px;">cascaded standby:tstdb1_stdby2</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;"><strong>###只列出与redo transport相关的参数</strong></span><br />
<span style="color:#000000;font-size:14px;">---tstdb1:</span><br />
<span style="color:#000000;font-size:14px;">alter system set db_unique_name=tstdb1;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1' scope=both;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_2='service=tstdb1_stdby1 SYNC valid_for=(online_logfiles,primary_role) db_unique_name=tstdb1_stdby1' scope=both;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_3='service=tstdb1_stdby2 ASYNC valid_for=(standby_logfiles,standby_role) db_unique_name=tstdb1_stdby2' scope=both; <strong><---role transition后才会用到的参数</strong></span><br />
<span style="color:#000000;font-size:14px;">alter system set fal_server=tstdb1_stdby1;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_state_1=enable;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_state_2=enable;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_state_3=enable;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_config="dg_config=(tstdb1,tstdb1_stdby1,tstdb1_stdby2)";</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby1:</span><br />
<span style="color:#000000;font-size:14px;">alter system set db_unique_name=tstdb1_stdby1;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1_stdby1' scope=both;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_2='service=tstdb1 SYNC valid_for=(online_logfiles,primary_role) db_unique_name=tstdb1' scope=both; <strong><---role transition后才会用到的参数</strong></span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_3='service=tstdb1_stdby2 ASYNC valid_for=(standby_logfiles,standby_role) db_unique_name=tstdb1_stdby2' scope=both;</span><br />
<span style="color:#000000;font-size:14px;">alter system set fal_server=tstdb1;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_state_1=enable;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_state_2=enable;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_state_3=enable;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_config="dg_config=(tstdb1,tstdb1_stdby1,tstdb1_stdby2)";</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby2:</span><br />
<span style="color:#000000;font-size:14px;">alter system set db_unique_name=tstdb1_stdby2;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1_stdby2' scope=both;</span><br />
<span style="color:#000000;font-size:14px;">alter system set fal_server=tstdb1_stdby1;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_dest_state_1=enable;</span><br />
<span style="color:#000000;font-size:14px;">alter system set log_archive_config="dg_config=(tstdb1,tstdb1_stdby1,tstdb1_stdby2)";</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;"><strong>###在tstdb1_stdby1、tstdb1_stdby2上开启MRP</strong></span><br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby1:</span><br />
<span style="color:#000000;font-size:14px;">alter database recover managed standby database using current logfile disconnect;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby2:</span><br />
<span style="color:#000000;font-size:14px;">alter database recover managed standby database using current logfile disconnect;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;"><strong>###DG状态查询:</strong></span><br />
<span style="color:#000000;font-size:14px;">---tstdb1: v$archive_dest里指向LOG_ARCHIVE_DEST_3的状态显示为PENDING,v$archive_dest_status里tstdb1_stdby2的recovery_mode显示为IDLE,表明tstdb1_stdby2的恢复不是通过tstdb1接收日志的</span><br />
<span style="color:#000000;font-size:14px;">SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';</span><br />
<span style="color:#000000;font-size:14px;">SYS@tstdb1-SQL> SYS@tstdb1-SQL> </span><br />
<span style="color:#000000;font-size:14px;">DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT</span><br />
<span style="color:#000000;font-size:14px;">--------------- --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------</span><br />
<span style="color:#000000;font-size:14px;"> tstdb1 LOCAL VALID OPEN IDLE 1 574 0 CHECK CONFIGURATION</span><br />
<span style="color:#000000;font-size:14px;">tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 574 536 OK NO GAP</span><br />
<span style="color:#000000;font-size:14px;"> ME APPLY</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">tstdb1_stdby2 tstdb1_stdby2 UNKNOWN VALID UNKNOWN IDLE 0 0 0 CHECK CONFIGURATION LOG SWIT</span><br />
<span style="color:#000000;font-size:14px;"> CH GAP</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">SYS@tstdb1-SQL> select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2','LOG_ARCHIVE_DEST_3');</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN</span><br />
<span style="color:#000000;font-size:14px;">-------------------------------------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- -----------</span><br />
<span style="color:#000000;font-size:14px;">LOG_ARCHIVE_DEST_1 VALID PRIMARY ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0</span><br />
<span style="color:#000000;font-size:14px;">LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES PARALLELSYNC YES 1.2723E+13</span><br />
<span style="color:#000000;font-size:14px;">LOG_ARCHIVE_DEST_3 VALID STANDBY LGWR PENDING tstdb1_stdby2 LGWR YES ASYNCHRONOUS NO 0</span><br />
<span style="color:#000000;font-size:14px;"> </span><br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby1: tstdb1_stdby2那行的recovery_mode虽然显示为RTA,但实际并非工作在RTA模式,因为cascaded standby必须要等到cascading standby生成完整的archivelog后才能进行recover</span><br />
<span style="color:#000000;font-size:14px;">SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';</span><br />
<span style="color:#000000;font-size:14px;">SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> </span><br />
<span style="color:#000000;font-size:14px;">DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT</span><br />
<span style="color:#000000;font-size:14px;">--------------- --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------</span><br />
<span style="color:#000000;font-size:14px;"> tstdb1_stdby1 LOCAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 574 0 STATUS NOT AVAILABLE</span><br />
<span style="color:#000000;font-size:14px;"> ME APPLY</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">tstdb1 tstdb1 UNKNOWN VALID UNKNOWN IDLE 0 0 0 STATUS NOT AVAILABLE NO GAP</span><br />
<span style="color:#000000;font-size:14px;">tstdb1_stdby2 tstdb1_stdby2 PHYSICAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 574 333 STATUS NOT AVAILABLE NO GAP</span><br />
<span style="color:#000000;font-size:14px;"> ME APPLY</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;"> NONE UNKNOWN VALID UNKNOWN IDLE 1 574 574 STATUS NOT AVAILABLE</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby2:SRLs没有处于ACTIVE状态的</span><br />
<span style="color:#000000;font-size:14px;">SQL> col member format a50</span><br />
<span style="color:#000000;font-size:14px;">SQL> col status format a10</span><br />
<span style="color:#000000;font-size:14px;">SQL> set linesize 130</span><br />
<span style="color:#000000;font-size:14px;">select f.group#,f.member,l.status from v$logfile f,v$standby_log l where f.group#=l.group# order by group#;SQL> </span><br />
<span style="color:#000000;font-size:14px;"> GROUP# MEMBER ARC STATUS</span><br />
<span style="color:#000000;font-size:14px;">---------- -------------------------------------------------- --- ----------</span><br />
<span style="color:#000000;font-size:14px;"> 11 /oradata06/teststdby2/testaaaaa/stdredo01a.log NO UNASSIGNED</span><br />
<span style="color:#000000;font-size:14px;"> 12 /oradata06/teststdby2/testaaaaa/stdredo02a.log NO UNASSIGNED</span><br />
<span style="color:#000000;font-size:14px;"> 13 /oradata06/teststdby2/testaaaaa/stdredo03a.log YES UNASSIGNED</span><br />
<span style="color:#000000;font-size:14px;"> 14 /oradata06/teststdby2/testaaaaa/stdredo04a.log YES UNASSIGNED</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;"><strong>###在tstdb1上进行DML操作,</strong><strong>观察到tstdb1_stdby2的结果滞后于tstdb1、tstdb1_stdby1,直到tstdb1执行下一次switch logfile,tstdb1_stdby2的结果才会更新</strong></span><br />
<span style="color:#000000;font-size:14px;">---tstdb1:</span><br />
<span style="color:#000000;font-size:14px;">update scott.t0930_1 set username='AAA' where user_id=141;</span><br />
<span style="color:#000000;font-size:14px;">commit;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">SYS@tstdb1-SQL> select * from scott.t0930_1 where user_id=141;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">USERNAME USER_ID CREATED</span><br />
<span style="color:#000000;font-size:14px;">------------------------------ ---------- -----------------</span><br />
<span style="color:#000000;font-size:14px;">AAA 141 20150130 16:21:49</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby1:</span><br />
<span style="color:#000000;font-size:14px;">SQL> select * from scott.t0930_1 where user_id=141;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">USERNAME USER_ID CREATED</span><br />
<span style="color:#000000;font-size:14px;">------------------------------ ---------- -----------------</span><br />
<span style="color:#000000;font-size:14px;">AAA 141 20150130 16:21:49</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby2:</span><br />
<span style="color:#000000;font-size:14px;">SQL> select * from scott.t0930_1 where user_id=141;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">USERNAME USER_ID CREATED</span><br />
<span style="color:#000000;font-size:14px;">------------------------------ ---------- -----------------</span><br />
<span style="color:#000000;font-size:14px;">FFF 141 20150130 16:21:49</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1:</span><br />
<span style="color:#000000;font-size:14px;">alter system switch logfile;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby2:</span><br />
<span style="color:#000000;font-size:14px;">SQL> select * from scott.t0930_1 where user_id=141;</span><br />
<br />
<br />
<br />
<br />
<span style="color:#000000;font-size:14px;">USERNAME USER_ID CREATED</span><br />
<span style="color:#000000;font-size:14px;">------------------------------ ---------- -----------------</span><br />
<span style="color:#000000;font-size:14px;">AAA 141 20150130 16:21:49</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;"><strong>###执行switchover使tstdb1、tstdb1_stdby1的角色发生互换</strong></span><br />
<span style="color:#000000;font-size:14px;">---tstdb1:</span><br />
<span style="color:#000000;font-size:14px;">alter database commit to switchover to physical standby with session shutdown;</span><br />
<span style="color:#000000;font-size:14px;">shutdown abort</span><br />
<span style="color:#000000;font-size:14px;">startup</span><br />
<span style="color:#000000;font-size:14px;">alter database recover managed standby database using current logfile disconnect;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby1:</span><br />
<span style="color:#000000;font-size:14px;">alter database commit to switchover to primary with session shutdown;</span><br />
<span style="color:#000000;font-size:14px;">alter database open;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">switchover后DG的状态变为了</span><br />
<span style="color:#000000;font-size:14px;">prmy:tstdb1_stdby1</span><br />
<span style="color:#000000;font-size:14px;">cascading standby: tstdb1</span><br />
<span style="color:#000000;font-size:14px;">cascaded standby:tstdb1_stdby2</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;"><strong>###验证一下tstdb1_stdby2能否继续从tstdb1_stdby1接收archivelog</strong></span><br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby1:</span><br />
<span style="color:#000000;font-size:14px;">update scott.t0930_1 set username='BBB' where user_id=141;</span><br />
<span style="color:#000000;font-size:14px;">commit;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">select * from scott.t0930_1 where user_id=141;</span><br />
<span style="color:#000000;font-size:14px;">USERNAME USER_ID CREATED</span><br />
<span style="color:#000000;font-size:14px;">------------------------------ ---------- -----------------</span><br />
<span style="color:#000000;font-size:14px;">BBB 141 20150130 16:21:49</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1:</span><br />
<span style="color:#000000;font-size:14px;">select * from scott.t0930_1 where user_id=141;</span><br />
<span style="color:#000000;font-size:14px;">USERNAME USER_ID CREATED</span><br />
<span style="color:#000000;font-size:14px;">------------------------------ ---------- -----------------</span><br />
<span style="color:#000000;font-size:14px;">BBB 141 20150130 16:21:49</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby2:</span><br />
<span style="color:#000000;font-size:14px;">select * from scott.t0930_1 where user_id=141;</span><br />
<span style="color:#000000;font-size:14px;">USERNAME USER_ID CREATED</span><br />
<span style="color:#000000;font-size:14px;">------------------------------ ---------- -----------------</span><br />
<span style="color:#000000;font-size:14px;">AAA 141 20150130 16:21:49</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby1:</span><br />
<span style="color:#000000;font-size:14px;">alter system switch logfile;</span><br />
<br />
<br />
<span style="color:#000000;font-size:14px;">---tstdb1_stdby2:</span><br />
<span style="color:#000000;font-size:14px;">select * from scott.t0930_1 where user_id=141;</span><br />
<span style="color:#000000;font-size:14px;">USERNAME USER_ID CREATED</span><br />
<span style="color:#000000;font-size:14px;">------------------------------ ---------- -----------------</span><br />
<span style="color:#000000;font-size:14px;">BBB 141 20150130 16:21:49</span><br />
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26870952/viewspace-2094618/
,如需转载,请注明出处,否则将追究法律责任。