Oracle snapshot(快照)

要求:现有2台数据库服务器A和B,都在一个局域网内。A数据库的数据实时更新,B数据库做为A的备份数据库,要求B数据库跟A数据库的数据同步,以便于分析统计?

方法:在B数据库上面建快照,来影射A上面的数据。
1,在B数据库上面创建一个服务名,以访问A数据库。例如
to101=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL=TCP)(HOST=www.bj.col.com.cn)(PORT=1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = test)
    )
  )

2,在B数据库上创建数据库链路。例如
create public database link link101
connect to scott identified by tiger
using 'to101';

3,在B数据库上创建快照。这里只影射A数据库的中的一张表(tab1), 代码如下:
create snapshot tab1
refresh force start with sysdate
next sysdate+1/1440 with primary key as select * from tab1@link101;

OK,这样就在B数据库上创建了一个快照对象(tab1),基本上跟A数据库中的表(tab1)一样了。B数据库上的这个快照对象每隔1分钟刷新一下,去跟A数据库保持一致。

说明:
1、ORACLE的快照刷新方式refresh有三种:
fast        快速刷新,用snapshot log,只更新时间段变动部分 
complete    完全刷新,运行SQL语句 
force       自动判断刷新,介于fast和complete之间

2、若在B上创建快速刷新,则要在A上创建快照日志对象,否则没这个必要。
在A上创建快照日志,代码如下:
create snapshot log on tab1 with primary key;

3、说明,B中的快照对象 tab1 既有表的特征也有视图的特征。因为它的数据存在本地磁盘上,但是它的数据又不允许编辑,只能查询。估计它就是所谓的物化视图吧。

Oracle快照原理及实现总结

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。

Oracle 快照及 dblink使用 (两台服务器数据同步)
--名词说明:源——被同步的数据库
--          目的——要同步到的数据库

/*一、创建dblink:*/
--1、在目的数据库上,创建dblin
drop database link dblink_anson;
Create public
database link dblink_anson
Connect to lg identified by lg using 'SDLGDB';
--源数据库的用户名、密码、服务器名k

/*二、创建快照:*/
--1、在源和目的数据库上同时执行一下语句,创建要被同步的表
drop table tb_anson;
create table tb_anson(c1 varchar2(12));
alter table tb_anson add constraint pk_anson primary key (C1);

--2、在目的数据库上,测试dblink
select * from tb_anson@dblink_anson;
select * from tb_anson;

--3、在目的数据库上,创建要同步表的快照日志
Create snapshot log on tb_anson;

--4、创建快照,快照(被同步(源)数据库服务必须启动)
Create snapshot sn_anson as select * from tb_anson@dblink_anson;

--5、设置快照刷新时间
Alter snapshot anson  refresh fast Start with sysdate+1/24*60 next sysdate+10/24*60;
--oracle自动在1分钟后进行第一次快速刷新,以后每隔10分钟快速刷新一次
Alter snapshot anson  refresh complete Start with sysdate+30/24*60*60 next sysdate+1;
--oracle自动在30钞后进行第一次完全刷新,以后每隔1天完全刷新一次

--6、手动刷新快照
begin
dbms_refresh.refresh('"CS"."SN_ANSON"');
end;

 

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓