公司有好几个系统,数据库类型是ORACLE8I的,以后可能还会有别的系统(也许是SQL SERVER 2K),从这些系统出的报表是相互独立的,杂乱无章,也有很多重复的地方,不方便领导查看。现在领导要求在总公司建个企业级的数据仓库(用ORACLE),把底下子部门的不同数据库给同步到总公司来,然后在总公司的数据服务器里出报表。
假设总公司数据仓库为SERVER,部门1的数据库为A1,部门2的数据库为A2。
我就想每天晚上半夜的时候,从A1和A2自动的把每天发生的业务数据同步给SERVER,然后根据SERVER上的数据用C#做报表,但我一直都是学SQL SERVER的,对ORACLE不怎么懂,所以请教大家:如何把A1和A2的数据同步给SERVER呢?
不要求做时时同步,只要一天同步一次就好了。不能对A1数据库做太大的改动,一个是业务量很大,数据服务器负载高,一个是那个系统很复杂,是物流方面的ERP软件。
先谢谢大家了!
假设总公司数据仓库为SERVER,部门1的数据库为A1,部门2的数据库为A2。
我就想每天晚上半夜的时候,从A1和A2自动的把每天发生的业务数据同步给SERVER,然后根据SERVER上的数据用C#做报表,但我一直都是学SQL SERVER的,对ORACLE不怎么懂,所以请教大家:如何把A1和A2的数据同步给SERVER呢?
不要求做时时同步,只要一天同步一次就好了。不能对A1数据库做太大的改动,一个是业务量很大,数据服务器负载高,一个是那个系统很复杂,是物流方面的ERP软件。
先谢谢大家了!
-------------------------------------------
谢谢guo0399的回复。
JOB怎么做,能否具体点点?
一下接触ORACLE,确实有些头疼,可惜日子还得照常过,工作还得继续做,正在努力学习ORACLE中
begin
sys.dbms_job.submit(job => :jobnum,
what => 'youprocedure',
next_date => to_date( '14-11-2007 00:00:01 ', 'dd-mm-yyyy hh24:mi:ss '),--执行时间
interval => 'sysdate+1 ');
commit;
end;
/
begin
sys.dbms_job.submit(job => :jobnum,
what => 'youprocedure',
next_date => to_date( '14-11-2007 00:00:01 ', 'dd-mm-yyyy hh24:mi:ss '),--执行时间
interval => 'sysdate+1 ');
commit;
end;
/
就是你用C#读子部门的表记录,吧这些记录插入总公司的oracle表中。
再不行就先读子部门的表记录每张表生成txt文件,再弄个程序读那些txt文件,插入oracle
Variable jobnum Number;
begin
sys.dbms_job.submit(job => :jobnum,
what => 'youprocedure ',
next_date => to_date( '14-11-2007 00:00:01 ', 'dd-mm-yyyy hh24:mi:ss '),--执行时间
interval => 'sysdate+1 ');
commit;
end;
/
其实JOB也就是SQL SERVER里面的调度,这个我早知道了,但是不清楚怎么写“procedure”。to HelloWorld_001:
用程序写不是很现实啊,我怎么知道哪些数据需要更新呢?没可能对比所有数据记录的,数量量非常庞大,现在做个备份都得5个小时。
没错哦,无论JOB或程序,其实原理都一样,都得用到时间戳,但是非常可惜的是A1上面的数据库并没有这个东西。如果硬要加上去的话,就得修改原有数据库和软件,这个成本可就大了,不可行,呵呵。还有没有其他办法呢,说说原理也行啊。
这几天找了好多资料,都是高级复制的,终于写出来了自己的snapshot脚本,在数据库里测试一个表成功,挺开心!
可是一想起A1数据库里面有好几百张表都得做快照时,就痛苦了,好郁闷。
http://www.datsync.net/down.asp?file=download/dat演示.rar&name=数据库同步演示软件下载:
http://www.ahjoe.com/prodnet.asp文件同步教程:
http://www.ahjoe.com/netdoc.htm