1. 程式人生 > >暫停正在自動重新整理的oracle物化檢視的方法

暫停正在自動重新整理的oracle物化檢視的方法

       原理:要暫停正在重新整理的物化檢視只需要殺死對應的會話就好了,但是物化檢視重新整理是通過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。