首页 > 数据库 > Oracle > trigger和物化视图同步表
前段时间网友提到了关于同步数据表的做法,今天用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/ ,如需转载,请注明出处,否则将追究法律责任。