远程数据库有一个表 a(a,b,c,d)
本地数据库有一个表 atmp(a,b,c,d)现在在本地创建一个触发器
create or replace trigger trg_insert_atmp
after insert on a@yuanchengDB
for each row declare
begin
insert into atmp ··········;
end trg_insert_atmp;
如何当远程a表更新时候,会自动将a表更新的行复制插入到本地的atmp中呢!(表里的字段都是没特点的)另外这个表每天晚上2点更新1万左右,用触发器好还是用job好呢!
本地数据库有一个表 atmp(a,b,c,d)现在在本地创建一个触发器
create or replace trigger trg_insert_atmp
after insert on a@yuanchengDB
for each row declare
begin
insert into atmp ··········;
end trg_insert_atmp;
如何当远程a表更新时候,会自动将a表更新的行复制插入到本地的atmp中呢!(表里的字段都是没特点的)另外这个表每天晚上2点更新1万左右,用触发器好还是用job好呢!
在远程库配一个“本地”的dblink
用物化视图比较方便Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。 物化视图可以查询表,视图和其它的物化视图。
通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。
对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。
对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。
在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。... ...具体操作,参考blog
物化视图
http://blog.csdn.net/tianlesoftware/archive/2009/10/23/4713553.aspx
否则用job好。
这个才是主要的··
create atmp (rid rowid, a xx, b xx, c xx);
同步的时候根据rowid就可以。
update atmp t
set (a,b,c,d) = (select a,b,c,d from a@dblink where rowid=t.rid)
where exists (select 1 from a@dblink where rowid=t.rid);
insert into atmp (rid, a,b,c,d)
select rowid, a,b,c,d
from a@dblink
where not exists (select 1 from atmp where rid = a.rowid);这种方式只要在远端库的a表没有重建就不会有问题,如果a表重建,那atmp就得完全刷新。在没有主键的情况下这是没有办法的事情。