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;