Stream 技术小结

Stream的主要环节分为捕获(capture),分发(propagation)和应用(apply)。如果从应用这些环节所处的地方,可以分为:
UpStreams(capture和propagation在source数据库,apply在destination数据库)。
DownStream(capture和propagation,以及apply在destination数据库)

如果成对象来分,可以分成:
database级的stream
owner级的stream
table级的stream

下面我们来建立几个stream:
(一)owner级UpStream:

(二) owner级downstream:
1.1~1.10 同upstream。

2. 在downstream site设置:

3. 在source site和downstream site同时设置:

4. 从soruce site创建standby redo:
4.1 在source库查询redo情况:

注意创建standby redo时,大小要和source site的redo大小一致,数量上要比source site的redo多一个。

4.2 在downstream site:

4.3 在downstream site上检查一下是否建立成功:

5. 准备source site的参数:

6. 在source site和downstream site同时设置参数:

7. 开始stream配置:
7.1 在source site创建需要复制的schema:

7.2 在downstream site设置stream queue:

注意,从最佳实践出发,建议downstream设置一个queue,而不是多个queue。这一个queue将用于catpure和apply的queue,能避免分发和queue to queue传输的冗余。

7.3 在downstream site创建apply进程:

7.4 检查 apply的信息:

7.5 在downstream site创建capture进程:

7.6 检查capture的信息:

8. 为实时变动设置capture:
8.1 在downstream site:

8.2 在downstream site设置rule规则:

8.3 在downstream site检查rule设置情况:

9. 实例化需要同步的owner:
9.1 在source site:

9.2 在downstream site:

9.3 在source site:

10. 在downstream site开始启动apply进程:

10.1 检查 apply情况:

可以看到已经从disbale变成enabled。

11. 在downstream site启动capture进程:

11.1 检查 capture情况:

看到capture的status也从disable变成enabled了。
至此,downstream建立完毕。


【trouble shooting】:

1.对于upstream,需要检查dba_capture, dba_propagation, dba_apply:

以上均为enable说明各个进程正常;
如果为disable,需要用dbms_capture_adm.start_capture/DBMS_PROPAGATION_ADM.start_propagation/dbms_apply_adm.start_apply包来进行启动;
如果是abort,说明是异常终止,需要查对应的error message,排除错误后启动。

案例一:
upstream的apply进程和capture进程都正常,但是无法同步,查dba_propagation,发现异常:

进一步查alertlog中发现:

确实看到了问题存在。我们进一步看:

我们看到,propagation进程如果尝试连接,发现没有侦听,尝试16次之后,会自动disable propagation进程。
因此我们要做的就是启动侦听,再启动propagation进程。

2. 对于downstream,由于没有propagation进程,我们可以直接看apply和capture进程的情况:

在这个案例中,我们看到apply进程出现了问题,问题是ora-26174。进一步:

好,我们进一步来看dba_apply_error:

我们看到是downstream site库的是实例化没有成功,我们重新在source库做一次实例化,相关的包可以参见这里

然后重启apply进程:

检查进程情况,已经恢复正常:

相关文章

4条评论

  1. 我的streams环境,重启数据库后,复制就不行了,三大阶段的进行状态也没有问题,都是enable的,监听和网路也没有问题,排错半天最后,重启了一下propagation进程,就好了,真是无语啊,有时候解决故障不能一上来就那么深入,还是深入理解streams的架构才是基本.

  2. re david: stream 在实际的生产环境中用的比较少,内存问题,另外还有不少bug。

  3. 整理的很详细啊,我们最近准备尝试上一个查询库用stream,参考一下经验

  4. 想问一下,我的streams 环境是oracle11gR2, 实例化数据库从源库导出来,导到目标库里,这个过程源库不能有dml 想insert,update,delete 的操作的吗? 我把从源库到出来导入到目标库,开启app进程 查看dba_apply_error视图,报错误 ora-26787 ,想知道 是不是实例化配置的时候源数据库不能有dml 操作的吗? 非常感谢

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据