如果我在 Oracle 中有物化视图,定义为REFRESH FAST ON COMMIT
每 15 分钟一次。它在最初创建并愉快地刷新时工作。什么会导致它停止快速刷新?
我可以看到它已经停止刷新基于此:
select mview_name, last_refresh_date from all_mviews;
如果我在 Oracle 中有物化视图,定义为REFRESH FAST ON COMMIT
每 15 分钟一次。它在最初创建并愉快地刷新时工作。什么会导致它停止快速刷新?
我可以看到它已经停止刷新基于此:
select mview_name, last_refresh_date from all_mviews;
我们发现的事情似乎阻止了 MV 刷新: 1. 对基表的 DDL 的更改 2. 如果 MV 跨 DB 链接,则通过链接获取数据时出现问题(例如,我们有一个数据库这里,和一个远程。如果在刷新期间,两个数据库之间的连接失败,则刷新失败)
在 #1 的情况下,刷新失败并且永远不会再次工作,我们必须重新创建 MV。在 #2 的情况下,目前还不清楚刷新是否会再次出现。事实证明,快速刷新 MV 对我们来说是不可靠的,因此我们在 Windows 调度程序中创建了一个作业来启动我们的刷新。
在我上一份工作中偶尔发生的一件事是,DBA 活动有时会将参数设置job_queue_processes
为 0。这将停止物化视图刷新,直到参数值设置为大于 0 的值。
这取决于物化视图。以下来自 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 等,我通常会得到这些。通常这些刷新在插入和删除时而不是在更新时。