设为首页 收藏本站
查看: 420|回复: 0

[经验分享] Oracle Stream Replication技术

[复制链接]

尚未签到

发表于 2018-9-14 13:24:48 | 显示全部楼层 |阅读模式
  Stream 是Oracle 的消息队列(也叫Oracle Advanced Queue)技术的一种扩展应用。 Oracle 的消息队列是通过发布/订阅的方式来解决事件管理。流复制(Stream replication)只是基于它的一个数据共享技术,也可以被用作一个可灵活定制的高可用性方案。 它可以实现两个数据库之间数据库级,schema级,Table级的数据同步,并且这种同步可以是双向的。 Oracle Stream也是通过数据冗余来提高可用性,这一点和Data Guard 类型。
  Oracle 高级复制(Oracle advanced Replication) 和流复制(Stream Replication) 是从名称和功能上都相似的两种技术。 但前者是基于触发器的,后者是基于日志挖掘(Logminer)技术。
  1、Stream 的工作原理
  Stream 是Oracle Advanced Queue技术的一种扩展应用, 这种技术最基本的原理就是收集事件,把时间保存在队列中,然后把这些事件发布给不同的订阅者。 从DBA的角度来说, 就是把捕获Oracle数据库产生的Redo日志,然后把这些日志通过网络传播到多个数据库,其他数据库通过应用这些日志,达到复制变化的作用。
  在Stream 环境下, 复制的起点数据库叫作Source Database, 复制的终点数据库叫作Target Database。 在这两个数据库上都要创建一个队列,其中的Source Database上的是发送队列,而Target Database上的是接收队列。
  数据库的所有操作都会被记录在日志中。 配好Stream环境后, 在Source Database上会有一个捕获进程(Capture Process), 该进程利用Logminer技术从日志中提取DDL,DML语句,这些语句用一种特殊的格式表达,叫作逻辑变更记录(Logical Change Record, LCR)。 一个LCR对应一个原子的行变更,因此源数据库上的一个DML语句,可能对应若干个LCR记录。 这些LCR会保存到Sourece Database的本地发送队列中。然后传播进程(Propagation Process)把这些记录通过网络发送到Target Database的接收队列。 在Target Database上会有一个应用进程(Apply Process), 这个进程从本地的接收队列中取出LCR记录,然后在本地应用,实现数据同步
  2、Data Guard 和Stream 区别
  Date Guard有两种类型:physical standby 和 logical standby。 这两中standby 都有3个功能模块: 日志传送;日志接收,日志恢复。两种standby在前两个模块中是一样的,都是通过LGWR或者ARCn进程发送日志,通过RFS进程接受日志。 区别在第三个模块:
  Physical Standby 使用的是Media Recovery技术直接在数据块级别进行恢复, 因此Physical Standby 能够做到两个数据库的完全同步, 没有数据类型限制。
  Logical Standby实际是通过Logminer技术,把日志中的记录还原成SQL语句,然后通过Apply Engine 执行这些语句实现数据同步, 因此Logical Standby不能保证数据的完全一致。 比如Logical Standby 不支持某些数据类型,这一点在选择Logical Standby时必须要考虑。 Logical Standby 不支持的数据类型可以从DBA_LOGSTDBY_UNSUPPORTED是不里查看。
  SQL>SELECT * FROM DBA_LOGSTDBY_UNSUPPORTED;
  Stream 使用的是Logical Standby 第三个模块,也就是在Source Database一端,Capture 进程利用Logminer 技术把日志内容还原成LCR, 然后发送到Target Database, 而在Target database 一端, 也是通过Apply Engine 执行这些LCR。 因此Stream在使用上也有些限制条件。这些可以从视图ALL/DBA_STREAMS_NEWLY_SUPPORTED,  ALL/DBA_STREAMS_UNSUPPORTED 查看stream复制不支持的数据类型。
  SQL>SELECT table_name, reason FROM ALL_STREAMS_NEWLY_SUPPORTED;
  SQL>SELECT table_name, reason FROM DBA_STREAMS_NEWLY_SUPPORTED;
  SQL>SELECT table_name, reason FROM DBA_STREAMS_UNSUPPORTED;
  SQL>SELECT table_name, reason FROM ALL_STREAMS_UNSUPPORTED;
  下面以图表的形式列举他们的区别:
  Streams                                             Data Guard
  主要目的是数据共享                                  主要目的是灾难恢复和高可用性
  可以多方向同步                                      只能是单向,从Primary--> Standby
  数据粒度可以是数据库,Schema,Table三个级别         只有数据库级别
  支持异种平台的同步(Heterogeneous Platforms)       必须同种平台 (Homogeneous Platforms)
  参与复制的每个数据库可以读写                        只有Primary可以读写,Standby 只读
  支持Oracle 和非Oracle 数据库间的同步                只能是Oracle数据库间
  3、前期规划的几点:
  1)确定复制集:如是数据库级还是表级
  2)决定复制站点
  3)决定LCR是本地捕获还是下游捕获
  本地捕获: 在源数据库进行,从联机日志和归档日志获得LCR
  下游捕获:在目标数据库进行,从归档日志获得LCR.
  本地捕获可以保护更多的数据,但是会占用源数据库的资源。
  4)决定复制拓扑结构:这时要决定复制数据库的用途,是只用于预防灾难,还是平时保持空闲,或允许用户使用。
  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-582879-1-1.html 上篇帖子: Oracle Stream Replication实例(二) 下篇帖子: oracle使用日记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表