oracle dblink+trigger触发器实现两个库数据同步

库A数据迁移到新库B。

dblink和trigger都在有数据的库中创建:

create database link "dblink名称"
connect to "目标库登录名" identified by "目标库密码" 
using '(DESCRIPTION = 
(ADDRESS_LIST =  
(ADDRESS = 
(PROTOCOL = TCP)
(HOST = "库ip")
(PORT = "库端口")) ) 
(CONNECT_DATA =  (SERVICE_NAME = "服务名") )  )';

--删除dblink:drop database link 名称; 需要在创建的库执行

创建当前库的表与之相对应的映射表实现映射方式①

--drop trigger "删除触发器名称"  --删除触发器

CREATE
    TRIGGER "触发器名称" 
    BEFORE INSERT OR UPDATE OR DELETE 
    ON "当前库要同步的表名"
 FOR EACH ROW
   declare
 pragma autonomous_transaction; --指定自由事务处理 解决触发器中不能提交事务问题 
 BEGIN
   case
 when inserting then
   insert into "目标库需要同步的表"@"dblink名称"
   (
    id,
    accountno,
    officeid
       ) 
   values
   (
    :new.id,
    :new.accountno,
    :new.officeid
    );
  when updating then
    update "目标库需要同步的表"@"dblink名称"
    set 
      accountno    =:new.accountno,
      officeid     =:new.officeid
where id=:new.id;
    when deleting then
    delete "目标库需要同步的表"@"dblink名称" 
    where id =:old.id;
   end case;
   commit;
END;

创建当前库的表与之相对应的映射表实现映射方式②

CREATE OR REPLACE TRIGGER "触发器名称"
  AFTER INSERT OR UPDATE OR DELETE ON "当前库要同步的表名"
  FOR EACH ROW
declare
  pragma autonomous_transaction; 
BEGIN
  IF INSERTING THEN
    insert into "目标库需要同步的表"@"dblink名称"
      (
        id,
        officeid,
        currencyid
       )
    values
      (
        :new.id,
        :new.officeid,
        :new.currencyid
       );
  ELSIF UPDATING THEN
    update "目标库需要同步的表"@"dblink名称"
       set 
         officeid            = :new.officeid,
         currencyid          = :new.currencyid
     where id = :new.ID;
  ELSIF DELETING THEN
    delete from "目标库需要同步的表"@"dblink名称" where id = :old.id;
  END IF;
  commit;
END;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值