oracle的数据同步
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,而且别人不同意在自己的表上做任何的操作).还有一种更简单的方法就是在旧表上使用触发器,这样就更简单同步数据了,不过前提要别人同意。