问题现象:
客户反馈,有两个物化视图,刷新条件均为refresh fast on demand,即手动刷新或者使用job等定时刷新。且物化视图1因为job异常关系目前无法正常刷新,但是物化视图2没有手工刷新,在job中也没有看到相关信息,但是却在正常刷新,客户觉得这很诡异,需要确认下是什么原因导致。
(具体物化视图语句这里不做展示)
分析排查
-
检查物化视图日志
select log_owner,master,log_table from dba_mview_logs;

查询物化视图日志是否有数据

均正常
-
检查job信息,确认是都有job定时刷新ZX_CARD_BASEINFO
select schema_user,last_date,interval,WHAT from dba_jobs;

可以看到物化视图1,但没有发现涉及到刷新ZX_CARD_BASEINFO的job。
(此前已经确认操作系统层面没有定时调度任务)
3.观察 ZX_CARD_BASEINFO的刷新规律
确认ZX_CARD_BASEINFO刷新时间间隔为5分钟
定位到相同执行时间的job

怀疑ZX_CARD_BASEINFO存在于CARD_REFRESH刷新组中。
4.查看刷新组信息
select owner,name,rowner,rname,job from dba_refresh_children;

确认ZX_CARD_BASEINFO是由于job定时刷新刷新组才能定期刷新的。
至此,可以确定两个相同刷新条件的物化视图,物化视图1是由于定时job异常所以没有正常刷新,物化视图2 是因为在刷新组中,且该job在正常执行,所以物化视图2可以正常执行,不存在什么灵异现象。
扩展
SQL> select rowner,rname,job,next_date,interval from dba_refresh;
SQL> select owner,name,rowner,rname,job from dba_refresh_children;