oracle快照dblink数据同步

经过对各种资料的整理,总结出的东西,


一、同步原理


1.首先创建一个dblink,可以访问远程数据库
2.在本地创建一个快照,映射远程数据表,当远程数据表有变化时,会反应到快照中.
3.由于快照类似于视图表,所以在本地为快照创建一个触发器,当快照有变化时,会触发相应事件.
4.在触发器中写同步数据的代码.


二、创建DBLink(在目标数据库)


drop public database link dblink_ora10g_exchange;
create public DATABASE LINK dblink_ora10g_exchange connect to zyh IDENTIFIED BY db123 USING ''ora10g_192.168.30.100'';
--dblink_ora10g_exchange 是dblink_name
--zyh 是 username
--db123 是 password
--'ora10g'是远程数据库名


三、创建要同步的表(源数据库和目标数据库都要)


create table user();   //省略


四、测试dblink


select * from user@dblink_ora10g_exchange ;    //查询的是源数据库的表
select * from user;


五、创建要同步表的快照日志


create snapshot log on user;   //如果不建立日志,则不能进行快速刷新


六、创建快照,在目的数据库上创建快照
create snapshot sn_user as select * from user@dblink_orca10g_exchange;


七、设置快照刷新时间


  1.快速刷新 Alter snapshot sn_test_user refresh fast Start with sysdate next sysdate with primary key;


   --oracle马上自动快速刷新,以后不停的刷新,只能在测试时使用.真实项目要正确权衡刷新时间.


  2.完全刷新 Alter snapshot sn_test_user refresh complete Start with sysdate+30/24*60*60 next sysdate+30/24*60*60;


     --oracle自动在30秒后进行第一次完全刷新,以后每隔30秒完全刷新一次


  3.手动刷新快照,在没有自动刷新的情况下,可以手动刷新快照.


      手动刷新方式1
      begin
        dbms_refresh.refresh(''sn_test_user'');
      end;


      手动刷新方式2
      EXEC DBMS_SNAPSHOT.REFRESH(''sn_test_user'',''F''); 


      //第一个参数是快照名,第二个参数 F 是快速刷新 C 是完全刷新.


八、附录  


  1.时间


  一天的秒数=24小时*60分钟*60钞
  所以要想在30秒后刷新,参数应该这样写 sysdate+30/(24*60*60)
  1分钟==sysdate+60/(24*60*60)


  一天的分钟数=24小时*60分钟
  一分钟也可以这样写 sysdate+1/(24*60)
  30分钟==sysdate+30/(24*60)
  60分钟==sysdate+60/(24*60)


  以此类推
  1小时==sysdate+1/24==sysdate+60/(24*60)
  1天==sysdate+1
  一个月==sysdate+30


  2.修改会话时间格式
  ALTER SESSION SET NLS_DATE_FORMAT = ''YYYY-MM-DD HH24:MI:SS'';


  3.查看快照最后一次刷新时间
  SELECT NAME,LAST_REFRESH FROM ALL_SNAPSHOT_REFRESH_TIMES;


  4.查看快照下次执行时间
  select last_date,next_date,what from user_jobs order by next_date;


  5.打印调试信息
  dbms_output.put_line(''use ''||''plsql'');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值