trigger和物化檢視同步表

dotaddjj發表於2011-09-12

前段時間網友提到了關於同步資料表的做法,今天用trigger做了兩張資料表的同步,測試剛好透過。

create 兩張測試表

Create table tongbu01

(id number primary key,

Name varchar2(10)

)

Create table tongbu02 as select * from tongbu01

新建一個dmltrigger來同步兩張表

這裡我們利用tongbu01上得trigger來同步tongbu02

create or replace trigger tongbu_trigger

after insert or update or delete

on tongbu01

for each row

begin

if inserting then

insert into tongbu02 values(:new.id,:new.name);

elsif updating then

update tongbu02 set id=:new.id,name=:new.name where id=:old.id and name=:old.name;

elsif deleting then

delete tongbu02 where id=:old.id and name=:old.name;

end if ;

end;

以後對tongbu01的所有dml操作都將觸發tongbu02的相應的dml操作,也就保證了兩個表的同步。

利用物化檢視:

物化檢視不同於普通的檢視,普通檢視是虛表不佔用實際的段,對普通檢視的查詢實際都轉換為檢視sql語句的查詢。

物化檢視是一種特殊的物理表,有on commiton demand兩種,檢視,on commit僅僅在物化檢視需要被重新整理時才進行重新整理,以保證和基表資料的一致性;on commit是一旦基表有了commit事務提交,馬上進行重新整理保證和基表資料一致。

使用物化檢視的目的為了提高查詢效能,可以用於預先計算並儲存表連線或聚集等耗時較多的操作的結構。

首先建立一個在一個tongbu01表的物化檢視的日誌

Create materialized view log on tongbu01

Tablespace users

With rowid;

然後建立即表示tongbu01的物化檢視mv_tongbu

create materialized view mv_tongbu

refresh force on commit

as

select * from tongbu01

此後關於基表tongbu01的所有dml操作,一旦commit完畢都會把該基表的物化檢視保持同步,物化檢視和物化檢視日誌都是實際存在的段,查詢user_segments或者user_extents都可以得到段的資訊。

大概有十多天沒有更新blog了,這次偷懶偷得可利索了,這些天倒是好好的睡了幾個好覺,現在新買了一個華碩的本本,用起來還不錯,現在要好好利用了,不怕雙休沒網路了更新blog了!harder and harder!早日成為一個合格的dba。讓blog成為一種習慣!

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1054972/,如需轉載,請註明出處,否則將追究法律責任。

相關文章