惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
MyScale Blog
MyScale Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
雷峰网
雷峰网
罗磊的独立博客
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
博客园 - 司徒正美
Last Week in AI
Last Week in AI
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
宝玉的分享
宝玉的分享

博客园 - 星际探索

客户信息数据库设计备忘录 饼状图的改进(解决零值和数值无限小的显示问题) 读《理财有道》有感 自动更新程序的设计框架 关于呼叫中心业务系统构架方面的设想 关于软件产品化的一些设想 公司面试内容建议 基于微软WCF技术的新一代热线系统构架 关于实时监测系统的设计思路 把英文版软件卖给德国客户的辛苦历程 万事开头难 关于数据同步的方法和优缺点比较 经验 神话 和谐的社会 奇怪的社会 一个简单实用的日志记录类 接口服务程序经验和建议 监控程序框架 关于监控程序的一点设想 项目数据库设计的一点体会
实现分支机构和集团数据同步的坎坷历程
星际探索 · 2010-08-02 · via 博客园 - 星际探索

前言:

前一段时间,接到一个任务,要完成一个下属子公司要把所有的业务数据实时同步到集团的数据库中去。

数据流图如下:

第一章:愉快

由于下属子公司是用的sql server数据库。集团是oracle数据库。我第一个想到的就是使用微软的 事务复制 功能。

在公司里安装sql server 2005oracle 10g,配置发布、订阅、分发、测试。由于事务复制 支持异构数据库,如oracle sql server 中做增删改操作,数据瞬间同步到oracle数据库中。一切进行的非常顺利。 微笑。。。。。。

第二章:深渊

在一次和客户的沟通中,客户提到了集团oracle 的字符集是 SIMPLIFIED CHINESE_CHINA.US7ASCII。赶紧修改参数,链接到该oracle数据库中。 再做测试,问题来了,对于中文的内容 同步到oracle 中全部出现了乱码。 汗~~~~

赶紧google 噢,修改一下客户端的注册表 NLS_LANG SIMPLIFIED CHINESE_CHINA.US7ASCII ,再测,涛声依旧。

赶紧和客户沟通,集团先装一台字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK oracle数据库,先临时使用。找到解决方法后,在切换到 的字符集 US7ASCII 的数据库中。 此问题先搁置下。

第三章:绝望

在公司我已经把 事务复制 的部署玩的很溜了,正好一个出差机会,我去一家集团下属的子公司部署该事务复制。

在现场链接上数据库,找到复制,右击新建,噔! 弹出一个提示框

Google一把,了解了,用计算机名登录,在新建,ok,这个框不提示了。但是,等等,等等,等等,等等,等等 客户这边做的双机热备, 两台计算机名称是不一样的,但ip地址虚拟了一个。 这可如何是好? 

现在问题是 双机热备的两台电脑中,必有一台 无法配置 复制的发布功能。

网上 google 了好几天,也没有找到解决方案。 哭啊。。。。。。。

第四章:条条大路通罗马

看来微软的工具是指望不上了。现在只有一个解决方案,在业务库中的 每张表 都添加一个触发器,在做 deleteupdate insert 时,把表名,主键名称,主键值 操作类型等信息写进一张中间表中。然后做个console 程序,读取这中间表,就获得了 增量数据,再把这些数据 写进oracle 数据库。   最后,通过sql job 实现每天定时 执行。

  这个机制运行了两个月,效果还不错。

第五章:老问题

  读者也许有个疑惑,那字符集问题怎么解决的啊。 解决的方法是这样的。

1:修改客户端注册表。改为和服务端一样的字符集名称。

2:不要用 System.Data.Oracle 类集,改用System.Data.OleDb 在链接字符串中 加入 provider=msdaora.1   (我使用c# 语音开发)

  问题解决。

第五章:尾声

微软的复制功能,目前有两个局限

1:无法解决字符集问题。

2:无法解决双机热备问题。

我目前采用的方式,是在牺牲业务系统性能的基础上做的。是我能想到的最后一招。

还请各位有什么其它的方法,能不吝赐教啊。

也非常期待有哪位大侠能告诉我:其实微软的复制功能 能够解决这两个问题。