如果我在Oracle中有物化视图,每15分钟定义一次REFRESH FAST ON COMMIT
。它在最初创建和快乐刷新时有效。是什么导致它停止快速刷新?
我可以看到它已基于此停止刷新:
select mview_name, last_refresh_date from all_mviews;
答案 0 :(得分:5)
我们发现的事情似乎阻止了MV的刷新: 1.更改基表的DDL 2.如果MV跨越数据库链接,则在链接上获取数据存在问题(例如,我们在这里有一个数据库,一个远程。如果在刷新期间,两个数据库之间的连接失败,则刷新失败)
在#1的情况下,刷新失败并且永远不会再次工作,我们必须重新创建MV。在#2的情况下,不清楚刷新是否会再次恢复。 事实证明,快速刷新MV对我们来说是不可靠的,所以我们在Windows调度程序中创建了一个工作来启动我们的刷新。
答案 1 :(得分:1)
在我上一份工作中偶尔发生的事情是,DBA活动有时会将参数job_queue_processes
设置为0.这将停止物化视图刷新,直到参数值设置为大于0的值。
答案 2 :(得分:1)
这取决于物化视图。来自oracle数据字典的以下查询将为您提供所有(oracle用户)物化视图的列表以及它们的可刷新速度。
SELECT MVIEW_NAME, FAST_REFRESHABLE FROM USER_MVIEWS;
FAST_REFRESHABLE列将为您提供以下值之一: NO:物化视图不能快速刷新,因此很复杂。
DIRLOAD:仅对直接加载支持快速刷新。
DML:仅DML操作支持快速刷新。
DIRLOAD_DML:直接加载和DML操作都支持快速刷新。
DIRLOAD_LIMITEDDML:直接加载和DML操作的子集支持快速刷新。
过去给我带来问题的是 DIRLOAD_LIMITEDDML 。如果在MVIEW查询中有COUNT,MAX等等,我通常会得到它们。通常这些在插入和删除时刷新,但在更新时不刷新。