ORACLE_远程数据库同步

在本地建立两张表(T1,T2),这两张表和远程的表结构一样,通过触发器实现数据的同步,然后对本地的两张表进行物化,再在物化视图上建立触发器,实时的修改T表(并没有考虑大字段的情况)。
该方案是测试成功的,源数据库是oracle10.2.0.3.0,目标数据库是oracle10.2.0.3.0,并且做到了数据的实时更新。
1、在源数据库创建database link,确保两台服务器可以连通。
首先在oracle 的E:\oracle\product\10.2.0\db_1\network\ADMIN\tnsnames.ora配置文件里添加远程oracle服务器的实例,具体如下:
SQL code
   
   
ORCL103 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168 . 1.103 )(PORT = 1521 )) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )

然后执行创建database link的语句:
SQL code
   
   
create database link ORCL103.REGRESS.RDBMS.DEV.US.ORACLE.COM connect to CCPPH1 using ' orcl103 ' ;

然后测试是否已连通,在命令窗口输入:
Select count(*) from T1@orcl103;
2、在本地建表(T1, T2),要和源数据库中的表结构一致。
SQL code
   
   
-- T1表 Create table T1 as select * from T1 @orcl103 ; alter table T1 add constraint PK_ID primary key (ID); -- T2表 Create table T2 as select * from T2 @orcl103 ; alter table T2 add constraint PK_ID primary key (ID);

3、在源数据库上分别建立触发器
SQL code
   
   
-- T1表触发器 create or replace trigger TRI_T1 after insert or update or delete on T1 for each row begin if deleting then dbms_output.put_line( ' 删除 ' ); delete from T1 @orcl101 where id = :old.id; end if ; if inserting then dbms_output.put_line( ' 插入 ' ); insert into T1 @orcl101 (id,name) values (:new.id,:new.name); end if ; if updating then dbms_output.put_line( ' 修改 ' ); update T1 @orcl101 set id = :new.id,name = :new.name where id = :old.id; end if ; end TRI_T1; -- T2表触发器 create or replace trigger TRI_T2 after insert or update or delete on T2 for each row begin if deleting then dbms_output.put_line( ' 删除 ' ); delete from T2 @orcl101 where id = :old.id; end if ; if inserting then dbms_output.put_line( ' 插入 ' ); insert into T2 @orcl101 (id,name) values (:new.id,:new.name); end if ; if updating then dbms_output.put_line( ' 修改 ' ); update T2 @orcl101 set id = :new.id,name = :new.name where id = :old.id; end if ; end TRI_T2;

4、在目标数据库创建物化视图日志
SQL code
   
   
-- 创建物化视图日志 create materialized view log on T1 with rowid; create materialized view log on T2 with rowid;

5、在目标数据库创建物化视图
SQL code
   
   
create materialized view MV_T refresh fast on commit as select t1.rowid as t1rowid,t2.rowid as t2rowid,t1.id,t1.name,t2.id as t2id,t2.name as t2name from T1 t1,T2 t2 where t1.id = t2.id;

6、在目标数据库创建基于物化视图的触发器
SQL code
   
   
create or replace trigger TRI_T after insert or update or delete on mv_T for each row begin if deleting then dbms_output.put_line( ' 删除 ' ); delete from T where ID = :old.ID; end if ; if inserting then dbms_output.put_line( ' 插入 ' ); insert into T(id,name) values (:new.id,:new.name); end if ; if updating then dbms_output.put_line( ' 修改 ' ); update T set id = :new.id,name = :new.name where id = :old.id; end if ; end TRI_T;

已完毕,如果数据库的版本不同,有时在执行更新的时候会报内部错误,但是数据确实是已经更新过来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你想要将MyEclipse中的本地数据库远程数据库进行同步。可以按照以下步骤操作: 1. 首先,确保你已经有了本地数据库远程数据库的连接信息,包括数据库名称、用户名、密码、主机名和端口号。 2. 在MyEclipse中打开数据库视图。如果没有显示数据库视图,可以通过选择"Window"菜单下的"Show View",然后选择"Other"来找到并打开它。 3. 在数据库视图中,右键单击并选择"New Database Connection"来创建一个新的数据库连接。 4. 在弹出的对话框中,选择你使用的数据库类型(如MySQLOracle等),然后填写连接信息,包括数据库名称、用户名、密码、主机名和端口号。点击"Test Connection"按钮来测试连接是否成功。 5. 如果连接测试通过,点击"Finish"按钮来创建数据库连接。 6. 重复步骤3至5,创建远程数据库的连接。 7. 在数据库视图中,展开本地数据库连接和远程数据库连接,以查看它们的表、视图等对象。 8. 如果你希望将本地数据库中的表同步远程数据库中,可以选择本地数据库中的表,在右键菜单中选择"Copy to...",然后选择远程数据库连接来进行同步操作。 9. 同样地,如果你希望将远程数据库中的表同步到本地数据库中,可以选择远程数据库中的表,在右键菜单中选择"Copy to...",然后选择本地数据库连接来进行同步操作。 请注意,同步操作可能会导致数据的添加、更新或删除,请在执行操作前进行备份以防止数据丢失。此外,根据你使用的数据库类型和版本,具体的操作步骤可能会有所不同。建议你参考相关数据库的文档或官方网站获取更详细的指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值