`

ORACLE快照原理及实现总结

 
阅读更多

转: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

 

 http://blog.chinaunix.net/uid-9789791-id-3351599.html

分享到:
评论

相关推荐

    Oracle 高级复制技术介绍及应用

    ### 三、Oracle高级复制技术原理与应用场景 #### 1. 高级复制原理 当在源数据库上发生数据修改(DML)操作时,Oracle高级复制技术通过内部触发器捕获这些变化,并将操作封装成远程过程调用(RPC)的形式。这些RPC通过...

    oracle数据导入到Mysq库

    首先,我们来探讨Oracle数据导入到MySQL的原理。数据迁移通常涉及数据抽取、转换和加载(ETL)过程。在本例中,"oracle2mysql"工具可能通过以下步骤工作: 1. **数据抽取**:工具连接到Oracle数据库,通过SQL查询...

    Multitenant New Features In oracle 18c 多租户

    Oracle Data Guard 是Oracle数据库的一个高可用性解决方案,它通过复制数据到备用站点来实现数据保护。Oracle 18c增强了与Data Guard的集成,使得PDB的配置更加简单高效。 - **特点** - **简化配置**:简化了PDB在...

    oracle 10G 实验手册

    本文将依据给定的实验手册内容,详细阐述Oracle 10G闪回功能的使用方法、工作原理及其在不同场景下的应用。 ### 闪回功能概述 Oracle的闪回功能允许用户回溯至数据库中的某一特定时间点或系统变更号(SCN),查看或...

    oracle四大宝典之四

    - **库缓存调优总结**:综合考虑各种因素,实现库缓存的最优配置。 - **调优字典缓存**:优化字典缓存,提高数据字典访问速度。 ### 五、Buffercache故障排除与调优 - **Buffercache工作原理**:理解Buffercache...

    Oracle 11g New Features for Administrators Summary Sheets by Ahmed baraka

    通过以上内容的总结,可以看出Oracle 11g在数据库管理领域带来了实质性的改进与创新,无论是在安全性、性能优化还是资源管理方面,都展现出了Oracle公司对市场趋势和用户需求的深刻洞察。对于IT专业人士而言,掌握...

    Oracle软件在主机平台的应用-视频教程网盘链接提取码下载.txt

    - **学习思路**:强调理解Oracle的核心概念和技术原理,而非仅仅掌握具体的操作命令。 - **设计理念**:深入浅出地讲解Oracle的设计理念,如数据安全性、高可用性、性能优化等方面。 #### 四、视频教程特点 - **...

    oracle数据泵备份

    #### 二、Oracle 数据泵备份原理 数据泵备份主要分为两个阶段:导出(Export)和导入(Import)。导出阶段负责将源数据库中的数据和元数据提取出来并保存为特定格式的文件;导入阶段则将这些文件中的数据和元数据...

    Oracle数据库非归档模式重做日志恢复方法.pdf

    总结来说,Oracle数据库非归档模式下重做日志的恢复方法主要依赖于临时文件的创建、日志切换以及可能的数据恢复技术。尽管这种方法提供了一种解决方案,但预防总是优于治疗,因此强烈推荐使用归档模式并定期备份以...

    大数据治理之oracle篇章.docx

    总结而言,"大数据治理之Oracle篇章"提供了全面的指导,涵盖了从问题检测到解决方案实施的整个过程,旨在帮助企业在处理大数据时,充分利用Oracle的功能,实现高效、稳定的数据管理。通过实践这些方法和技巧,企业...

    oracle数据库体系

    - **后台进程**:后台进程是实现Oracle数据库功能的关键组件,它们负责维护数据库的正常运行。 ##### 后台进程详细介绍 - **SMON(系统监控进程)**:此进程负责数据库恢复工作。例如,在并行服务器模式下,如果...

    Oracle ODI官方培训文档

    - **ODI与GoldenGate的集成**:这部分内容探讨了如何将ODI与Oracle GoldenGate集成起来,以实现更高效的数据复制和同步。 - **Web服务与SDK扩展**:最后,文档还讨论了如何利用Web服务和SDK来扩展ODI的功能,这为...

    触发器实现数据同步-毕业设计

    在设计数据同步软件的部分,作者描述了所开发的应用程序的数据库环境、需求分析、同步原理、软件流程、系统界面设计以及主要功能的代码实现。这个应用利用触发器来监控和触发SQL Server数据库的同步操作,确保数据在...

    物化视图在大型ORACLE数据库查询中的应用.pdf

    在设计和实现物化视图时,需要对Oracle数据库进行合理设置,并从不同层面运用各种技术以提高查询速度。由于物化视图涉及数据的存储和预计算,因此需要合理规划存储资源和计算资源,确保查询性能的提升同时兼顾系统的...

Global site tag (gtag.js) - Google Analytics