异构数据库数据同步(从Progress到MySQL)
一直想写点东西,但却迟迟没有开始,今天无意中回到ERP100这个网站,发现有了QAD的专区,于是,一时热血沸腾,写了点东西,就借此机会将内容也发到这里吧,呵呵。
其实内容都是本人写的,不过为了图方便,在ERP100中写完了,然后直接Copy到这里,偷了点懒,呵呵。
以下是正文,在ERP100中的地址是
http://bbs.erp100.com/forum.php?mod=viewthread&tid=74269&page=1&extra=#pid438182
由于小弟接触QAD也只有短短几年时间,目前也只是刚刚入门的菜鸟级别,希望借此机会与熟悉QAD软件的前辈一起交流,呵呵。
项目名称:
异构数据库数据同步(从Progress到MySQL)
背景介绍:
我现在公司使用的QAD版本很老,是85g的,于是,要升级到eb2.1,但由于有很多水晶报表是直接连到QAD后台取数的,而eb2.1对连接数限制在1个,因此,公司决定将QAD的数据同步导入到MySQL数据库中,这样,只要将水晶报表的连接重新指向MySQL,就可以正常使用了。
实现思路:
要实现实时同步,最直接的就是触发器了,通过在触发器中分析各字段的值,生成SQL语句,并存入文本文件中,然后,定期调用一段Java程序,读取文本中的SQL语句,将数据插入MySQL数据库中。
注:当时在项目分析阶段,实际还有1套方案,也是通过触发器记录被修改的数据,然后写入一个自定义表的Raw字段,然后,定时执行一段Progress程序,将修改写入到MySQL中,但由于这个方案需要多占用一个Licence,因此,最终被放弃。
实现方法:
1. 设置Trigger
进入Data Dictionary(数据字典),点 Edit -> Modify Table,在弹出的窗口中输入要建Trigger的表名,例如 pt_mstr,然后,在之后的窗口中,在最下面的按钮中可以找到 Trigger 的按钮,进去之后就到了Trigger的设置界面了,这里我们主要在 Write 和 Delete 上面设置(其实,QAD的参考手册上好像是推荐的Replication-Write 和 Replication-Delete,但当时测试的时候好像有点问题,因此,没有使用。另外,Create不用管,因为,触发了Create之后一定会触发Write的),在第一个栏位填入Trigger要执行的程序(一般以.t结尾),将后面的CRC检验设置为no(否则,程序在执行时会报错),设置完后点F4退出,并在弹出的窗口中点击保存,这样,Trigger就设好了。
2. 编写Trigger代码
先看下面的代码:
TRIGGER PROCEDURE FOR WRITE OF PT_MSTR OLD BUFFER OLD_PT_MSTR./*修改数据时的Trigger*/
TRIGGER PROCEDURE FOR DELETE OF PT_MSTR./*删除数据时的
相关文档:
一、安装JDK 首先下载JDK 5.0(JDK 5.0的下载页面为:http://java.sun.com/j2se/1.5.0/download.jsp); 然后运行JDK 5.0安装程序jdk-1_5_0_06-windows-i586-p.exe,安装过程中所有选项保持默认;最后配置JDK的环境变量:在“我的电脑”上点右键—>“属性”—>“高级”& ......
1. 连接mysql:
mysqlbinmysql -h主机地址 -u 用户名 -p 用户密码
2.退出mysql:exit
3. 修改密码:
mysqlbinmysqladmin -uroot -p(oldpassword) password newpassword
4.增加用户:
添加一个用户test1 密码为ABC;让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入
mysq ......
公司的服务器是CentOS 5.4(Final)版的,今天在上面安装了一回mysql5.5,记录如下:
1、从http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.5.2-m2.tar.gz 下载源码安装包到/usr/local/src
2、tar zxvf mysql-5.5.2-m2.tar.gz 解压到/usr/local/src/mysql-5.5.2-m2下
cd mysql-5.5.2-m2/
&n ......
24小时内记录(即86400秒)
$sql="SELECT video_id,count(id)as n from `rec_down` WHERE UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(add_time)<=86400 group by video_id order by n desc ";
$sql="select a.id,a.title,b.n from video_info a,(".$sql.")b where a.id=b.video_id order by n desc limit 20";
N天内记录
......