你是怎样看待物化视图的?

[复制链接]
查看11 | 回复7 | 2012-10-9 18:16:00 | 显示全部楼层 |阅读模式
今天下午我创建了几个物化视图,目的是为某应用提供一个接口,这样在源数据表数据更新的时候,它也能更新最新的数据,而且免去了写存储过程更新的麻烦,但我又仔细思考了下,发现物化视图可能是这样的:
1.物化视图只是固化了DBLink 查询,意思就是不用每次取数的时候都加一个远程数据库的用户DBLink,并没有把全部数据导到本地;
2.如果远程数据库因为网络原因无法访问,物化视图可能也就无法获取最新的数据,甚至获取不到数据
3.相对于在本地建表,通过物化视图访问数据可能会占用一定的网络带宽,如果一次数据量很大,占用带宽应该会很高的
可能我的理解有问题,欢迎各位大侠拍砖。

回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
物化视图主要用于调优,一般不会用于数据接口的。对于你的个现象,你可以考虑使用一下触发器,使用触发器维护一张表,如果有必要的话,给其创建普通视图即可。
回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
1.物化视图只是固化了DBLink 查询,意思就是不用每次取数的时候都加一个远程数据库的用户DBLink,并没有把全部数据导到本地;
当然不是“全部数据”,只是把你这个物化视图所涉及的数据保存到了本地。如果你这个视图是简单的SELECT * FROM 表, 那么就把那张表的数据全部复制到了本地。

2.如果远程数据库因为网络原因无法访问,物化视图可能也就无法获取最新的数据,甚至获取不到数据
只能看到出故障之前所刷新的数据。本地数据是一直都可访问的哪怕DBLINK不通了。

3.相对于在本地建表,通过物化视图访问数据可能会占用一定的网络带宽,如果一次数据量很大,占用带宽应该会很高的
访问物化视图不占用网络带宽;刷新物化视图会占用。如果你每次都是全量刷新,那么代价可能很昂贵。

回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
newkid 发表于 2013-3-19 00:13
1.物化视图只是固化了DBLink 查询,意思就是不用每次取数的时候都加一个远程数据库的用户DBLink,并没有把全 ...

如果我用ROWID创建物化视图,数据变动的话,会不会全量更新?
回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
我不敢用。
我都直接用视图或写触发器。
回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
i991446521 发表于 2013-3-20 11:29
如果我用ROWID创建物化视图,数据变动的话,会不会全量更新?

数据变化跟物化视图没一点毛关系,关键看刷新,而增量刷新,是要有mv log才行的,没有的话你再怎么增量也不行, 你rowid还是主键,也没毛关系
回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
piliskys 发表于 2013-3-20 17:33
数据变化跟物化视图没一点毛关系,关键看刷新,而增量刷新,是要有mv log才行的,没有的话你再怎么增量也 ...

现在了解原理了,我这样建立了视图:
以ROWID 方式创建物化视图步骤:
1.为源表创建日志:
CREATE MATERIALIZED VIEW LOG ON USER.TAB1 WITH ROWID;
2.在目的库创建物化视图:
DROP MATERIALIZED VIEW TAB1;
CREATE MATERIALIZED VIEW DM_KPI_COMP_M

REFRESH FAST

START WITH SYSDATE

NEXT SYSDATE + 1/24

WITH ROWID

AS SELECT * FROM USER.TAB1@SOURCE_DB;

回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
这样在SOURCE_DB中表数据有变动的话,物化视图中的数据也会增量更新了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行