快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

[oracle同步数据库]太高兴了。终于搞定了两个Oracle数据库之间的同步问题,特别是ArcSde元数据库的同步

请联系QQ:1793040 索取软件

C#

posts-
160, comments-
75, trackbacks-
5, articles-
0

博客园
::

首页
::

新随笔
::

联系::

订阅

订阅
::

管理

Posted on
2008-10-15 19:18
张冰
阅读()
评论()
编辑
收藏

在一个项目中,按用户的要求,必须实现系统的稳定性和高可用性。原来提的方案中计划采用双机热备的方式来实现。

当初做方案的时候,根不没有做ArcSde+Oracle的双机热备会这么麻烦,也是过于乐观,觉得通过资料可以完成。

由于需要双网卡和心跳设置,普通的环境没法测试。就想着在用户的环境里做试验。。。但是同时自己忽略了一点,用户在做硬件方案时,已经做了网络冗余,服务器的网卡都被用掉了。。。想想该咋办呢。。。国庆前的最后一天,差点没有失眠。开始到处在网上找资料,找替代方案。

首先考虑到的数据库之间的同步复制。再这里非常感谢

姓名:张玉彬职业:程序员

住址:北京 网名:jillzhang

专长:分布式应用程序开发

的一篇:发布一个用于Oracle数据库间数据复制的组件-OraSyner 文章,让我茅塞顿开,有了基本的实现思路,而且减少了代码架构准备的时间。

看完这篇文章后,正如楼主所说,几万条数据,性能还可以,数据量大了,肯定吃不消,我该怎么办?

一:先考虑下我的目标是什么?

1,如果主服务器挂掉以后,从服务器在很短的时间内能够快速接上;

问题:

  • 短时间?用户能够接受的数据同步延时是多少,3秒钟?
  • 数据的差异程度?用户能够承受的服务器切换时造成的数据丢失量,1~5条,这个很难测试?
  • 两个数据库遵循的原子时钟是否一致?如果不一致,将会导致同步的方向判断出现问题。

2,每次同步时,产生的数据传输量最少;

问题:

  • 如何控制数据库之间传输的数据量?
  • 如何获取主服务器表,甚至行的变化,添加,删除,修改等操作?

3,还必须比较数据库之间的最后修改时间,也就是需要计算同步的方向;

问题:

  • 如何获取表中记录修改的最后时间?
  • 如何让Oracle的时间类型字段,显示到长日期,包括时:分:秒?

4,同时需要考虑一个主服务器,多从服务器同步的问题;

问题:

  • 如果有多台数据库需要同步?
  • 如果多台数据库需要实现部分同步?

二:然后对这套组件进行分析,并结合项目需求进行测试。

哎,为了这套东西,整个国庆都奉献出去了。还好几次到后半夜。

还好有环境,两台服务器,一台同步测试机器。多次对数据库进行导入导出,备份,竟然直接把ArcSde服务器给同步跨了。。。再不断的同步测试时,发现,我需要

1,支持大对象类型的同步————————————————这个还好。很快解决

2,支持Oracle自定义类型的同步—————————————到现在为止没有找到办法,请各位高手指点一二啊。。。

3,数据库有很多个表,编写同步文件也是一个非常麻烦的事情————————————还好以前有一个数据库结构浏览程序,该把该把做了同步文件生成器

4,数据量很大时,性能确实够呛—————————————开始寻找如何监控每条记录的变化,还好曾经接触过物化视图,利用物化视图日志表这个东东来解决记录变化的监控;

5,如何获取每条记录变化的确切日期———————————物化视图日志表钟有一个TimeSpan$$字段,记录了变化时间,但我没有办法使他显示长日期,不知各位大大有何好办法没有

6,很多表没有主键,无法创建物化视图日志————————在同步组件中实现了对同步结构的初始化,相当于再一个物体上嵌入了很多寄生虫。。。bt一下。

7,很多表没有主键,但是有唯一索引或唯一约束,而且有多个索引————在配置同步文件时,取哪个索引来做主键字段呢?通过对物化视图日志表建立的分析

使用主键的原则:字段数量少,整形优先.

8,在物化视图日志中,如何获取新增记录,修改记录,删除记录——————该表中有字段DMLTYPE$$, OLD_NEW$$,其中DMLTYPE: U=Update,D=Delete,I=Insert

OLD_NEW$$:N=New;O=Old;U=Update

9,ArcSde元数据库多次,失败,竟然使ArcCatalog等客户端无法连接,卸载,重装ArcSde都无效——————Schema的同步还是很难的,问题就出在7当中的问题,索引多,把所有索引字段都当成主键来处理了。

到下午为止,终于基本上搞定了。

三:系统的性能

1,需要同步的表再1200个左右;

2,启动系统时,做第一次同步,先对所有注册的表进行扫描,初始化。没有主键的创建主键,没有物化视图日志表的创建之;每次第一次同步大概需要3分钟;

3,后续同步时,只对变化的表,变化的记录进行同步,基本上在3到4秒之间;曾经想用多线程来进行同步,利用线程池,但老报错,估计是公用变量的值变化了。觉得3,4秒中的延时,暂时可以接受。先应付过去,等组件相对稳定并经过一段时间测试后,再来考虑多线程同步的问题。

四:系统遗留问题小结

1,多服务器没有遵循同一个原子时间,而是利用了本地时间;

2,对行记录变化的控制只精确到一天,这样很不安全,起码到秒;

3,没有采用多线程,系统性能还不够高效;

4,现在只支持Oracle之间同步,ArcSde相同版本的同步;

5,现在没有支持数据库架构变化的同步

6,Oracle自定义类型字段无法同步

五:扩展

1,有时间实现Sql Server之间的数据同步;

2,研究不同数据库之间的同步

同步工具提供下载

刷新评论刷新页面返回顶部

博客园

Copyright © 2020 张冰

Powered by.NET Core on Kubernetes

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1793040