Oracle使用触发器实现两台不同服务器上的数据库的两张表进行数据同步增删改

下面用oracle数据库进行测试,假设使用这两个表,192.168.2.2服务器上用户test1表LEGAL_CASE,192.168.2.3服务器上用户test密码123456表LEGAL_CASE。

需求:只需改动源库192.168.2.2服务器上的表,目标库192.168.2.3服务器上即可自动改变。

    条件:

        1.两个表能建立DB LINK,即两个数据库所在的服务器能互相ping通。

        2.两个表字段类型必须完全匹配,不能主表某字段能插入字符,而副表对应的某字段只能插入数字,不能主表字段插入的长度超过副表对应字段的最大长度。

下面开始:建立DB LINK和触发器都是在192.168.2.2数据库

        1.建立DB LINK,首先判断登录的用户是否有创建DB LINK 的权限,执行以下语句:

            -- 查看 test1 用户是否有创建DB LINK 权限   

select * from user_sys_privs where privilege like upper('%DATABASE LINK%') AND USERNAME='test1';

            如果能查询到结果,说明有权限创建DB LINK ,否则需要管理员角色创建权限(sys或system)

grant create public database link to test1;

 也可以用SQL的方式创建: 

-- Create database link 
create public database link TEST_DBLINK
connect to test2 identified by 123456
using '192.168.2.3:1521/ORCL';

            建好DB LINK 后测试一下,看下是否连接上了

SELECT * FROM LEGAL_CASE@TEST_DBLINK;

2.建立好DB LINK 后,就可以写触发器了

CREATE OR REPLACE TRIGGER "TEST_LEGAL_CASE" 
AFTER INSERT OR UPDATE OR DELETE ON LEGAL_CASE
FOR EACH ROW
BEGIN
CASE WHEN INSERTING THEN
     insert into LEGAL_CASE@TEST_DBLINK(ID,PERSON,CARNO,CREATE_DATE,PLACE,FILE_PATH,NOTES_PATH,STATE,APPLY_ID,SEX,IDCARD,CONTEXT,ADDRESS,CAR_TYPE,USER_ID,USER_NAME,CONTENT,START_DATE,END_DATE,MOBILE,COMPANY,JOB,USER_NO,RECOREDER,GOODS) 
     values(:NEW.ID,:NEW.PERSON,:NEW.CARNO,:NEW.CREATE_DATE,:NEW.PLACE,:NEW.FILE_PATH,:NEW.NOTES_PATH,:NEW.STATE,:NEW.APPLY_ID,:NEW.SEX,:NEW.IDCARD,:NEW.CONTEXT,:NEW.ADDRESS,:NEW.CAR_TYPE,:NEW.USER_ID,:NEW.USER_NAME,:NEW.CONTENT,:NEW.START_DATE,:NEW.END_DATE,:NEW.MOBILE,:NEW.COMPANY,:NEW.JOB,:NEW.USER_NO,:NEW.RECOREDER,:NEW.GOODS);
WHEN UPDATING THEN
     update LEGAL_CASE@TEST_DBLINK set ID=:NEW.ID,PERSON=:NEW.PERSON,CARNO=:NEW.CARNO,CREATE_DATE=:NEW.CREATE_DATE,PLACE=:NEW.PLACE,FILE_PATH=:NEW.FILE_PATH,NOTES_PATH=:NEW.NOTES_PATH,STATE=:NEW.STATE,APPLY_ID=:NEW.APPLY_ID,SEX=:NEW.SEX,IDCARD=:NEW.IDCARD,CONTEXT=:NEW.CONTEXT,ADDRESS=:NEW.ADDRESS,
     CAR_TYPE=:NEW.CAR_TYPE,USER_ID=:NEW.USER_ID,USER_NAME=:NEW.USER_NAME,CONTENT=:NEW.CONTENT,START_DATE=:NEW.START_DATE,END_DATE=:NEW.END_DATE,MOBILE=:NEW.MOBILE,COMPANY=:NEW.COMPANY,JOB=:NEW.JOB,USER_NO=:NEW.USER_NO,RECOREDER=:NEW.RECOREDER,GOODS=:NEW.GOODS where ID=:OLD.ID;
WHEN DELETING THEN
     delete from LEGAL_CASE@TEST_DBLINK where ID=:OLD.ID;
END CASE;
END;

 3.触发器建立好后,改动192.168.2.2服务器上的表,创建、修改和删除数据,都可在192.168.2.3服务器上中看到效果。

update LEGAL_CASE set PERSON='更新测试1' where ID='10000521';
delete from LEGAL_CASE  where ID='10000521';

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页