我刚刚在 Oracle 中创建了一个物化视图,但意识到我使用了错误的脚本,所以我想再次删除 MVIEW。
MVIEW 是使用如下语句创建的:
create materialized view foobar
refresh start with trunc(sysdate) + 1/8 next sysdate + interval '8' hour
as
select ...
from ...;
创建需要一些时间。
现在意识到这是我运行的错误脚本:
drop materialized view foobar;
这也运行了一段时间。我首先认为这可能是由于某些锁或其他会话阻止了这一点,但不是:当我查询时v$session
,我看到我的drop
语句实际上触发了 mview 的完全刷新:
用户名 | 标识符 | 序列号 | 程序 | 状态 | SQL_ID | SQL_TEXT ----------+-----+--------+-------------------- ----+--------+----------------+------------------ ---------------------------------------------- --- 我的用户 | 294 | 29131 | 甲骨文@主机名 (J002) | 活跃 | 6snjgrzbtynyc | INSERT /*+ BYPASS_RECURSIVE_CHECK */ INTO "MY_USER"."FOOBAR" 选择 .....
事实上, 的drop materialized view
运行时间与create
.
所以我的问题是:为什么在我删除物化视图时 Oracle 会触发完全刷新?
环境:Oracle 11.2.0.3 64位
PS:我认为别名indexed-view
是materialized-view
错误的。尽管两者都引用相同的基本概念,但它们是 Microsoft 和 Oracle 使用的不同名称。对 Oracle 中的物化视图感兴趣的人可能对 SQL Server 中的索引视图不感兴趣。但我不知道如何删除这个别名
在隔离环境中运行一些测试后,Raj 似乎是正确的:我在等待时看到的刷新后台作业
DROP
不是由DROP
. 据我所知,这是由创建 mview 期间提供的刷新设置引起的。看起来
与隐式一起
build immediate
导致 mview 在创建期间刷新,然后在创建完成后立即再次刷新。显然是
该start with trunc(sysdate) + 1/8
造成这种情况的原因。跑步时create
语句很快完成,然后当我查看活动会话时,我确实看到一个进行刷新的后台会话。