ITPub博客

首页 > 数据库 > Oracle > trigger和物化视图同步表

trigger和物化视图同步表

原创 Oracle 作者:dotaddjj 时间:2011-09-12 21:51:15 0 删除 编辑

前段时间网友提到了关于同步数据表的做法,今天用trigger做了两张数据表的同步,测试刚好通过。

先create 两张测试表

Create table tongbu01

(id number primary key,

Name varchar2(10)

)

Create table tongbu02 as select * from tongbu01

新建一个dml的trigger来同步两张表

这里我们利用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 commit和on 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博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1054972/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662975