转:http://blog.csdn.net/lingo00/article/details/5494299
需要将业务数据库里所有的数据同步到另外一个处理服务器上。在做方案的时候,想了很多方法,当然最快的办法还是使用物理热备的方式。
但是我个人认为如果对于中大型数据库(我们的数据库有300G左右)最佳的选择还是使用SnapShot方式,即快照的方式。
Oracle数据库的快照是一个表,它包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。也就是说快照根本的原理就是将本地或远程数据库上的一个查询结果保存在一个表中。
以下是我建立的Snapshot,目的是从业务数据库上将数据Copy到处理数据库上,是不同的两个服务器之间对数据copy。
第一步:在处理服务器上的Oracle终端,建立database link,业务数据库服务器SID为TEST
create database link TEST_DBLINK.US.ORACLE.COM
connect to AMICOS identified by AMICOS
using ’test’;
第二步:在业务数据库上对应的表建立快照日志
Create snapshot log on A_Table;
第三步:建立Snapshot 快照名称为:Test_SnapShot
Create snapshot Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/24
as select * from A_Table@TEST_DBLINK
说明:REFRESH是刷新方法
刷新方式有:COMPLETE和FAST两种,而START WITH是说明开始执行的时间。
Next是下次执行的时间
而AS以后是构成快照的查询方法。
相关的方法:
更改快照
ALTER SNAPSHOT Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/2;
手动刷新快照 在命令界面执行:
EXEC DBMS_SNAPSHOT.REFRESH(’Test_SnapShot ’,’C’);
第一个参数是要刷新的快照名
第二个参数是刷新的方式,F----FAST, C---COMPLETE
查看快照最后刷新的日期
SELECT NAME,LAST_REFRESH
FROM ALL_SNAPSHOT_REFRESH_TIMES;
考试大整理最后非常的方案:
1:为需要做Snapshot的表建立Snapshot日志
create snapshot log on t1 with rowid; 这里使用ROWID建立日记的参数
2:采用Fast的方式建立快照,使用rowid做为参考参数
create snapshot fb_test_b refresh fast with rowid start with sysdate next sysdate+1/1440 as select * from fb_test_b@my_dblink;
最好能按照rowid来建立快照。要不然就必须要为表建立Primary Key。
--名词说明:源——被同步的数据库 目的——要同步到的数据库 前6步必须执行,第6以后是一些辅助信息. --1、在目的数据库上,创建dblink drop public database link dblink_orc92_182; Create public DATABASE LINK dblink_orc92_182 CONNECT TO bst114 IDENTIFIED BY password USING 'orc92_192.168.254.111'; --dblink_orc92_182 是dblink_name --bst114 是 username --password 是 password --''orc92_192.168.254.111'' 是远程数据库名 --2、在源和目的数据库上创建要同步的表(最好有主键约束,快照才可以快速刷新) drop table test_user; create table test_user(id number(10) primary key,name varchar2(12),age number(3)); --3、在目的数据库上,测试dblink select * from ; //查询的是源数据库的表 select * from test_user; --4、在源数据库上,创建要同步表的快照日志 Create snapshot log on test_user; --5、创建快照,在目的数据库上创建快照 Create snapshot sn_test_user as select * from ; --6、设置快照刷新时间(只能选择一种刷新方式,推荐使用快速刷新,这样才可以用触发器双向同步) 快速刷新 Alter snapshot sn_test_user refresh fast Start with sysdate next sysdate with primary key; --oracle马上自动快速刷新,以后不停的刷新,只能在测试时使用.真实项目要正确权衡刷新时间. 完全刷新 Alter snapshot sn_test_user refresh complete Start with sysdate+30/(24*60*60) next sysdate+30/(24*60*60); --oracle自动在30秒后进行第一次完全刷新,以后每隔30秒完全刷新一次 --7、手动刷新快照,在没有自动刷新的情况下,可以手动刷新快照. 手动刷新方式1 begin dbms_refresh.refresh(''sn_test_user''); end; 手动刷新方式2 EXEC DBMS_SNAPSHOT.REFRESH(''sn_test_user'',''F''); //第一个参数是快照名,第二个参数 F 是快速刷新 C 是完全刷新. --8.修改会话时间格式 ALTER SESSION SET NLS_DATE_FORMAT = ''YYYY-MM-DD HH24:MI:SS''; --9.查看快照最后一次刷新时间 SELECT NAME,LAST_REFRESH FROM ALL_SNAPSHOT_REFRESH_TIMES; --10.查看快照下次执行时间 select last_date,next_date,what from user_jobs order by next_date; --11.打印调试信息 dbms_output.put_line(''use ''||''plsql''); --12.如果你只想单向同步,那么在目的数据库创建以下触发器(当源数据库表改变时,目的数据库表跟着改变,但目的数据库表改变时,源数据库表不改变). create or replace trigger TRI_test_user_AFR after insert or update or delete on sn_test_user for each row begin if deleting then delete from test_user where > end if; if inserting then insert into test_user(id,name) values(:new.id,:new.name); end if; if updating then update test_user set where > end if; end TRI_test_user_AFR; --13.如果你想双向同步,请在源数据库中执行前6步,并在双方都创建以下触发器(当源数据库表改变时,目的数据库表跟着改变,目的数据库表改变时,源数据库表也改变) CREATE OR REPLACE TRIGGER BST114.TRI_TEST_USER_AFR AFTER DELETE OR INSERT OR UPDATE ON BST114.SN_TEST_USER REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW declare tmp_id number(10):=-1; begin dbms_output.put_line(''begin''); if inserting then --select id into tmp_id from test_user where for p in(select id from test_user where > loop tmp_id:=p.id; end loop; dbms_output.put_line(tmp_id||''===------------''); if (tmp_id=-1) then insert into test_user(id,name,age) values(:new.id,:new.name,:new.age); end if; end if; if updating then dbms_output.put_line(''updated''); for p in(select name,age from test_user where > loop if (p.name!=:new.name) or (p.age!=:new.age) then update test_user set where > end if; end loop; end if; if deleting then dbms_output.put_line(''deleted''); delete from test_user where > end if; dbms_output.put_line(''end''); end TRI_test_user_AFR; --为防止双向同步触发器死循环,所以要在触发器中增加一些判断,阻止死循环. --以上同步原理 1.首先创建一个dblink,可以访问远程数据库 2.在本地创建一个快照,映射远程数据表,当远程数据表有变化时,会反应到快照中. 3.由于快照类似于视图表,所以在本地为快照创建一个触发器,当快照有变化时,会触发相应事件. 4.在触发器中写同步数据的代码. --附:快照刷新时间参数说明 一天的秒数=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
相关推荐
Oracle 12c RAC原理及关键技术. 该文讲述Oracle RAC原理,机构,关键技术,优缺点,架构延伸。
有时候我们不小心把数据删掉,或者数据莫名其妙的丢失,这时候我们可以借助Oracle本身自带的快照来进行数据的恢复。
有关oracle9i原理的课件内容很相近,很实用 包括10章有关oracle9i原理的课件
oracle 最新ogg12.3原理文档,更透彻的了解ogg同步原理。
巧用dblink结合oracle快照实现两台服务器的数据同步
Oracle-RAC原理及关键技术、进阶版必看内容、Oracle-RAC原理及关键技术、进阶版必看内容、Oracle-RAC原理及关键技术、进阶版必看内容
Oracle RAC原理
第3章 关系模型及ORACLE对象关系数据库 第4章 ORACLE SQL和PL/SQL 第5章 关系数据库设计理论 第6章 数据库的设计与维护 第7章 数据库保护 第8章 ORACLE的企业管理器(Enterprise Manager) 第9章 分布式数据库...
该文档详细介绍了oracle数据库备份的原理以及其具体的实现方式。
利用ORACLE的快照功能实现远程数据库的复制.pdf
Oracle数据库原理及应用教学大纲.pdf
详细阐述oracle工作原理及调优手段及各种专业名词,不错的文档
oraclerman备份原理[参照].pdf
oracle dataguard 原理与功能,优点,如何自动同步,培训
oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结
Oracle数据库原理课件 详细讲解Oracle数据库原理 适合初学者或者复习用
oracle数据快照
oracle的checkpoint工作原理
oracle 数据恢复 误删恢复 111111111111111111111111111111111111111111111111111111111111111111111111
ORACLE数据库原理及备份容灾的应用.ppt ORACLE数据库原理及备份容灾的应用.ppt