轉摘:ORACLE:IMP工具ignore=y的一個問題

yeahokay發表於2008-07-23
ORACLE的EXP和IMP工具是大家會經常使用到的。在近期的工作中,發現IMP一個有意思的問題。
我們有一個資料集中的業務,因為資料量不大且傳輸資料不是很多所以採用定時匯出EXP和定時IMP的方法。因為資料是累加增長的所以在匯入時我們使用了IMP的ignore=y的引數,即告訴IMP如果當前表存在就不建立表結構而直接匯入新的資料。
但是今天我在檢查自動傳送的錯誤日誌時,發現這樣的錯誤資訊:
. . importing table "XXXXX_tablename"
IMP-00058: ORACLE error 904 encountered
ORA-00904: "XXXX_column": invalid identifier

我立刻意識到,前端應用的表結構發生了變化!但是我上個月的時候已經有規定,所有的上線系統後臺資料庫表結構修改都必須通知我呀。檢查該表最後的修改日期:2007-6-8!怎麼會這樣?如果早在6月份就修改了結構為什麼一直我的日誌沒有報錯,單單在今天報錯?
詢問研發,發現這張表的資料使用完成即刪除,但是昨日因為臨時需要而沒有刪除使用的資料。分析我們的操作流程:匯出EXP操作發生在午夜12點,也就是說一般情況下,應該是一條資料都沒有匯出的,而因為昨日的特殊需要造成有資料被匯出了!再分析以前正確的日誌,終於發現問題:
如果是沒有資料被匯出,在使用IMP匯入並使用ignore=y引數時,ORACLE根本不檢查要匯入的資料結構和現存在資料庫中表的結構是否相同。就直接顯示如下資訊;

. . importing table "XXXXX_tablename"
0 rows imported
只有真要有資料需要匯入時,才會檢查資料結構的一致性問題!
所以就會差生一種總是可以成功匯入的假象。
[@more@]

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

相關文章