解决方案 »

  1.   

    如果是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。
      

  2.   

    数据量不大就导入导出实现吧,数据量大用database LINK,然后在数据库一上建立同义词,这样就看不出来什么问题了
      

  3.   

    方法很多,看你需求,中间加一层,类似分布式数据库,如果只是简单的同步,搞个dblink 写个脚本 每天定时更新一下
      

  4.   

    之前写过一个脚本,就是定时做导出expdp,然后复制到另一台服务器上做导入impdp
      

  5.   


    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,
                 (CASE WHEN B.SHKZG='X' THEN -1*B.LFIMG ELSE B.LFIMG END) LFIMG,
                 B.VGBEL AS CK_VGBEL,B.VGPOS AS CK_VGPOS,B.PSTYV,B.BWART,
                 B.SHKZG,B.KNTTP,
                 (CASE WHEN B.KNTTP='M' THEN B.VGBEL ELSE '' END) MAT_KDAUF,--CASE WHEN 预处理
                 (CASE WHEN B.KNTTP='M' THEN B.VGPOS ELSE '' END) MAT_KDPOS
            FROM SAPSR3.LIKP A 
                 INNER JOIN SAPSR3.LIPS B ON A.MANDT = B.MANDT AND A.VBELN = B.VBELN
                 INNER JOIN SAPSR3.VBAP C ON B.MANDT = C.MANDT AND B.VGBEL = C.VBELN AND B.VGPOS = C.POSNR
           WHERE ( B.BWART IN ('601','602','633','634','643','644','657','658','673','674') 
                OR B.PSTYV IN ('TAQ','ZAQ1','ZAQ2','ZAQ3','ZAQ4') )
            AND  B.UEPOS = '000000'    
            AND  A.WADAT_IST <> '00000000'      UNION
          SELECT A.VBELN,B.POSNR,A.VKORG,A.KUNNR,A.NETWR,
                 A.KUNNR AS KUNAG,A.ERDAT,
                 SUBSTR(A.ERDAT,1,4) JLFGJA,
                 SUBSTR(A.ERDAT,5,2) JLFMON,
                 B.MATNR,B.ARKTX,B.WERKS,B.VRKME,
                 (CASE WHEN B.SHKZG='X' THEN -1*B.ZMENG ELSE B.ZMENG END) LFIMG,
                 B.VBELN AS CK_VGBEL,B.POSNR AS CK_VGPOS,B.PSTYV,'' AS BWART,
                 B.SHKZG,B.KNTTP,
                 (CASE WHEN B.KNTTP='M' THEN B.VBELN ELSE '' END) MAT_KDAUF,
                 (CASE WHEN B.KNTTP='M' THEN B.POSNR ELSE '' END) MAT_KDPOS
            FROM SAPSR3.VBAK A --522条数据
                 INNER JOIN SAPSR3.VBAP B ON A.MANDT = B.MANDT AND A.VBELN = B.VBELN
           WHERE B.UEPOS = '000000'
            AND  A.AUART IN ('ZDR','ZRD','ZCR','ZDR1')    )JHD  LEFT JOIN
      (
      
      SELECT B.VGBEL,B.VGPOS,
                  COUNT(*) FKPCS,
                  SUM(CASE WHEN TRIM(A.SFAKN)IS NOT NULL THEN -1*B.FKIMG ELSE B.FKIMG END) FKIMG,
                  SUM(CASE WHEN A.RFBSK<>'C' THEN 0 ELSE (CASE WHEN TRIM(A.SFAKN)IS NOT NULL THEN -1*B.WAVWR ELSE B.WAVWR END)END) WAVWR,
                  MAX(LFGJA)LFGJA,
                  MAX(LFMON)LFMON          FROM (
    SELECT SUBSTR(FKDAT,1,4) LFGJA,SUBSTR(FKDAT,5,2) LFMON,VBELN,MANDT,SFAKN,RFBSK  FROM SAPSR3.VBRK) A 
              LEFT JOIN 
    SAPSR3.VBRP B ON A.MANDT = B.MANDT AND A.VBELN = B.VBELN
             WHERE A.MANDT='800'GROUP BY B.VGBEL,B.VGPOS
      )KPD
      ON KPD.VGBEL = JHD.VBELN AND KPD.VGPOS = JHD.POSNR
      LEFT JOIN WLB
      ON JHD.MATNR = WLB.MATNR AND JHD.WERKS = WLB.BWKEY AND JHD.JLFGJA = WLB.LFGJA AND JHD.JLFMON = WLB.LFMON
      AND (JHD.KNTTP <> 'M' OR (WLB.VBELN = JHD.MAT_KDAUF AND WLB.POSNR = JHD.MAT_KDPOS)) 
    ),T AS(
    SELECT VBELN,POSNR,MIN(VKORG) VKORG,MIN(KUNNR) KUNNR,MIN(KUNAG) KUNAG,
              MIN(JLFGJA) JLFGJA,MIN(JLFMON) JLFMON,MIN(WADAT_IST) WADAT_IST,MIN(MATNR) MATNR,
              MIN(ARKTX) ARKTX,MIN(WERKS) WERKS,MIN(VRKME) VRKME,MIN(NETWR) NETWR,MIN(CK_VGBEL) CK_VGBEL,
              MIN(CK_VGPOS) CK_VGPOS,MIN(PSTYV) PSTYV,MIN(BWART) BWART,MIN(SHKZG) SHKZG,MIN(KNTTP) KNTTP,
              MIN(MAT_KDAUF) MAT_KDAUF,MIN(MAT_KDPOS) MAT_KDPOS,
              MIN(WLFGJA)WLFGJA,MIN(WLFMON)WLFMON,MIN(STPRS)STPRS,MIN(VERPR)VERPR,MIN(PEINH)PEINH,
              MIN(WLBZDJ)WLBZDJ,MIN(WLSJDJ)WLSJDJ,MIN(TVBELN)TVBELN,MIN(TPOSNR)TPOSNR,
              LAG(QMBZDJ,1,(CASE WHEN LFIMG <> 0 THEN NETWR/LFIMG ELSE 0 END)) OVER(PARTITION BY VBELN ORDER BY POSNR) AS QCBZJG,
              LAG(QMSJDJ,1,(CASE WHEN LFIMG <> 0 THEN NETWR/LFIMG ELSE 0 END)) OVER(PARTITION BY VBELN ORDER BY POSNR) AS QCSJJG,
              QMBZDJ,QMSJDJ,
              MIN(FHBZCB)FHBZCB,
              MIN(FHSJCB)FHSJCB,
              MIN(FHCY)FHCY,
              MIN(VGBEL)VGBEL,MIN(VGPOS)VGPOS,MIN(LFGJA)LFGJA,MIN(LFMON)LFMON,MIN(WAVWR)WAVWR,
              MIN(KPBZCB)KPBZCB,
              MIN(KPSJCB)KPSJCB,
              MIN(KPBZCY)KPBZCY,
              MIN(KPSJCY)KPSJCY,
              MIN(FKPCS) FKPCS,
           LFIMG,FKIMG,
           sum(LFIMG) over (partition by VBELN order by POSNR  rows between unbounded preceding and current row)    
           -
           sum(FKIMG) over (partition by VBELN order by POSNR  rows between unbounded preceding and current row) QMSL
    FROM JHB GROUP BY VBELN,POSNR,LFIMG,FKIMG,QMBZDJ,QMSJDJ,NETWR)SELECT T.VBELN,T.POSNR,T.VKORG,T.JLFGJA,T.JLFMON,T.MATNR,
        T.ARKTX,T.WERKS,T.KNTTP,T.FKPCS,T.PSTYV,
        T.QCBZJG,T.QCSJJG,T.LFIMG,T.FHBZCB,T.FHSJCB,T.FHCY,
        T.FKIMG,T.KPBZCB,T.KPSJCB,T.WAVWR,T.KPBZCY,T.KPSJCY,T.LFGJA,T.LFMON,
        T.QMSL,T.QMBZDJ,T.QMSJDJ
     FROM T