以下內容只作個人筆記 !
物化視圖(定時刷新)
1:在源庫上創建物化視圖日誌
create materialized view log on 源庫表 with primary key(注意:源庫表一定要有主鍵)
2:在中間庫上創建物化視圖
CREATE MATERIALIZED VIEW MV_WHST_SJ
REFRESH FAST ON DEMAND
AS
SELECT * FROM 源庫表@DBLK_CZRK
3:在中間庫上創建日誌表
create table RZ_WUST
(
PK_NAME NUMBER(22), --主鍵字段
REFRESH_DATE DATE,
REFRESH_TYPE NUMBER
);
4:給中間庫上日誌導入數據
insert into RZ_WHST(pk_name, refresh_date, refresh_type)
(select pk_name, sysdate, 0 from MV_WHST_SJ);
5:給中間庫上的日誌表創建索引
--日誌表加索引
create index IDX_RZ_WHST_PK on RZ_WHST(PK_NAME);
-- PK_NAME在日誌表中不是主鍵,是一個外鍵,可能會重複,因此只要創建索引
create index IDX_RZ_WHST_DATE on RZ_WHST(REFRESH_DATE);
6:給物化視圖創建觸發器
create or replace trigger trigger_MV_WHST_SJ
after insert or update or delete on MV_WHST_SJ
for each row
declare
begin
if inserting then
insert into RZ_WHST
(pk_name, refresh_date, refresh_type)
values
(:new.編號, sysdate, 0);
elsif updating then
update RZ_WHST
set refresh_date = sysdate,
refresh_type = 1
where pk_name = :new.編號;
elsif deleting then
update RZ_WHST
set refresh_date = sysdate,
refresh_type = 2
where pk_name = :new.編號;
end if;
end trigger_MV_WHST_SJ;
7:創建刷新物化視圖的存儲過程
create or replace procedure P_HZ_SJ_CZRK_REFRESH as
begin
dbms_mview.refresh('MV_WHST_SJ'); --物化視圖名字
end;
8: 創建JOB定時刷新物化視圖(同步數據)
variable job number;
begin
sys.dbms_job.submit(job
=> :job,
what => 'P_HZ_SJ_CZRK_REFRESH;',
next_date => to_date('24-12-2009 10:12:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(sysdate+1/24/6/10,''mi'')');
--刷新頻率1分鐘太頻繁,建議改爲每天或每隔數小時。
commit;
end;
9: 創建外部接口視圖
create view V_HZ_SJ_CZRK as
select a.*, b.refresh_date, b.refresh_type
from MV_WHST_SJ a, RZ_WHST b
where a.編號 = b.pk_name;