前几天在医院实习时遇到了一个数据库的表同步的问题,由于慧通需要调用les系统的检查结果,由于厂家不允许我们在他们的数据库上面建触发器,但是给了我们数据库的用户和密码并且使用到的相关表,因此在和凯斌师兄讨论之下有几个解决方法:
1:触发器,这个无疑是最简单高效的,可惜实际上不允许.
2:建立dblink进行同步,效果不好
3:写个中间程序解析在目标表的sql操作,然后再写入我们自己的数据库上面(我是打算用python写一个脚本的).
如果是mysql的话他的每一步操作都会记录在log文件上面,而oracle也是如此,但是解析起来oracle有点困难,于是在无意之中发现了一位阿里巴巴的工程师写了个datacopy的工具进行数据同步,不过他采用的是OCI接口的资料写了一个DataCopy程序, DataCopy可以在两个Oracle库之间以比较快的速度拷贝数据.
以下是我根据使用文档写的使用教程:
假设,目前我们的机器A上面有一张表Ta,机器B的Tb需要使用Ta上面的数据,于是乎我们就得对他们这两张表进行同步操作:
使用如下:
datacopy.exe user1=sys/sys@A user2=sys/sys@B table1=Ta table2=Tb sync=delins unique=id
现在进行命令分解,user1填入机器A的地址,user2填入机器B的地址,table1为源Ta,table2为目标表Tb,sync代表同步的方式,unique为表Ta和Tb使用的主键.因为我的两张表都是使用id那一列当作主键,因此unique=id.
适用情况:
该工具只是适用于那些对表Ta进行update和insert的操作,如果进行delete操作的话,datacopy是无法在Tb表进行delete操作的,并且不能对主键id进行修改,如果主键id=’oracle’修改为’mysql’的话,那么datacopy只会在Tb添加一个id=’mysql’的数据而不会把id=’oracle’删除的.在医院每个病人都会拥有自己的cardid,一般用此来当主键并且不会对主键修改.因此使用datacopy的话就能很好的使用于医院的les数据库和his数据库的同步要求了.
当然我是一个技术人,当然得要求多点,如果遇上主键频繁被修改的情况,又应该怎么做呢?因此应该自己试着写个python脚本来解决下真正的sync要求.
参考文献:

Responses to “Oracle学习小计一”
Leave a Reply