两个oracle数据库中表数据同步(DBLINK+TRIGGER)

数据库数据同步方式有很多,使用Logminer、GoldenGate、DataGurd等基于oracle日志方式的同步,或者使用dblink+trigger进行同步,也可以通过代码的job方式进行同步数据。
最近在做数据采集的一个系统,里面需要对少量表数据进行实时同步,考虑到实时性以及成本,这里采用了dblink+trigger。

我们这里对database_A和database_B进行操作,将database_A里面的表order表数据同步到database_B中。

1. 首先我们需要对两个oracle数据库建立连接

  • 使用管理员登录database_A,给用户rescue添加创建dblink和别名的权限
grant create database link to rescue;
grant create synonym to rescue;
  • 创建dblink(连接的是database_B,所以用户名、密码、host都是database_B的信息)
CREATE DATABASE LINK dblink_test 
 CONNECT TO watertest IDENTIFIED BY watertest
 USING '(DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST=192.168.1.20)(PORT = 1521)))
     (CONNECT_DATA = (SERVICE_NAME = orcl)
   )
 )';

如果创建成功会提示:Database link created

  • 测试是否dblink创建是否成功(在database_A中查询database_B中的数据)
select * from code@dblink_test;
  • 创建并测试别名
create public synonym order_A for order@dblink_test; 
select * from order_A;

2. 在database_A中添加触发器

create or replace trigger test_trigger 
before INSERT ON order FOR EACH ROW 
BEGIN
    IF inserting THEN
        insert into order_A(order_id, goods_id, price) values (:NEW.ORDER_ID, :NEW.GOODS_ID, :NEW.PRICE); 
    END IF;
END;

3. 在database_A的order表中添加数据,查看database_B是否有同步数据

insert into order(order_id, goods_id, price) values('1', '1', 34);

你可能感兴趣的:(Oracle)