IMP匯入時遭遇oracle等待事件single-task message

qdrzq發表於2015-01-16
朋友在進行IMP匯入時,遇到這樣的情況,在表及資料匯入完成的位置,imp匯入工具停止響應.等了半小時以上,所以無奈之下只好強行結束.結果發現,儲存過程已經被匯入了,但觸發器和包都沒有被匯入.
此前,我們也遇到過類似現象.大多是由imp工具與目標庫版本不匹配所致.所以,先從這方面檢查,dmp檔案是由11.2版本的exp匯出的,使用的imp也是11.2的,目的庫版本11.2.0.1,所以,這方面沒問題.
一籌莫展之時,只好使用帶ignore=y rows=n引數的imp重新再匯入,匯入停止響應的同時,檢視等待事件.
檢視的結果是,等待事件single-task message
對於這個等待事件,oracle的解釋是:
When running single task, this event indicates that the session waits for the client side of the executable.
而現在imp操作,就是在伺服器本機進行的.並沒有服務端/客戶端的嫌疑.
按等待事件,查閱網上相關資源來看,遭遇此等待事件多數是在編譯無效物件的時候,而且是無效物件中包含資料庫連結的使用.
這個線索給了我們啟發.恰好,我們匯出的原始環境也建有資料庫連結,而且儲存過程中使用了連結.所以聯想到imp匯入表和資料之後,正是需要對物件進行編譯.
所以,先把目的資料庫連結刪除,然後,再進行帶ignore=y rows=n引數的imp操作,結果發現,還是會停止響應,再去看資料庫連結,又被建上了.
最終的解決,就是匯入的過程中,用另一個會話連上庫,將剛匯入建立上的資料庫連結予以刪除,使imp匯入過程繼續向下進行.這樣匯入成功.

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

相關文章