新人初學Oracle,在匯入一個DMP資料的程序中一直報錯
。在網上查閱方法都解決不了,然后我自己試了下新建了一個VEHICLE_POSITION表,然后進行匯入,還是會報錯,但是提示表不存在的報錯沒了,報錯是這樣
。權限不足的問題,按照網上查閱的方案也是解決不了,給新建用戶該授予的權限也都授予了,然后我試了在Oracle默認用戶新建表格VEHICLE_POSITION,然后匯入的默認用戶中,還是不成功,但是什么錯誤都不提示了

求助各位大神,指導一下。
uj5u.com熱心網友回復:
匯出和匯入陳述句是怎樣的?uj5u.com熱心網友回復:
imp Imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION_20150612.dmp full=y ignore=y
uj5u.com熱心網友回復:
你這只是兩個用戶之間物件的匯出和匯入,就別用full了,用fromuser=taxicd touser=c##GF 就夠了
uj5u.com熱心網友回復:
匯出和匯入陳述句是怎樣的?
imp Imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION_20150612.dmp full=y ignore=y
從別處拿到的資料,不知道匯出陳述句,匯入陳述句就是上面這個,嗯多寫了一個imp
uj5u.com熱心網友回復:
匯出和匯入陳述句是怎樣的?
imp Imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION_20150612.dmp full=y ignore=y
你這只是兩個用戶之間物件的匯出和匯入,就別用full了,用fromuser=taxicd touser=c##GF 就夠了
你說的這個也試過,跟用full一樣的
uj5u.com熱心網友回復:
仔細看了下主題貼,如果不是BUG之類的緣故,有沒有這么個可能?這張匯入的表上的約束或者說主鍵包含的唯一索引是屬于其他用戶,而不是TAXICD用戶的?樓主可以通過imp的INDEXFILE選項來生成該表的DDL陳述句看下,很可能就是這種表與索引屬于不同用戶的情況,如果是這樣的話就比較好處理了:
先通過INDEXFILE選項得到的DDL陳述句創建表,如果表資料量比較小的話,可以把主鍵也先建上,然后再通過ignore=y或者data_only=y引數來完成資料的匯入,如果表資料量比較大,那么可以先匯入資料,匯入完成之后再加主鍵。
uj5u.com熱心網友回復:
仔細看了下主題貼,如果不是BUG之類的緣故,有沒有這么個可能?
這張匯入的表上的約束或者說主鍵包含的唯一索引是屬于其他用戶,而不是TAXICD用戶的?樓主可以通過imp的INDEXFILE選項來生成該表的DDL陳述句看下,很可能就是這種表與索引屬于不同用戶的情況,如果是這樣的話就比較好處理了:
先通過INDEXFILE選項得到的DDL陳述句創建表,如果表資料量比較小的話,可以把主鍵也先建上,然后再通過ignore=y或者data_only=y引數來完成資料的匯入,如果表資料量比較大,那么可以先匯入資料,匯入完成之后再加主鍵。
是用imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION.dmp indexfile=D:\app\GF\oradata\VEHICLE_POSITION.idx full=y這個陳述句嗎,我用這個也報錯了
uj5u.com熱心網友回復:
仔細看了下主題貼,如果不是BUG之類的緣故,有沒有這么個可能?
這張匯入的表上的約束或者說主鍵包含的唯一索引是屬于其他用戶,而不是TAXICD用戶的?樓主可以通過imp的INDEXFILE選項來生成該表的DDL陳述句看下,很可能就是這種表與索引屬于不同用戶的情況,如果是這樣的話就比較好處理了:
先通過INDEXFILE選項得到的DDL陳述句創建表,如果表資料量比較小的話,可以把主鍵也先建上,然后再通過ignore=y或者data_only=y引數來完成資料的匯入,如果表資料量比較大,那么可以先匯入資料,匯入完成之后再加主鍵。
是用imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION.dmp indexfile=D:\app\GF\oradata\VEHICLE_POSITION.idx full=y這個陳述句嗎,我用這個也報錯了
如果這樣的話,如果想要判斷清楚具體問題就比較麻煩了,如果是生產資料庫的話以下操作要慎重:
1、打開全庫一級的1031錯誤跟蹤:
alter system set events '1031 trace name errorstack forever, level 3';
2、imp匯入,報錯,找到imp會話對應的trc檔案,通常是最新的跟蹤檔案,如果是11g,跟蹤檔案的目錄在user_dump_dest實體引數指定的目錄下,按照檔案時間戳倒序找吧
3、找到跟蹤檔案后,可以看到更多關于ORA-1031錯誤的資訊,可以做進一步的診斷。
如果是生產庫,覺得這么做有隱患,或者覺得以上程序太麻煩了,那么建議聯系資料源的資料庫管理員,去看看這張表上的約束有何特別之處,除了是不是屬于其他用戶之外,還應該考慮是否會有外鍵參考其他用戶的物件,而這個用戶,在目標庫中是不存在的。
另外,實際上imp已經到了啟用約束這一步,表里的資料應該是匯入的,如果只要資料的話,到這一步就已經OK了,如果你每次使用ignore=y來匯入資料,這張表里的資料可能已經有重復的了。
uj5u.com熱心網友回復:
補充下,忘了提醒了,如果打開了1031的errorstack,那么跟蹤完畢后記得將其關閉:alter system set events '1031 trace name errorstack off';
uj5u.com熱心網友回復:
補充下,忘了提醒了,如果打開了1031的errorstack,那么跟蹤完畢后記得將其關閉:
alter system set events '1031 trace name errorstack off';
謝謝你的建議,1031的問題已經解決了,那個942的問題一直沒解決。
uj5u.com熱心網友回復:
補充下,忘了提醒了,如果打開了1031的errorstack,那么跟蹤完畢后記得將其關閉:
alter system set events '1031 trace name errorstack off';
謝謝你的建議,1031的問題已經解決了,那個942的問題一直沒解決。
uj5u.com熱心網友回復:
補充下,忘了提醒了,如果打開了1031的errorstack,那么跟蹤完畢后記得將其關閉:
alter system set events '1031 trace name errorstack off';
謝謝你的建議,1031的問題已經解決了,那個942的問題一直沒解決。
看你的第一張貼圖,看上去像是資料匯入已經全部完成了的,只是在添加約束的時候報錯了,所以照理說,如果這張VEHICLE_POSITION應該是已經匯入了的,除非dmp檔案中確實不包含這張表,如果不是這種情況,那就比較奇葩了,除了打開942錯誤的errorstack來診斷外,也沒什么好辦法了。
uj5u.com熱心網友回復:
如果你先把表VEHICLE_POSITION建了,然后再匯入只會報錯ORA-1031,那么還可以嘗試先把表建了,然后再用indexfile引數來生成DDL陳述句,看看能不能找到點線索,是不是沒有VEHICLE_POSITION這張表的定義。uj5u.com熱心網友回復:
如果你先把表VEHICLE_POSITION建了,然后再匯入只會報錯ORA-1031,那么還可以嘗試先把表建了,然后再用indexfile引數來生成DDL陳述句,看看能不能找到點線索,是不是沒有VEHICLE_POSITION這張表的定義。
照你說的在用戶下新建表格VEHICLE_POSITON后,用indexfile,還是不成功
,生成的檔案只有
這兩行
uj5u.com熱心網友回復:
如果你先把表VEHICLE_POSITION建了,然后再匯入只會報錯ORA-1031,那么還可以嘗試先把表建了,然后再用indexfile引數來生成DDL陳述句,看看能不能找到點線索,是不是沒有VEHICLE_POSITION這張表的定義。
照你說的在用戶下新建表格VEHICLE_POSITON后,用indexfile,還是不成功,生成的檔案只有
這兩行
看這貼圖,怎么像是磁區表定義的存盤部分,但又不全,難不成是dmp檔案損壞了,有長表沒能建起來?所以最后才會找不到表來建上約束。
uj5u.com熱心網友回復:
如果你先把表VEHICLE_POSITION建了,然后再匯入只會報錯ORA-1031,那么還可以嘗試先把表建了,然后再用indexfile引數來生成DDL陳述句,看看能不能找到點線索,是不是沒有VEHICLE_POSITION這張表的定義。
照你說的在用戶下新建表格VEHICLE_POSITON后,用indexfile,還是不成功,生成的檔案只有
這兩行
看這貼圖,怎么像是磁區表定義的存盤部分,但又不全,難不成是dmp檔案損壞了,有長表沒能建起來?所以最后才會找不到表來建上約束。
正常情況就是那個資料里面有個表VEHICLE_POSITION,然后前面就把這個表格寫入了,然后再執行約束條件,但是我現在就是這個表格實際上是沒匯入進去的,所以說執行約束條件失敗,找不到表格。
如果我自己新建一個表格VEHICLE_POSITION,執行約束條件這步就能找到表格了,但是因為沒寫入資料,所以最后結束啥資料也沒有。
大神,問題的原因是我這樣理解的么
uj5u.com熱心網友回復:
如果你先把表VEHICLE_POSITION建了,然后再匯入只會報錯ORA-1031,那么還可以嘗試先把表建了,然后再用indexfile引數來生成DDL陳述句,看看能不能找到點線索,是不是沒有VEHICLE_POSITION這張表的定義。
照你說的在用戶下新建表格VEHICLE_POSITON后,用indexfile,還是不成功,生成的檔案只有
這兩行
看這貼圖,怎么像是磁區表定義的存盤部分,但又不全,難不成是dmp檔案損壞了,有長表沒能建起來?所以最后才會找不到表來建上約束。
正常情況就是那個資料里面有個表VEHICLE_POSITION,然后前面就把這個表格寫入了,然后再執行約束條件,但是我現在就是這個表格實際上是沒匯入進去的,所以說執行約束條件失敗,找不到表格。
如果我自己新建一個表格VEHICLE_POSITION,執行約束條件這步就能找到表格了,但是因為沒寫入資料,所以最后結束啥資料也沒有。
大神,問題的原因是我這樣理解的么
對,如果說dmp檔案損壞,或者本身檔案中沒有VEHICLE_POSITION這張表,那么這一切都可以得到解釋了,就如你所言。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/82501.html
標籤:基礎和管理
上一篇:mysql用存盤程序計算資料
