暫停正在自動重新整理的oracle物化檢視的方法
阿新 • • 發佈:2018-11-16
原理:要暫停正在重新整理的物化檢視只需要殺死對應的會話就好了,但是物化檢視重新整理是通過oracle的job定時執行,會話被kill之後,job會重新的執行重新整理物化檢視操作,因此在kill會話之前需要把job的狀態broken設定為Y,表示這個任務失效,然後再執行kill會話。
分步驟進行
1.以下的sql語句可以知道哪些job是在當前被計劃中的,主要是看BROKEN狀態,Broken這一列表示job是否考慮繼續執行,broken=Y的job是不會繼續執行的。
SELECT J.JOB, J.PRIV_USER, R.ROWNER, R.RNAME, J.BROKEN FROM DBA_REFRESH R, DBA_JOBS J WHERE R.JOB = J.JOB ORDER BY 1;
2.從上面步驟的查詢sql取出對應的job,並將重新整理物化檢視的job的broken設定為Y,方法是在命令視窗執行:
exec dbms_job.broken(job,true);
如:
exec dbms_job.broken(824,true);
然後提交事務。然後重新測試一下job是否為broken了
3.經job通過下面的語句,看看哪個job是當前正在執行的,主要是找到正在重新整理的物化檢視job:
SELECT * FROM V$MVREFRESH;
4.kill掉對應的會話,sid,serial#可以從步驟3中獲取:
alter system kill session 'sid,serial#';
如:
alter system kill session '144,726';
到這裡這個重新整理操作已經被暫停了,除非你又重新標記job的broken設定為Y。當然刪除物化檢視本身也會移走job佇列中的job。