`
aswang
  • 浏览: 837873 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Oracle零碎笔记之数据同步

阅读更多
需求:实现Oracle数据库表记录变更后的准实时同步。
 
可选方案:
1、基于时间戳来检测变更
要求:
  a、需同步的表均需要添加时间戳字段,并在更改数据后,同步更新时间戳
  b、对于删除操作,需要额外处理。或通过触发器记录,或者不真实删除记录,仅仅设置删除标记。
  c、业务层编码实现同步
缺点:
  对系统增加了额外约束
  同步的实时性取决于轮训的时间间隔
 
2、基于触发器来记录变更
要求:
  a、对于所有同步的表,均需要编写触发器
  b、可基于dblink直接将变更应用到远程数据库
  c、或触发器将变更统一记录到一张表中,然后业务层编码实现同步
缺点:
  可维护性较差,性能较差
  有潜在问题:oracle官方说明,不保证触发器只触发一次
 
3、基于Oracle快照和物化视图实现同步
要求:
  a、对于需同步的表,需要建立快照表,触发器等
 
4、基于Oracle Database Change Notification实时获取变更
要求:
  a、需要确保应用与数据库的一直连接
缺点:
  在连接断开后,下次连接建立之前,数据库的变更会丢失
  适合于对数据要求不高的场合,比如实时获取GPS信息等,丢失的信息影响不大
  
5、基于Oracle Streams方案实现同步
要求:
  a、Oracle需要以归档模式运行
  b、需要在源数据库和目标数据库中编写相应的存储过程,来完成变更捕获、传播和变更应用
优点:
  基本可实现实时同步
  可在数据库层,完全基于Streams实现一对一、一对多等数据复制需求
缺点:
  难度较大,需要对Oracle Streams有一定的认识
  需在源数据库和目标数据库做不同的处理
  工程人员实施有一点难度
 
6、基于Oracle Streams + Oracle AQ 捕获变更,发布变更
要求:
  a、Oracle需要以归档模式运行
  b、仅基于Streams捕获本地数据库变更
  c、通过Oracle的消息队列AQ,来发布变更
  d、业务层通过JMS获取变更,并应用到目标数据库
  
备注:
方案6为方案5的简化,仅依赖于Streams来捕获变更,发布变更。变更的应用需要编码实现。
该方案主要是为了降低工程维护的复杂性。
 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics