這兩天在用
oracle
的exp/imp
工具時遇到了一些問題,困擾了我很長時間,現在終於解決了,特此記錄下來。
源伺服器
: oracle 9.2.0.6.0
目標伺服器
: oracle 9.2.0.1.0
問題一:exp-00003:未找到段(****)的儲存定義
原因:客戶端和伺服器版本不一致
解決辦法:
1. 公升級客戶端 2.
改檢視,這一段是網上找到的
當使用9205
以前版本的
exp程式去
9205
及以上的資料庫中去匯出帶
lob欄位的表時
, 會遇到乙個錯誤
, 錯誤資訊為
"exp-00003 :
沒找到段的存貯定義
.....",
事實上這是乙個
oracle
的bug,
可以通過監時地更改檢視
"exu9tne"
的定義來臨時解決問題
, 如下所示
:
在匯出前
, 連線到
sys使用者
, 執行以下
sql:
create or replace view exu9tne (
tsno, fileno, blockno, length) as
select ts#, segfile#, segblock#, length
from sys.uet$
where ext# = 1
union all
select * from sys.exu9tneb
/
匯出完成後
, 執行以下命令來還原檢視的定義
, 下面貼的是
oracle 9
用的, 10g
metalink
來確定,
或者在執行前乙個命令之前, 從
user_views
中將原檢視的定義查出來
, 這樣做也是
dba乙個很好的習慣.
create or replace view exu9tne (
tsno, fileno, blockno, length) as
select ts#, segfile#, segblock#, length
from sys.uet$
where ext# = 1
3. 如果表中沒有
blob
字段,有時也會出現這個錯誤,設定引數
compress=y
可以解決,不需要改檢視。
問題二:imp時停止,無反映
原因:儲存過程寫的有問題
解決:
這個問題困擾我最長的時間,一共
16m的資料,匯入時在表導完後就停止不動了,只能重啟伺服器程序。在網上找了好多帖子,基本上都是說增大回退段,增加表空間,設定自動歸檔等等,但我的資料才這麼點,根本就不是這個原因,更令人奇怪的是,另乙個
schema
下的200多m
資料卻很順利的導進了。
後來在重啟服務的時間,注意到
dos視窗中顯示乙個
package
編譯未完成,就想是不是包的問題。將此包從源伺服器上刪掉後,重新匯出,再匯入時果然可以了。那就查這個包吧,最後查不查去,問題竟出在乙個
select
語句上,
select "ss" || count(*) into v_a from aa ;
就是這個語句,在源伺服器上編譯時完全正常,但到本地伺服器上編譯會導致死鎖。在
count(*)
前加上to_char()
就好了,不知道這是什麼原因。可能是版本問題吧,
在exp imp匯入匯出的時候遇到的問題
1 在用exp imp匯入匯出的時候報ora 12154 tns could not resolve the connect identifier specified 需要配製檔案 看 opt oracle product 10.2 db 1 network admin下是否有listener.or...
exp imp 注釋亂碼問題
檢視源資料庫字符集語句 select userenv language from dual 檢視目標資料庫字符集語句 select userenv language from dual 如果還是亂碼,可設定源資料庫所在系統的 nls lang 應該就不會亂碼了。windows設定nls lang 1...
exp imp工具的使用
export import 使用技巧與常見錯誤 export 和 import 是一對讀寫oracle資料的工具.export 將 oracle 資料庫中的資料輸出到作業系統檔案中,import 把這些檔案中的資料讀到oracle 資料庫中.export import可以用來完成以下工作 資料歸檔,...