我这里oracle有一张表,有1万5的数据量,要把这里的数据同步到sql server那里,因为是用户表,同步的时间间隔最好越短越好,怎样设置时间间隔,又不会影响系统的正常运行?我本来是设置一天,同步一次。

解决方案 »

  1.   

    Oracle创建这么一张表,表字段包括TableName(存储要同步的表名)、KeyName(要同步的表的主键)、KeyValue(要同步的表的主键值)、OperateType(对记录的操作类型,比如3:删除;1:插入)、Status(标识是否需要同步);在要同步的表创建触发器,如:ALTER TRIGGER [Trg_CB_ChaoBiaoSJ] 
     ON  [dbo].[CB_ChaoBiaoSJ]
      AFTER INSERT,DELETE,UPDATE
     AS 
     BEGIN
      SET NOCOUNT ON;
      IF EXISTS(select * from deleted)
     begin 
       insert into LocalSyncTable (tablename,keyname,keyvalue,OperateType) select 'CB_ChaoBiaoSJ','I_ChaoBiaoID',I_ChaoBiaoID,3  from deleted;
      end  
     IF EXISTS(select * from inserted)
      BEGIN
       insert into LocalSyncTable (tablename,keyname,keyvalue,OperateType) select  'CB_ChaoBiaoSJ','I_ChaoBiaoID',I_ChaoBiaoID,1   from inserted;
      END 
     END 每一次对该表所作的操作,都会同步触发插入LocalSyncTable表一条记录。要同步的数据,就来自LocalSyncTable表,进行数据同步的时候,记得优化一下(不是所有这张表的数据都要同步的,比如对表TableA某一记录行的不同字段做3次修改操作,那么会在LocalSyncTable表插入6条记录,有用的就是最后一条记录,优化掉其它5条记录,然后再同步);ORACLE和SQL SERVER同步数据的逻辑,无非就是插入、修改。才15000条记录,同步时间不会超过20秒钟。
      

  2.   

    1、Oracle创建这么一张表(LocalSyncTable),表字段包括ID(自增长,用于优化数据)、TableName(要同步的表名)、KeyName(表主键)、KeyValue(主键值)、OperateType(操作类型,如3:删除,1:插入),Status(标识是否需要同步,用于优化同步数据)。
    2、然后在要同步的表TableA上创建触发器ALTER TRIGGER [Trg_TableA] 
     ON  [dbo].[TableA]
      AFTER INSERT,DELETE,UPDATE
     AS 
     BEGIN
      SET NOCOUNT ON;
      IF EXISTS(select * from deleted)
     begin 
       insert into LocalSyncTable (tablename,keyname,keyvalue,OperateType) select 'CB_ChaoBiaoSJ','I_ChaoBiaoID',I_ChaoBiaoID,3  from deleted;
      end  
     IF EXISTS(select * from inserted)
      BEGIN
       insert into LocalSyncTable (tablename,keyname,keyvalue,OperateType) select  'CB_ChaoBiaoSJ','I_ChaoBiaoID',I_ChaoBiaoID,1   from inserted;
      END 
     END 3、表LocalSyncTable中的记录,即是要同步的记录,该表的记录并非所有都要同步(比如对表TableA中某一记录进行3次update操作,触发器会插入LocalSyncTable3条deleted数据3条inserted数据,对该表的操作的这6条记录就最后一条是有用记录,其它5条要优化掉。然后执行同步逻辑,无非就是插入、删除等操作。
      

  3.   

    1、Oracle创建这么一张表(LocalSyncTable),表字段包括ID(自增长,用于优化数据)、TableName(要同步的表名)、KeyName(表主键)、KeyValue(主键值)、OperateType(操作类型,如3:删除,1:插入),Status(标识是否需要同步,用于优化同步数据)。
    2、然后在要同步的表TableA上创建触发器ALTER TRIGGER [Trg_TableA] 
     ON  [dbo].[TableA]
      AFTER INSERT,DELETE,UPDATE
     AS 
     BEGIN
      SET NOCOUNT ON;
      IF EXISTS(select * from deleted)
     begin 
       insert into LocalSyncTable (tablename,keyname,keyvalue,OperateType) select 'CB_ChaoBiaoSJ','I_ChaoBiaoID',I_ChaoBiaoID,3  from deleted;
      end  
     IF EXISTS(select * from inserted)
      BEGIN
       insert into LocalSyncTable (tablename,keyname,keyvalue,OperateType) select  'CB_ChaoBiaoSJ','I_ChaoBiaoID',I_ChaoBiaoID,1   from inserted;
      END 
     END 3、表LocalSyncTable中的记录,即是要同步的记录,该表的记录并非所有都要同步(比如对表TableA中某一记录进行3次update操作,触发器会插入LocalSyncTable3条deleted数据3条inserted数据,对该表的操作的这6条记录就最后一条是有用记录,其它5条要优化掉。然后执行同步逻辑,无非就是插入、删除等操作。