公司有好几个系统,数据库类型是ORACLE8I的,以后可能还会有别的系统(也许是SQL SERVER 2K),从这些系统出的报表是相互独立的,杂乱无章,也有很多重复的地方,不方便领导查看。现在领导要求在总公司建个企业级的数据仓库(用ORACLE),把底下子部门的不同数据库给同步到总公司来,然后在总公司的数据服务器里出报表。
  假设总公司数据仓库为SERVER,部门1的数据库为A1,部门2的数据库为A2。
  我就想每天晚上半夜的时候,从A1和A2自动的把每天发生的业务数据同步给SERVER,然后根据SERVER上的数据用C#做报表,但我一直都是学SQL SERVER的,对ORACLE不怎么懂,所以请教大家:如何把A1和A2的数据同步给SERVER呢?
  不要求做时时同步,只要一天同步一次就好了。不能对A1数据库做太大的改动,一个是业务量很大,数据服务器负载高,一个是那个系统很复杂,是物流方面的ERP软件。
  先谢谢大家了!

解决方案 »

  1.   

    guo0399 :Oracle的Job+DBLink就可以解决了
    -------------------------------------------
    谢谢guo0399的回复。
    JOB怎么做,能否具体点点?
      

  2.   

    我知道ORACLE里面有很多的数据复制的办法,只是想找个适合自己情况的,请指个方向,我好去翻资料。
    一下接触ORACLE,确实有些头疼,可惜日子还得照常过,工作还得继续做,正在努力学习ORACLE中
      

  3.   

    JOb就像定时器,如果有PL\SQL develop 工具,直接在菜单列表就有了,具体的创建查看dbms_job的用法,如果有PL工具上面可以界面操作的,需要指明一点是what代表执行的过程,interval代表间隔如sysdate+1就代表一天sysdate+1/24代表一个小时
      

  4.   

    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; 
    /
      

  5.   

    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; 
    /
      

  6.   

    可以用程序来做,每晚把你需要的表跑到oracle里面,直接统计就可以了。
    就是你用C#读子部门的表记录,吧这些记录插入总公司的oracle表中。
    再不行就先读子部门的表记录每张表生成txt文件,再弄个程序读那些txt文件,插入oracle
      

  7.   

       JOb就像定时器,如果有PL\SQL   develop   工具,直接在菜单列表就有了,具体的创建查看dbms_job的用法,如果有PL工具上面可以界面操作的,需要指明一点是what代表执行的过程,interval代表间隔如sysdate+1就代表一天sysdate+1/24代表一个小时
       
       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;   

      

  8.   

    to guo0399,diaowf :
    其实JOB也就是SQL SERVER里面的调度,这个我早知道了,但是不清楚怎么写“procedure”。to HelloWorld_001:
    用程序写不是很现实啊,我怎么知道哪些数据需要更新呢?没可能对比所有数据记录的,数量量非常庞大,现在做个备份都得5个小时。
      

  9.   

    就算你用job 写过程 你没有时间戳还是要每次同步所有的数据 还是很慢
      

  10.   

    to ptpa:
    没错哦,无论JOB或程序,其实原理都一样,都得用到时间戳,但是非常可惜的是A1上面的数据库并没有这个东西。如果硬要加上去的话,就得修改原有数据库和软件,这个成本可就大了,不可行,呵呵。还有没有其他办法呢,说说原理也行啊。
      

  11.   

    to tjxjj:
    这几天找了好多资料,都是高级复制的,终于写出来了自己的snapshot脚本,在数据库里测试一个表成功,挺开心!
    可是一想起A1数据库里面有好几百张表都得做快照时,就痛苦了,好郁闷。
      

  12.   

    呵呵,10G oracle的话,试试oracle stream replication8i的话,我能想到的就是物化视图了
      

  13.   

    通用文件和数据库同步软件《同步专家网络版》数据库同步演示文件:
    http://www.datsync.net/down.asp?file=download/dat演示.rar&name=数据库同步演示软件下载:
    http://www.ahjoe.com/prodnet.asp文件同步教程:
    http://www.ahjoe.com/netdoc.htm