一、行动目的:
在服务器甲的数据库的A中的表TBL_TB数据发生改变时,服务器乙的数据库B中的表TBL_TB也发生相应变化。(假设两个表的结构相同,都只含有ID,NAME两列)
二、执行步骤:
1)建立连接配置信息:在服务器甲的数据库安装目录下的network/admin/tnsnames.ora添加一个连接服务器乙的连接:
MASTER2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = master2) ) ) //假设甲的ip地址是192.168.0.1而乙的是192.168.0.2并且乙中的oracle数据库服务名为master2端口号为1521 |
2)建立一个DBLINK:
create public database link LINKMASTER2.ORACLE.COM
connect to 用户名 --连接乙中数据库所使用的用户名我们这次该填写B
identified by "密码" --密码(双引号不用去掉)
using 'MASTER2';
3)建立同义词:为了方便我们使用,我们来建立一个同义词
create or replace synonym TESTLINK
for B.TBL_TB@LINKMASTER2.ORACLE.COM;
4)建立触发器:
在服务器甲中的数据库空间A下的TBL_TB下建立触发器,负责插入同步,触发器主体部分:
begin
insert into TESTLINK (id,name) values (:new.id,:new.name);
end;
在服务器甲中的数据库空间A下的TBL_TB下建立触发器,负责修改同步,触发器主体部分:
begin
update TESTLINK set id=:new.id,name=:new.name where id= :old.id;
end;
--假设ID列是唯一的
三、行动总结报告:
第2)和3)步骤,应该是在服务器甲的数据用户A的环境下来执行的sql语句。
建立了同义词后,就可以直接使用查询异地数据库的表格内容了:select * from TESTLINK ;
需要注意的是,服务器乙的防火墙一定要是关闭的,否则在建立连接的时候,会报超时错误。