在Oracle中,什么是仅插入的物化视图?
我有以下物化视图,它使用MAX聚合函数:
CREATE MATERIALIZED VIEW VM_FAST_MAX
REFRESH FAST ON COMMIT
AS
SELECT d.ID_INPUT, MAX(d.ID_LOAD) AS ID_LOAD, COUNT(*) AS CNT
FROM MASTER_TABLE d
GROUP BY d.ID_INPUT;根据Oracle数据仓库指南,它应该是一个仅插入的物化视图。
如果物化视图有以下之一,则仅在常规DML插入和直接加载时才支持快速刷新。
这样的物化视图称为仅插入的物化视图.
我希望这样的物化视图只有在插入主表时才能快速刷新。相反,DBMS_MVIEW.EXPLAIN_MVIEW告诉我这个物化视图总是可以快速刷新的:
EXEC DBMS_MVIEW.EXPLAIN_MVIEW('VM_FAST_MAX');
SELECT CAPABILITY_NAME, POSSIBLE
FROM MV_CAPABILITIES_TABLE
WHERE MVNAME = 'VM_FAST_MAX';
CAPABILITY_NAME P
------------------------------ -
REFRESH_FAST_AFTER_INSERT Y
REFRESH_FAST_AFTER_ANY_DML Y即使在主表更新之后,提交上的快速刷新也是有效的。
概述:
使用Oracle 11.2企业版。
发布于 2013-06-10 12:01:34
常规的快速可刷新mview与仅插入的mview之间的区别是,仅插入的可刷新mview只能在插入状态集之后才能快速刷新,而不能在任何其他DML操作(例如删除和更新)之后被快速刷新。
我假设这种限制背后的逻辑是,当您更新一个现有值时,Oracle无法仅通过mlog表知道新的最大值是什么(它必须保持某种级别才能做到这一点)。
关于功能表-这很奇怪。检查这个页面 -这做了相同的测试,但在他们的例子中,他们得到
Capable of:
REFRESH_FAST
REFRESH_FAST_AFTER_INSERT
Not Capable of:
REFRESH_FAST_AFTER_ONETAB_DML
AMT_SUM
SUM(expr) without COUNT(expr)
REFRESH_FAST_AFTER_ONETAB_DML
COUNT(*) is not present in the select list
REFRESH_FAST_AFTER_ANY_DML
see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled您是否尝试过在更新后执行快速刷新?
https://stackoverflow.com/questions/17021094
复制相似问题