Oracle Materialized View のdba_mviewsディクショナリでの

ステータスが「NEED_COMPILE」な場合の備忘。

状況を確認

SQL> select MVIEW_NAME, STALENESS from dba_mviews;

まず、リフレッシュjobが正常に動いていることを確認する(jobから起動の場合)。

SQL> select job, last_date, last_sec, this_date, this_sec, failures, what
from dba_jobs

ロックがかかったオブジェクトがあり、mviewのリフレッシュを止めているのか確認。

SQL> select to_char(sysdate,'yyyymmdd hh24miss') TIme,
a.owner||','||a.object_name OBJECT,
decode(b.locked_mode, 1,'null',
2,'row share',
3,'row exclusive',
4,'share',
 5,'share row exclusive',
 6,'exclusive','????') LOCKED_MODE,
 to_char(c.ctime/60,'999990.9') MIN
from dba_objects a,v$locked_object b,v$lock c
where a.object_id=b.object_id
and b.session_id=c.sid
and xidsqn=c.id2
and b.xidusn>0;

原稿セッションに当該テーブルをロックしているものがないか確認。

SQL> select s.saddr||' '||s.sid||' '||s.serial#||' '||s.username||' '||a.sql_fulltext
from v$session s, v$sqlarea a
where s.SQL_ADDRESS = a.ADDRESS
and a.sql_fulltext like '%当該テーブル%';

mveiwのリコンパイルを行う。

SQL> ALTER MATERIALIZED VIEW <ビュー> COMPILE;