如何进行异构数据库同步(下篇)
1、详细设计
1.1 SQL语句通用解析程序
首先需要一个通用的“SQL语句通用解析程序”,因为异构数据库的大部分表都与另外的表有一一对应的关系,该解析程序用于对这些一一对应的表进行处理。
表与表之间的对应关系基于上篇提到的整理的Excel文档,“SQL语句通用解析程序”如何读取对应关系对收到的INSERT、UPDATE和DELETE语句进行处理呢?笔者采用的是将对应关系写入XML文档中,当然也可以采用另外的方式。
参考XML格式如下(Oracle 新系统-> SQL Server旧系统):
<table name="freephone" partyName="PLAT_FreePhone" fieldCount="8">
<field name="Phone" partyName="Phone" primary="true" />
<field name="ProductID" type="varchar" partyName="ProductID" partyType="int" />
<field name="AreaId" partyName="" />
<field name="Effect" partyName="" />
<field name="EffectLess" partyName="" />
<field name="Addtime" type="varchar" partyName="AddTime" partyType="datetime" partyValue/>
<field name="Operator" partyName="Operator" />
<field name="Remark" partyName="Remark" />
</table>
当一方对freephone表操作的INSERT语句:
insert into freephone (Phone, ProductID, AreaId, Effect, EffectLess, Addtime, Operator, Remark)values(‘13122223333’,‘003’,25,‘20110724000000’,‘20111024235959’,‘20110702409000000’, ‘amigo’, ‘amigo add!’)
根据上面XML配置和通用解析程序的处理,对应对方的新的SQL语句为:
INSERT INTO PLAT_FreePhone(Phone, ProductID, AddTime, Operator, Remark) values(‘13122223333’, 3, GETDATE(), ‘amigo’, ‘amigo add!’)
再看一条UPDATE语句:
update freephone set ProductID=’004’, AreaId=26 where Phone=’13122223333’
转换为对方的语句为:
update PLAT_FreePhone set ProductID=4 where Phone=’13122223333’
另外除了如上所演示的简单的类型不同、字段名称不同,有些字段在对方没有外,有时候有些字段还需要一定的转换,例如在一方存储的limited字符串是二进制方式,例如111111,而对方存储的是二进制对应的十进制的值,再例如,一方存储的是6位的时间(时分秒),而对方存储的只是4位的时间(时分),那么可做一次自定义的substr操作。
看另一个参考的XML实例:
<table name="phonelimited" partyName="PLAT_PhoneLimited" fieldCount="6">
<field name="Phonenumber" partyName="Phone" primary="true" />
<field name="AreaId" type="int" partyName="AreaID"&nb
相关新闻>>
- 发表评论
-
- 最新评论 更多>>