Oracle快照原理及实现总结
来源:互联网 发布:淘宝橱窗推荐怎么设置 编辑:程序博客网 时间:2024/06/10 06:19
需要将业务数据库里所有的数据同步到另外一个处理服务器上。在做方案的时候,想了很多方法,当然最快的办法还是使用物理热备的方式。
但是我个人认为如果对于中大型数据库(我们的数据库有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
说明: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 withsysdate next sysdate+1/1440 as select * fromfb_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 bst114IDENTIFIED 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,namevarchar2(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 nextsysdate with primary key;
--oracle马上自动快速刷新,以后不停的刷新,只能在测试时使用.真实项目要正确权衡刷新时间.
完全刷新
Alter snapshot sn_test_user refresh complete Start withsysdate+30/(24*60*60) next sysdate+30/(24*60*60);
--oracle自动在30秒后进行第一次完全刷新,以后每隔30秒完全刷新一次
--7、手动刷新快照,在没有自动刷新的情况下,可以手动刷新快照.
手动刷新方式1
begin
dbms_refresh.refresh(''sn_test_user'');
end;
手动刷新方式2
EXECDBMS_SNAPSHOT.REFRESH(''sn_test_user'',''F'');
--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 bynext_date;
--11.打印调试信息
dbms_output.put_line(''use ''||''plsql'');
--12.如果你只想单向同步,那么在目的数据库创建以下触发器(当源数据库表改变时,目的数据库表跟着改变,但目的数据库表改变时,源数据库表不改变).
create or replace trigger TRI_test_user_AFR
begin
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
REFERENCINGNEW AS NEW OLD AS OLD
FOR EACH ROW
declare
begin
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快照原理及实现总结
- Oracle快照原理及实现总结
- Oracle快照原理及实现总结
- Oracle快照原理及实现总结_2
- Oracle快照原理及实现总结
- Oracle快照原理及实现总结
- Oracle快照原理及实现总结
- Oracle快照原理及实现总结
- oracle快照原理及如何实现生成快照
- Oracle快照实现-整理
- Oracle快照实现 ZT
- oracle 快照实例及介绍
- RHEL6 snapshot快照原理及实验
- Ceph快照的原理和实现
- 用FLEX实现屏幕快照及下载
- oracle rownum 原理及分页查询实现
- Oracle快照
- IOS 消息推送原理及实现总结
- WIN7下无法使用sqlplus &quot…
- Python爬取新浪微博热搜榜
- sql中join语句区别
- 常见Oracle HINT的用法
- Oracle NULL相关函数
- Oracle快照原理及实现总结
- Oracle SQL Developer 探究
- Oracle查询表空间使用情况
- 应用ROWDEPENDENCIES行级跟踪,查询…
- Oracle使用对象类型7(自定义…
- 图解文玩核桃的种类和特点
- ORACLE中如何查看分区表信息
- RMAN命令详解
- mysql索引