数据库同步实现
场景描述
- 数据库版本:Oracle9i,默认情况下两个数据库服务器都是刚建好的。
- 局域网或广域网上两台能互联的数据库服务器,一个是main,一个是ass。
- 每往main中某一表test增删改一条记录时,ass中test表通过main库中触发器来增删改。
- 两个test结构一样。
实现步骤
1. 预热:建表
-- Create table
create table TEST
(
USERNAME VARCHAR2(20),
PASSWORD VARCHAR2(10)
)
tablespace SYNTEST
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
2. 建立db_link
create public database link syntest100
connect to syntest
identified by syntest
using 'ass100';
3. 创建同义synonym
create or replace synonym syn100 for syntest.test;
4. 创建触发器
增加
create or replace trigger synins
after insert on test
for each row
begin
insert into syn100 (USERNAME, Password) values (:NEW.USERNAME, :NEW.password);
end;
修改
create or replace trigger synupd
after update on test
for each row
declare
begin
update syn100 set password = :new.password where username = :old.username;
end synupd;
删除
create or replace trigger syndel
after delete on test
for each row
declare
begin
delete from syn100 where username=:old.username;
end syndel;