[DBA手記]IMP-00093錯誤的解決方法

kamus發表於2005-02-21
今天現場工作人員報告在IMP一個dmp檔案時報超出最大遊標數的錯誤,ORA-01000: maximum open cursors exceeded。
詢問了一下基本情況,上metalink查了一下,IMP中根本就沒有提及任何有關ORA-01000的錯誤,這就有些納悶了。這時候,通過郵件收完了dmp檔案,自己模擬測試了一下,發現其實錯誤的原因根本不是ORA-01000,而是IMP-00093,只是由於太多的IMP-00093錯誤消耗了大量的cursor,導致一個session中的cursor數超過了定義的300,所以在最後就開始報ORA-01000錯誤了。

IMP-00093: Inconsistency between dumpfile constraint definition for table ACCOUNT with columns ("ACCTID" , "CURRENCYID")

首先查錯誤文件,基本上沒有什麼有意義的提示。
  IMP-00093 Inconsistency between dumpfile constraint definition for table string with columns (string)

Cause: Import failed to locate a base table for a constraint that was defined in the dump file and statistics were not imported.

Action: Check to see if the table and constraint exist. If the table and constraint exist, then report this to Oracle Support Services as an Import internal error.

再次查metalink,果然,又是一個bug。

Bug 2834541 - IMP-93 on import when using the TOUSER parameter

Bug No. 2834541

這個bug在9.2.0.6和10.1.0.3中被修復,起因是在匯入的過程中要匯入系統生成的約束,類似SYS_C0027639, metalink上只提到了這個原因,但是以前很多次的imp應該都是有這樣系統生成的約束名,並沒有報錯過,所以應該還是有另外的因素參雜其中的,比如統計資訊的生成。沒有繼續研究。

解決方法:在IMP時使用indexes=no或者statistics=none引數,當然後者比較好一些。

問題是解決了,但是多說一點,在設計schema時,最好手動指定所有約束的名字,這是一個好的習慣。

相關文章