`
sric08
  • 浏览: 64408 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle数据同步

阅读更多

首先创建一个 dblink(database link)

 

create database link kings   --dblink 的名字,同步的时候要用到这个名字,可以随便取
connect to kings   --连接到那个数据库的用户名
identified by kings123  -- 连接那个数据库的密码
using '(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.75)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )';
-- 上边的 host 是连接数据库的 IP ,port 是端口号,要没改过的话就是 1521

 

有了 kings(dblink),我们就可以实现数据同步的工作了,通过触发器来实现
先说下场景,假如我们现在要做个同步的功能,在操作表as_emp的时候
1、添加:同样往 192.168.1.75 那个数据库里的empInfo添加一条记录(通过 empInfo@kings  表名@dblink 的方式访问)
2、更新:在更新as_emp.emp_code的时候,把这个字段的数据更新到empInfo.pass里去(当然你也可以做删除的操作...我这个业务里没这个需求)

create or replace trigger syn_as_Emp
after insert or update
On as_emp
 for each row
  Begin
    case
     when  inserting then
          insert into empInfo@kings(userid,pass) values(:new.emp_code,:new.emp_name);
     when  updating then
           update empInfo@kings set pass=:new.emp_name where  userid=:new.emp_code;
     end case;
End;

 后边我突然想到了个问题,创建dblink的代码应该要写到触发器里,先得确保有了触发器才能执行同步的操作呀,要不然数据库每次启动以后,连接就断了的!
我按照程序的思想想写个 try{创建dblink}catch()... 可怎么都写不了,突然看到有个地方说删除 dblink的命令是 drop database link dblink名字
我就觉得自己想太多了,用到 drop 的地方,就像表啊什么的,已经写到库里的,是肯定存在的,于是我尝试着重启数据库,果然,只要 dblink 没被删除,再数据库起来的时候 dblink 就存在了

 

 

 

 

 


 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics