oracle数据同步延时多大,oracle数据同步(转载)

oracle数据同步

搞了几天数据同步的程序,写完之后觉得很浪费,因为oracle自身的数据库联机备份功能已经相当强大。不过关键一点是我们应用场景跟联机备份有很大差别。

虽然这次没用上oracle自身备份功能,但是有一个通过建立db link 来实现同步倒也很简单,查询了网上资料之后,自己也实现了这一功能。

具体步骤如下:

场景:

数据库版本:oracle9i,默认情况下两个数据库服务器都是刚建好的

局域网或广域网上两台能互联的数据库服务器,一个是main,一个是ass,现在每往main中某一表test增删改一条记录时,ass中test表通过main库中触发器来增删改,哦,对了两个test结构一样

我现在实现的是局域网内的数据同步:

预热:

先建表

*****************************************************************

-- 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

);

*****************************************************************

1:先构建一下ass数据库实例的连接符,先备份一个%oracle_home%--ora92--network--admin-->tnsnames.ora,然后用UltraEdit打开,添加如下

*****************************************************************

ass100 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = syntest)

)

)

*****************************ok************************************

注意:ass100是用于网络连接用的名称,2中要用到

2:建立db_link

*****************************************************************

create public database link syntest100

connect to syntest

identified by syntest

using 'ass100'

*****************************************************************

注意:syntest100是db link 名称,可以随便起名,

ass100就是1中的建立的连接符名称

3:如果2执行通过的话,就可以建立同义synonym

*****************************************************************

create or replace synonym syn100 for

*****************************************************************

注意:syntest100就是2中的db link 名称,syntest.test是ass中的实例名.表名

小提示:执行完3后,可以在本地执行select * from syn100,这时得出来的结果是ass数据库中表test的数据。

4:如果以上都正确的话,现在可以为本地表test建触发器,我写了3个触发器,增加,删除,修改

*****************************************************************

--增加

create or replace trigger synins

after insert on test

for each row

begin

insert into syn100 (USERNAME,Password) values (:NEW.USERNAME,:NEW.password);

end;

--执行完,可以测试一下

/*

添加本机一条记录

insert into test (username,password) values ('murphy','1234')

查看ass表test

select * from syn100

可以吧,我这里是ok的。

*/

--修改

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;

--执行完,可以测试一下

/*

修改本机一条记录

update test set password = '123' where username = 'murphy'

查看ass表test

select * from syn100

*/

--删除

create or replace trigger syndel

after delete on test

for each row

declare

-- local variables here

begin

delete from syn100 where username=:old.username;

end syndel;

--执行完,可以测试一下

/*

删除一条本地记录

delete from test where username = 'murphy'

查看ass表test

select * from syn100

*/

****************************全文完*************************************

感觉很方便。

posted on 2008-02-22 14:36 张朔 阅读(2922) 评论(2)  编辑 收藏 引用 所属分类: 大小数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值