【问题标题】:Materialized view logs questions物化视图日志问题
【发布时间】:2020-04-22 10:32:39
【问题描述】:

我有一个基于两个或多个其他物化视图的物化视图。我想为物化视图安排快速刷新,但问题是它没有任何日志,所以我必须先创建日志。我是物化视图的新手,所以我不确定如何为两个底层物化视图创建日志。我是否为这些视图使用的每个基础表创建一个日志?

【问题讨论】:

  • 应该为你的底层 mv 的基表以及底层 mv 制作 Mv 日志。如果您可以分享 mv 的详细信息,我们将能够为您提供详细的帮助
  • 因此,如果 mv 是在另一个具有自连接的 mv 上创建的,并且该 mv 基于大约 8 个表,我需要 9 个日志吗?一个底层 mv 和八个底层表?
  • 是的。你理解正确。请注意,日志仅用于快速刷新

标签: oracle materialized-views


【解决方案1】:

假设您希望所有内容都可以快速刷新,您需要 MV 日志:

  • 基表
  • “最终”MV 背后的 MV

您在 MV 上创建 MV 日志的方式与常规表相同:

create table t1 (
  c1 int primary key, c2 int
);
create table t2 (
  c1 int, c2 int, primary key ( c1, c2 )
);

create materialized view log on t1
  with rowid, primary key ( c2 )
  including new values;

create materialized view log on t2
  with rowid, primary key
  including new values;

create materialized view mv1
refresh fast on commit as
  select * from t1;

create materialized view mv2 
refresh fast on commit as
  select * from t2;

create materialized view log on mv1
  with rowid ( c1, c2 )
  including new values;
create materialized view log on mv2
  with rowid ( c1, c2 )
  including new values;

create materialized view mv3 
refresh fast on commit as
  select mv1.c1, count (*) 
  from   mv1 
  join   mv2
  on     mv1.c1 = mv2.c1
  group  by mv1.c1;

insert into t1 values ( 1, 1 );
insert into t1 values ( 2, 2 );

insert into t2 values ( 1, 1 );
insert into t2 values ( 1, 2 );
insert into t2 values ( 2, 2 );

commit;

select * from mv3;

        C1   COUNT(*)
---------- ----------
         1          2
         2          1

【讨论】:

  • 我是指根据其他MV改编的那个;在这个例子中是 MV3。您需要在依赖链中除 MV3 之外的所有对象上创建日志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2012-11-16
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2016-02-20
  • 2013-07-30
相关资源
最近更新 更多