暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 对于物化视图,用户依赖太多?

ASKTOM 2019-09-27
372

问题描述

我们正在使用user_dependency,以便以点语言样式 (请参阅graphviz) 生成应用程序ETL层的最新文档,该文档将作为动态依赖关系图添加到我们的内部WIKI中。在检查结果图时,我们发现了物化视图 (MV) 的报告依赖关系的问题。每当从另一个视图中选择MV时,该视图的依赖关系将显示为MV的依赖关系as well(在12.1.0.2.0中观察到)。

注: 中报告的问题https://asktom.oracle.com/pls/apex/asktom.search?tag=mview-dependencies指缺失的依赖关系。

测试设置 (参见https://livesql.oracle.com/apex/livesql/s/i0pvsa3a1lyi6wu7ufykw06ok):
create table t1 (c1 int);
create view v1 as select * from t1;
create materialized view v2 as select * from v1;

从user_dependency查询依赖关系
select name, type, referenced_name, referenced_type from user_dependencies where name in ('T1','V1','V2') order by name desc, referenced_name desc;

结果:
NAME,TYPE,REFERENCED_NAME,REFERENCED_TYPE
V2, MATERIALIZED VIEW, V2, TABLE
V2, MATERIALIZED VIEW, V1, VIEW
V2, MATERIALIZED VIEW, T1, TABLE    -- this dependencies seems to be wrong for me
V1, VIEW,              T1, TABLE

当使用视图而不是物化视图时,依赖关系符合预期:
create view v2b as select * from v1;
select name, type, referenced_name, referenced_type from user_dependencies where name in ('T1','V1','V2B') order by name desc, referenced_name desc;

结果:
NAME,TYPE,REFERENCED_NAME,REFERENCED_TYPE
V2B, VIEW, V1, VIEW
V1,  VIEW, T1, TABLE


* 第一个结果不是错了吗?
* 有什么方法可以阻止将基础视图的依赖关系显示为MV的依赖关系?

专家解答

这是预期的行为。

数据库需要知道您何时更改物化视图使用的数据。所以它有一个依赖关系,直到基表使用。即使你通过视图访问这些。

这确保了它可以正确跟踪MV的新鲜度。

就我个人而言,我希望将其记录在案,以便您知道何时需要刷新MV。或者,如果您在提交时快速刷新,哪些事务将触发刷新。

如果必须删除表格,则可以执行以下操作:

-查找视图中引用的所有表
-在物化视图中使用视图的地方
-然后从MV依赖项中减去这些

例如:

select name, type, referenced_name, referenced_type 
from   user_dependencies ud
where  name in ('V2') 
minus
select 'V2', 'MATERIALIZED VIEW', referenced_name, referenced_type  
from   user_dependencies ud
where  referenced_type = 'TABLE'
and    type = 'VIEW'
and    exists (
  select * from user_dependencies ud2
  where  ud2.referenced_name = ud.name
  and    ud2.type = 'MATERIALIZED VIEW'
);

NAME    TYPE                 REFERENCED_NAME    REFERENCED_TYPE   
V2      MATERIALIZED VIEW    V1                 VIEW               
V2      MATERIALIZED VIEW    V2                 TABLE    


但这很快就会变得痛苦-如果您有MV -> 视图-> 表怎么办?
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论