若果只是某几张表, 建议使用物理视图吧。 因为已经存在了DB_LINK 在TB上建立个物理视图 步骤: 建立TA,TB的DB_LINK 在源数据库上,创建要同步表的快照日志 Create snapshot log on Ta.tablename 在目标数据库上创建快照(被同步(源)数据库服务必须启动) Create snapshot sn_user as select * from user@dblink_TA Alter snapshot sn_TA.tablename refresh fast Start with sysdate next sysdate+30/24*60*60; --oracle自动在当前时间立即进行第一次快速刷新,以后每隔30秒快速刷新一次 现在实现了TA某表到TB的,然后 将sn_TA.tablename建个触发,如 CREATE OR REPLACE TRIGGER BST114.TRI_USER_AFR AFTER DELETE OR INSERT OR UPDATE ON BST114.SN_user REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW declare tmp_id number(10):=-1; flag number(3):=0; begin dbms_output.put_line('begin'); if inserting then for p in(select id from user where id=:new.id) loop tmp_id:=p.id; end loop; dbms_output.put_line(tmp_id | |'===------------'); if (tmp_id=-1) then insert into user(id,name,age) values(:new.id,:new.name,:new.age); end if; end if; if updating then dbms_output.put_line('updated'); for p in(select name,age from user where id=:old.id) loop if (p.name!=:new.name) or (p.age!=:new.age) then update user set name=:new.name,age=:new.age where id=:old.id; end if; end loop; end if; if deleting then dbms_output.put_line('deleted'); delete from user where id=:old.id; end if; dbms_output.put_line('end'); end TRI_USER_AFR; 这样就实现了TB中物理视图到 目的表的数据传输。
触发器同步表
最新推荐文章于 2022-12-28 19:06:29 发布