现在有两个数据库服务器A 和 B .我现在要将A的数据同步到B中。方法如下:
1、我在A数据库建立了一个Sync_Table,在A数据库的所有表上建立了触发器,如果数据有增、改、删的操作就触发到Sync_Table表中。
2、我做了一个Windows服务每隔10秒钟扫描一次Sync_Table表看是否有无数据同步,如果有则连接B数据库把数据同步过去。现在的问题是我不想用Windows服务去不停的扫描Sync_Table表(因为这个太耗资源,而且觉得挺笨的)。我想是有什么办法让数据库(或其他方法)去通知我的Windows服务有数据需要同步,你来取吧!

解决方案 »

  1.   

    1、物化视图
    2、dataguard
    3、rman增量导入
    4、找开发商取出每天的增量数据导入备库。
    5、每天全库的导出导入当然了,最后一种方法完全不用考虑(虽然操作过程简单,但数据量大的话相当耗时,而且实时性就没办法咯),(方案四是要收费滴)
    如果你的备库只需要进行查询操作,那么以上方案均可考虑(注意用方案二的话数据库版本只能是oracle11以上,这样备库才能open);如果你的备库还需要进行修改等的其他操作的话那么建议采用方案一或方案四。
     以上方案实时性最好的是方案二其次是方案一。其它几个方案实时性较差。
      

  2.   

    1、物化视图我看了一下主要是用于提高查询性能。对我没什么太大帮助。
    2、dataguard到是非常接近。但是对于我的环境最也不能实现。
    3、4、5还不如我的方法还有最重要的一点。以上的同步只是基于数据A和数据库能通讯的情况下,但是实际情况是,这两台服务器中间有隔离设备,只能通过Windows服务 + 网络操作来实现。还有就是我现在同步没有问题,只是想解决一个问题,就是能不能不用这种大多数情况做无用功的方式(定时扫描).而是能让数据库去通知Windows服务(不管是消息还是什么)。
      

  3.   

    我觉得你可以采用数据链接的方式,在A库上建立一个数据库链接到B库,直接使用触发器来同步数据,当然,从你的方法来看,数据量应该不是很大,不然触发器就会有很忙。通过数据库链接就可以做到一步到位,原来我做两个库的接口时就是使用这个方法,非常有效。当然,ORACLE有一种通知机制来通知给连接上来的应用,不过需要写代码来完成,本为没有用过,只是看了相关资料,你可以查查。
      

  4.   


    通过创建DBLINK使得B库联接A库,然后在B库上创建A库的物化视图。
    然后每天定点使用JOB将物化视图的最新内容存入B库里。
    B库日常查询使用的其实是A库的内容。