oracle 一种简单的数据同步方式

         在两个oracle数据库之间数据同步是一个常见的需求,比如同一个开发商开发了hr系统和其他各类业务系统,而各类业务系统如需共享hr人员信息与及组织机构等基本信息,可采用数据同步(当然不同的开发商的系统之间或者大型系统也可以开发webservice接口。基于spring框架还可以使用httpinvoker做接口)

       数据同步的原理是:在原库创建DBLINK,连接到新库。同时在原库创建触发器,一旦原库中的需要同步的数据表发生变化,可按触发器的逻辑将数据同步到新库中。

        步骤如下(见代码):

        1、原库中创建DBLINK

      

create public database link TestDB  connect to username identified by password
   using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 新库ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME =服务名)
)
)'; 

 

(注意:添加public其他用户也可以使用该dblink

  附:

  查找dblink:

  select * from dba_db_links 

  删除dblink 

  drop public database link TestDB

 

    2、数据跨库更新或叫数据初始化(以USER表为例)

       查找列名:

      select  wmsys.wm_concat(COLUMN_NAME) from user_tab_columns@TestDB where table_name='USER';

      将列名复制粘贴到要更新的列

      跨库插入:

      insert into USER@TestDB (列名1,列名2) select 列名1,列名2 from USER

 

    3、创建触发器,同步更新数据

create or replace trigger Tri_User
  after insert or update or delete on user_info  
  for each row
declare
  -- local variables here
begin
  if inserting then  
    insert into USER@TestDB (ID,EMPLEVEL,BIRTH,EMAIL,……)
    values(:new.ID,:new.LEADERLEVEL,:new.BIRTH,:new.EMAIL,……);
  elsif updating then 
     update USER@TestDB set ID=:new.ID,EMPLEVEL=:new.LEADERLEVEL,BIRTH=:new.BIRTH,EMAIL=:new.EMAIL, …… where ID=:old.ID;
  elsif deleting then
     delete from USER@TestDB where ID=:old.ID;
  end if;
end Tri_User;

    大家可根据需要来书写自己的触发器,以上的步骤就完成了一个简单的oracle数据同步。

     

 

 

你可能感兴趣的:(oracle跨库更新)