oracle的数据同步

时间:2024-03-03 16:42:52

1、首先写一个存储过程。

2、然后新建一个执行任务(jobs)调用存储过程就可以同步数据了。

3、如何同步数据

  (1) 首先第一步:同步数据(把旧表的新增的数据导入到新表里面,注意这个sql语句只是同步了新增(用户名)的数据,并没有同步更改过的最新的数据(例如age修改之后并没有同步过去,新表的age还是原来的数据)) 

INSERT INTO NEW_TABLE
  SELECT USERNAME,PASSWORD,AGE
    FROM OLD_TABLE b
   WHERE b.USERNAME not in (select USERNAME from NEW_TABLE)

  如果想取age修改过的最新数据,可以加一个age的判断条件,这样就能去最新的age的数据

INSERT INTO NEW_TABLE
  SELECT USERNAME,PASSWORD,AGE
    FROM OLD_TABLE b
   WHERE b.USERNAME not in (select USERNAME from NEW_TABLE)  
      or b.age not in
         (select age from NEW_TABLE);

  如果还有其他的数据,同理跟上面一样即可。

  (2) 第二步就是去重,把用户名重复的数据去掉。

delete from NEW_TABLE a
 where a.rowid != (select max(b.rowid)
                     from NEW_TABLE b
                    where a.USERNAME = b.USERNAME);

  (3) 这样就可以去到最新的数据了。

 

以上的方法只是针对我现在的表(没有主键)进行描述。具体的表结构可能不太适用。

1、如果表存在主键,即用户名是唯一的话,那个显然是不能这样做的。因为唯一的话就没有去重的必要了。

2、如果表存在好多字段的话,也不太适用。因为同步的时候使用太多的not in 语句也不好

以上是新表同步旧表的数据的一种方式,并没有在旧表做任何的操作(使用这种方式的一个原因是要同步另一个别人的数据表,只提供了一个dblink,而且别人不同意在自己的表上做任何的操作).还有一种更简单的方法就是在旧表上使用触发器,这样就更简单同步数据了,不过前提要别人同意。