2024年3月15日发(作者:)

最近一段时间前单位的同事问我有什么方法可以实现不同数据库之间表数据的同步,

起初我告诉他可以用DATAGURAD,STREAM,物化视图等技术手段实现。但他告诉我需

要同步数据的表并不多(有3-5张表需要同步)。我就想通过编写触发器实现要更为简单一

些。通过几天的努力终于实现。通过一些简单的测试感觉效果还可以,特总结一下奉献给

大家。之前论坛里有人问过此类问题,但很多高手都说可以用触发器实现,可是没有给出

具体的实现方法。可能他们认为非常easy,呵呵!在这里我帖出实现的具体方法和触发器

的代码给当前有此需求的兄弟。将来可能有此需求的兄弟可以将此作为备选方案,参考一

下也可以。同时请论坛里的高手多指点,多给出改进意见。如果这篇文章对大家的工作有

一定的帮助,那么希望大家能多给于支持。谢谢!我将把大家的支持化作持续、深入学习

ORACLE的动力。

现在假设有两个数据库A,B,B库中的备用表需要和A库中的住表同步数据。主表和

备用表表名相同(也可以不同),都叫a

1。首先建立在A库所在的机器建立访问B库的网络服务名prod,用NET-MANAGER

完成

2。创建PUBLIC DATABASE LINK,先不指定用户名和密码

CREATE PUBLIC DATABASE LINK prod USING 'prod' 注

意: 'prod'表示第1步中创建的网络服务名,以sys/system用户创建

3。在需要访问远程数据库用户下创建私有DATABASE LINK(同PUBLIC DATABASE

LINK名称相同),要具有CREATE DATABASE LINK权限。指定用户和密码

CREATE DATABASE LINK prod CONNECT TO scott IDENTIFIED BY tiger 注意:

scott用户必须在B库中存在且指定相应的密码,和这里给出的密码要一致。

4。创建触发器

a表为实验表,表结构为user_id number(3) username varchar2(20)

更新或插入主表记录时和备份表同步数据的触发器,其中表a是主表,a@prod是备

份表,即B库中的a表

create or repalce trigger sync_data1

after insert or update on a

begin

merge into a@prod t2

using a t1 on(

_id=_id)

when matched then

update set me=me