oracle数据同步

转自:

http://sric08.iteye.com/blog/787939

 

首先创建一个 dblink(database link)

 

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

 

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

Sql代码   收藏代码
  1. create or replace trigger syn_as_Emp  
  2. after insert or update  
  3. On as_emp  
  4.  for each row  
  5.   Begin  
  6.     case  
  7.      when  inserting then  
  8.           insert into empInfo@kings(userid,pass) values(:new.emp_code,:new.emp_name);  
  9.      when  updating then  
  10.            update empInfo@kings set pass=:new.emp_name where  userid=:new.emp_code;  
  11.      end case;  
  12. End;  

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

你可能感兴趣的:(oracle)