快照庫MV不能成功重新整理問題的解決

sqysl發表於2016-06-10

前幾天,一個使用者找到我,說他們的物化檢視不能重新整理了,這得從幾天前主庫的一次意外down機說起(另文說明),前幾天,使用者現場的一箇中心庫因某原因意外down掉了,當時短期內對中心庫進行了重啟修復,沒有造成資料丟失,但重啟後,圍繞中心庫的幾個快照庫不能重新整理MV了,讓我幫忙解決下,沒辦法,使用者就是上帝,使用者的需求就是命令,開工吧。
首先,我看了一個快照庫上的MV,都是從中心庫往快照庫中同步資料的,並且也對一個資料量小的MV進行了測試,確實是不可以重新整理,一直卡在那裡不動,但在快照庫上,透過定義MV的SELECT語句,可以快速的從中心庫查到資料,有點納悶兒,怎麼回事兒呢?繼續排查:

select * from v$Lock where type='TM' and id1='1234';


看到結果,發現了線索,如下:
ADDR          KADDR         SID   TYPE   ID1    ID2    LMODE  REQUEST  CTIME     BLOCK
-------------------------------------------------------------------------------------- 

64B3AB44 64B3AB5C 1,050 TM 1234 0 3 0   370500    0


如果有的同學還沒發現線索,那麼繼續:

select * from v$session where sid=1050;


這條語句的結果較長,我就不貼在這裡了,透過結果的SCHEMANAME,MACHINE,PROGRAME,TYPE,LOGON_TIME,STATE等資訊,基本可以確定問題所在了,否則,可以透過SQL_ID繼續檢查:

select * from v$sql where sql_id='bsw0sjtftg6vw'


透過以上語句,可以獲取到具體的SQL,這樣就能更清楚這些會話當時所做的工作,好了,確定問題所在,我們總的解決:

alter system kill session 'sid,serial#';


命令發出去,居然kill不掉,v$session雖然顯示killed,但依然能查到該session,並且,再次重新整理MV時,依然卡在那裡,透過v$session的process,可以知道該sid對應的PID,於是:
kill -9 pid
再次測試MV的重新整理,成功解決,其他幾個快照庫都如法炮製,MV問題依次全部解決,大家參照學習,禁止轉載。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2118202/,如需轉載,請註明出處,否則將追究法律責任。

相關文章