物化视图,接触过DB的应该都听说过,我这边虽然听说过,但是第一次使用还是碰到了不小的麻烦,记录一下;
一、
例:我们操作的DB叫 targetDB;源DB叫 sourceDB
首先在 targetDB建立 dblink
create database link dblikname //dblikname你自己命名的
connect to name //name就是sourceDB的用户名
identified by pwd //name就是sourceDB的密码
using 'dbtest';
//dbtest就是sourceDB的tns连接字符串
就是 下面的一串东西,用过plsql的应该都能看懂
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.15.7.20)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = GIB)
)
)'
二、创建快照日志
建立好dblink以后起始已经在targetDB中可以用 sql查询了,
比如 select * from 表名@dblikname //dblikname就是你刚才创建的名称
在sourceDB中建立 快照日志(为什么需要建立快照日志呢,后面会讲解)
Create snapshot log on A_Table with primary key; //用主键A_Table为sourceDB中你要建立快照的那个表。
三、建立快照
Create snapshot Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/24
as select * from A_Table@dblikname
上面代码中 refresh 后面跟着的 complete是指 刷新方式
fast 快速刷新,用snapshot log,只更新时间段变动部分 (增量刷新,这就是 设置快照日志的原因)
complete 完全刷新,运行SQL语句
force 自动判断刷新,介于fast和complete之间
Start with 说明开始执行的时间
Next是下次执行的时间
--附:快照刷新时间参数说明
一天的秒数=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