当前位置: 代码迷 >> Oracle管理 >> oracle 把数据库中的数据更新到另一个数据库解决思路
  详细解决方案

oracle 把数据库中的数据更新到另一个数据库解决思路

热度:52   发布时间:2016-04-24 04:18:13.0
oracle 把数据库中的数据更新到另一个数据库
现在有两台服务器,上面有两个独立运行的oracle,其中orc1上有的表,orc2上都有,但orc2上有的表orc1上不一定有。
现在我想定时把orc1上跑了一天的数据更新到orc2上去(每天更新一次),就是保证orc1和orc2上相同表的数据一致。需要每天来更新,想问问具体怎么整,本人菜鸟一枚,对oracle了解有限,希望大神给点意见
------解决方案--------------------
如果是mysql很好配置两个数据库之间数据的同步,可以搜“主-主备份,主从备份”,施主当前情况属于“主-从备份”。oracle的话听说过“ogg”吗,是oracle开发的一款oracle数据库之间数据同步工具,数据同步实时性很高,但该工具是要收费的,如果你两个数据库之间数据同步实时性不是很高,这就好办了!
如下方法:
1、可以写oracle脚本,从orcl1中将数据备份出来,然后将备份出来的数据导入orcl2中。
2、 程序员:自己用jdbc写一个程序,用Timer类,会定时执行的,从orcl1中将数据查出来,插入orcl2中。如果数据量特别大,oracle数据库支持批量写入,用批量写入功能即可。
3、用DBLINK(oracle一个链接其他oracle库功能),首先在orcl1中创建一个dblink,然后写存储过程,在存储过程中用dblink通道将数据倒过去。
4、ogg方式。
考虑到施主的情况,推荐使用2、3。

------解决方案--------------------

WITH WLB AS(

SELECT MATNR,BWKEY,'' AS VBELN,'' AS POSNR,
         LFGJA,LFMON,VERPR,STPRS,PEINH,
        VERPR*1.0/PEINH AS WLSJDJ,STPRS*1.0/PEINH AS WLBZDJ 
    FROM SAPSR3.MBEW
   WHERE MANDT = '800'
    AND  PEINH <> 0


  UNION



  SELECT MATNR,BWKEY,'' AS VBELN,'' AS POSNR,
         LFGJA,LFMON,VERPR,STPRS,PEINH,
        VERPR*1.0/PEINH AS WLSJDJ,STPRS*1.0/PEINH AS WLBZDJ 
    FROM SAPSR3.MBEWH
   WHERE MANDT = '800'
    AND  PEINH <> 0


  UNION


  SELECT MATNR,BWKEY,VBELN,POSNR,
         LFGJA,LFMON,VERPR,STPRS,PEINH,
        VERPR*1.0/PEINH AS WLSJDJ,STPRS*1.0/PEINH AS WLBZDJ 
    FROM SAPSR3.EBEW
   WHERE MANDT = '800' 
    AND  PEINH <> 0


  UNION


  SELECT MATNR,BWKEY,VBELN,POSNR,
         LFGJA,LFMON,VERPR,STPRS,PEINH,
        VERPR*1.0/PEINH AS WLSJDJ,STPRS*1.0/PEINH AS WLBZDJ 
    FROM SAPSR3.EBEWH
   WHERE MANDT = '800' 
    AND  PEINH <> 0



),
JHB AS(
SELECT JHD.VBELN,JHD.POSNR,JHD.VKORG,JHD.KUNNR,JHD.KUNAG,
          JHD.JLFGJA,JHD.JLFMON,JHD.WADAT_IST,JHD.MATNR,JHD.ARKTX,JHD.WERKS,JHD.VRKME,JHD.NETWR,JHD.LFIMG,JHD.CK_VGBEL,
          JHD.CK_VGPOS,JHD.PSTYV,JHD.BWART,JHD.SHKZG,JHD.KNTTP,JHD.MAT_KDAUF,JHD.MAT_KDPOS,
          WLB.LFGJA AS WLFGJA,WLB.LFMON AS WLFMON,WLB.STPRS,WLB.VERPR,WLB.PEINH,WLB.WLBZDJ,WLB.WLSJDJ,WLB.VBELN AS TVBELN,WLB.POSNR AS TPOSNR,
          (CASE WHEN JHD.LFIMG <> 0 THEN JHD.NETWR/JHD.LFIMG ELSE 0 END) AS QCBZJG,
          (CASE WHEN JHD.LFIMG <> 0 THEN JHD.NETWR/JHD.LFIMG ELSE 0 END) AS QCSJJG,
          (CASE WHEN JHD.VBELN <> JHD.CK_VGBEL THEN WLB.WLBZDJ ELSE (CASE WHEN JHD.LFIMG <> 0 THEN JHD.NETWR/JHD.LFIMG ELSE 0 END)END) AS QMBZDJ,
          (CASE WHEN JHD.VBELN <> JHD.CK_VGBEL THEN WLB.WLSJDJ ELSE (CASE WHEN JHD.LFIMG <> 0 THEN JHD.NETWR/JHD.LFIMG ELSE 0 END)END) AS QMSJDJ,
          JHD.LFIMG*WLB.WLBZDJ AS FHBZCB,
          JHD.LFIMG*WLB.WLSJDJ AS FHSJCB,
          JHD.LFIMG*WLB.WLSJDJ-JHD.LFIMG*WLB.WLBZDJ AS FHCY,
          KPD.VGBEL,KPD.VGPOS,KPD.LFGJA,
          KPD.LFMON,KPD.FKIMG,KPD.WAVWR,KPD.FKPCS,
          KPD.FKIMG*WLB.WLBZDJ AS KPBZCB,
          KPD.FKIMG*WLB.WLSJDJ AS KPSJCB,
          KPD.FKIMG*WLB.WLBZDJ-KPD.WAVWR AS KPBZCY,
          KPD.FKIMG*WLB.WLSJDJ-KPD.WAVWR AS KPSJCY
 FROM
  (
  
  
  SELECT A.VBELN,B.POSNR,A.VKORG,A.KUNNR,A.NETWR,
             A.KUNAG,A.WADAT_IST,
             SUBSTR(A.WADAT_IST,1,4) JLFGJA,
             SUBSTR(A.WADAT_IST,5,2) JLFMON,
             B.MATNR,B.ARKTX,B.WERKS,B.VRKME,
  相关解决方案