发布一个用于Oracle数据库间数据复制的组件-OraSyner

     相信现在很多Application在使用db的时候,仍采用master-slave的方式,因为这种方式最贴近现实,开始可能只需要一台db server,可随着数据量的增加,一台会不堪重负,此时我们必须增加server,来应付日益增长的data,而我们在开发程序的时候,可能并没有想到系统日后要面临这样的分布式数据库系统,此时最好的解决方案就是master-slave,这样系统就可以不做任何的更新了。在工作中,我开发了一个用于同步master-slave之间数据的组件,他包括以下功能:

  1. 能够同步master和slave的数据
  2. 在同步数据的时候,能够记录运行过程

   

    他的特点是一个通用的组件,他通过配置文件来设置master和slave库,并且通过配置来设置要数据同步的数据表,当有新的数据表需要同步的时候,我们只需要在配置中增加一项就能解决问题。这个配置文件,名称为:OraSyner.cfg,将它放置在程序运行的目录里面。OraSyner.cfg中格式如下:

<?xml version="1.0" encoding="utf-8" ?>
<cfgs>
    
<servers>
        
<master>Password=321;User ID=username;Data Source=masterdb</master>
        
<slave>Password=123;User ID=username;Data Source=slavedb</slave>
    
</servers>
    
<syntables>
        
<table name="tablename">
            
<key>key1</key>
            
<key>    key2</key>
        
</table>
    
</syntables>
</cfgs>

 

节点名称

使用状态

节点说明

cfgs

在整个配置文件中有且只有一个

配置文件的根节点

servers

在整个配置文件中有且只有一个

用于声明master-salve服务器信息的根节点

master

在一个server中有且只有一个

Master db的连接字符串

slave

在一个server中有且只有一个

Salve db 的连接字符串

syntables

在整个配置文件中有且只有一个

用于声明待同步的数据表信息的根节点

table

在syntables中0个或者多个

用于声明待同步数据表信息的节点

Table[@name]

在table节点中有且只有一个的属性

用于指示同步数据表的名称

key

在一个table节点中1个或者多个

用于指示待同步数据表的行标志字段

该组件的特点:

  1. 通俗易用,扩展性强,搞明白上面的配置说明就万事大吉
  2. 能适用于任何环境之下,比如master在内网,而slave在外网,或者slave在内网,而master在外网,只要运行该组件的主机能连接到master和slave就可以。

该组件的工作原理:

通过读取配置文件,将要同步的数据表数据读取出来放到组件的DataSet中,然后针对每个表,先在master中获取表字典,然后根据配置中的行标志字段,生成用于同步slave的语句,主要采用oracle中的

 MERGE INTO 
 USING  
ON
 
 
WHEN MATCHED then

 
WHEN NOT MATCHED THEN


语句来实现同步功能,也就是有就更新,没有则插入,而一条条的 比对,性能会相对比较慢,所以先在slave中创建临时表,将数据插入到该临时表,然后一次性merge into.测试后,发现比一条条的快20倍左右。

本组件的适用范围:

  1. 发布/订阅不太方便的时候
  2. 数据量不宜太大,太大会搞死人的,比如上百万,上千万 ,我测试了下,几万的数据在几秒内还是能搞定的。再大了本组件就没戏了
  3. 临时 充当数据同步工具(其实我开发这个就是为了这个目的)

使用办法:

每次同步操作之需要调用Executor对象的Execute()方法即可,你可以将它加到作业调度软件中,定时的执行。
注意:产生的log信息会在程序运行的目录里面的log文件夹中按日期创建类似yyyyMmdd这样格式的文件夹。而如果想输出比较详尽的log信息,在.config中文件的<appSetting>中添加<add key="LogLevel" value="2"/>是必须的,value改为1,它只记录错误和提示信息,为0,只记录错误,为2记录错误,提示和调试信息。

组件项目文件:
/Files/jillzhang/OraSyner.rar 
 

 

posted @ 2008-01-20 01:41 Robin Zhang 阅读(...) 评论(...) 编辑 收藏