在《Oracle10gR2 Streams(四)全库复制之二》中利用maintain_global配置了一个downstream的全库复制,本例将在该试验的基础上修改成real-time downstream的全库复制。
所谓实时异地捕获,其实和普通的异地捕获基本上是一致的,所不同的,就是传递到捕获进程所在库的不再是归档日志,而是通过lgwr进程直接传送当前redo。这和data guard中使用arch还是lgwr来传送日志的机制是一样的。
一、在捕获进程所在库创建standby redo logfile
2 'F:\oracle\oradata\dest\stdbyredo01.log' size 5m;
Database altered.
STRMADM@dest>alter database add standby logfile
2 'F:\oracle\oradata\dest\stdbyredo02.log' size 5m;
Database altered.
STRMADM@dest>alter database add standby logfile
2 'F:\oracle\oradata\dest\stdbyredo03.log' size 5m;
Database altered.
STRMADM@dest>alter database add standby logfile
2 'F:\oracle\oradata\dest\stdbyredo04.log' size 5m;
Database altered.
二、在源库修改日志传送方式
System altered.
三、修改capture进程属性,启用实时捕获
CAPTURE_NAME
------------------------------
NING$CAP
STRMADM@dest>BEGIN
2 DBMS_CAPTURE_ADM.SET_PARAMETER(
3 capture_name => 'NING$CAP',
4 parameter => 'downstream_real_time_mine',
5 value => 'y');
6 END;
7 /
PL/SQL procedure successfully completed.
STRMADM@dest>select capture_name,parameter,value from dba_capture_parameters;
CAPTURE_NA PARAMETER VALUE
---------- ------------------------------ ------------------------------
NING$CAP DISABLE_ON_LIMIT N
NING$CAP DOWNSTREAM_REAL_TIME_MINE Y
NING$CAP MAXIMUM_SCN INFINITE
NING$CAP MESSAGE_LIMIT INFINITE
NING$CAP PARALLELISM 1
NING$CAP STARTUP_SECONDS 0
NING$CAP TIME_LIMIT INFINITE
NING$CAP TRACE_LEVEL 0
NING$CAP WRITE_ALERT_LOG Y
9 rows selected.
四、在源库归档当前日志,使得capture进程切换到standby redo logfile中捕获数据
System altered.
此后在目标库的alert中可以发现如下记录,表明已经开始实时捕获
LOGMINER: Begin mining logfile: F:\ORACLE\ORADATA\DEST\STDBYREDO01.LOG
五、验证实时捕获是否成功
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 241 INACTIVE
2 242 CURRENT
3 240 INACTIVE
STRMADM@ning>insert into ning.teststrm values(2);
1 row created.
STRMADM@ning>insert into ning.teststrm values(3);
1 row created.
STRMADM@ning>commit;
Commit complete.
稍等片刻后,在目标库查询
I
----------
1
2
3
可见数据已经复制过来,此时再看源库的logfile sequence
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 241 INACTIVE
2 242 CURRENT
3 240 INACTIVE
也就是说,并没有新的归档日志产生。新的事务日志实时的传递到了目标库的standby redo logfile中,然后capture进程实时的从standby redo logfile中解析出事务并应用。这样数据的复制就不再需要等待归档,源库和目标库之间的数据就能基本保持一致了。