oracle 把数据库中的数据更新到另一个数据库

黑夜中的一点慰藉 2014-05-26 10:56:38
现在有两台服务器,上面有两个独立运行的oracle,其中orc1上有的表,orc2上都有,但orc2上有的表orc1上不一定有。
现在我想定时把orc1上跑了一天的数据更新到orc2上去(每天更新一次),就是保证orc1和orc2上相同表的数据一致。需要每天来更新,想问问具体怎么整,本人菜鸟一枚,对oracle了解有限,希望大神给点意见
...全文
2083 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jessonkuaile 2015-05-29
  • 打赏
  • 举报
回复
楼主问题怎么解决的 求指点
liujie2300 2015-05-27
  • 打赏
  • 举报
回复
ogg可以完美解决你的问题
peterjulia 2014-06-03
  • 打赏
  • 举报
回复
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
tomshenhao 2014-05-28
  • 打赏
  • 举报
回复
之前写过一个脚本,就是定时做导出expdp,然后复制到另一台服务器上做导入impdp
magical_dragon 2014-05-27
  • 打赏
  • 举报
回复
写一个接口 给接口定义一个触发时间 每天自动更新
liujie2300 2014-05-27
  • 打赏
  • 举报
回复
方法很多,看你需求,中间加一层,类似分布式数据库,如果只是简单的同步,搞个dblink 写个脚本 每天定时更新一下
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
前面忘了,有一张表的数据还挺大的,好像有几百万吧
yundeweilai 2014-05-26
  • 打赏
  • 举报
回复
数据量不大就导入导出实现吧,数据量大用database LINK,然后在数据库一上建立同义词,这样就看不出来什么问题了
  • 打赏
  • 举报
回复
如果是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。
xuehong520 2014-05-26
  • 打赏
  • 举报
回复
方法有很多 1 建作业把更新的数据一天同步一次。 2 数据库同步技术(这个比较复杂) 3 建数据库链接,实现表之间的同步。
  • 打赏
  • 举报
回复

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧