EXP 導出出錯解決方案


前言:

  今天想要把 當前用戶下的數據庫 導出來,使用命令

  導出數據庫可用語句:

  exp bpmp/bkc123@127.0.0.1:5050/bkcyunty file=D:\bak\db_61.dmp log=D:\bak\db_61.log INDEXES=n STATISTICS=none

  exp ppniedb/ppniedb@wisg file=/home/oracle/upgrade_bak/ppniedb.dmp log=/home/oracle/upgrade_bak/expppniedb.log direct=y compress=n rows=y

導出成功以后的導入命令:

  imp bpmp/bkc123@127.0.0.1:5050/bkcyunty file=D:\bak\db_61.dmp log=D:\bak\db_61.log full=y

遇到的問題:

1)

用命令:exp ***/***@*** file=****.dmp full=y

執行后,系統提示:

EXP-00008:遇到ORACLE錯誤1406

ORA-01406:提取的列值被截斷

EXP-00000:導出終止失敗

導出當前用戶所在實例下所有數據對象。

雖然不知道為什么,但是 去掉 full=y 就不報這個錯了

2)

EXP-00008: 遇到 ORACLE 錯誤 1455
ORA-01455: 轉換列溢出整數數據類型
EXP-00000: 導出終止失敗

網上找到的解決方法:

方法一:

exp bpmp/bkc123@127.0.0.1:5050/bkcyunty file=D:\bak\db_61.dmp log=D:\bak\db_61.log INDEXES=n STATISTICS=none

導出語句上加上 INDEXES=n STATISTICS=none

注:錯誤還是存在。一台機器可以導出,而出錯的機器還是報錯

方法二:

1) alter system set deferred_segment_creation=FALSE;

2) select 'alter table '||table_name||' allocate extent;' from user_tables WHERE SEGMENT_CREATED='NO';

3) select count(*) from user_lobs where segment_created='NO';

4) select count(*) from user_indexes WHERE SEGMENT_CREATED='NO';

使用 導出用戶(bpmp)登錄oracle,

執行 3) 4) 看統計結果是否為0,

若是不為0,則執行1),且將2)查詢到的結果復制后重新執行一次

再次執行 3) 4) 看統計結果是否為0,為0 后再去執行導出命令即可

注:雖然沒有搞清楚,這幾句話是什么意思,但是我導出成功了

參考:http://blog.sina.com.cn/s/blog_14d5a51a90102vret.html

 

3)

EXP-00056: ORACLE error 1455 encountered
ORA-01455: converting column overflows integer datatype
EXP-00000: Export terminated unsuccessfully

導致這個錯誤原因:
       Export 命令會將表的statistics 值轉成成整形。 當這個statistics值超過2^31-1時,就會報這個錯誤。  

解決方法:
1. 通過dba_tables 和 dba_indexes 來查看對應表的值。 即num_rows值,看是否超過了2^31-1。

查詢方法:

  select * from all_tables A where A.OWNER='BPMP' and A.NUM_ROWS > 0;

或者 select * from user_tables A where A.NUM_ROWS > 0;

若是可以查詢到結果,則清理一下

1)select ' analyze table ' || A.TABLE_NAME ||' compute statistics;' from all_tables A where A.OWNER='BPMP';

2)select ' analyze table ' || A.TABLE_NAME | |' compute statistics for all indexes;' from all_tables A where A.OWNER='BPMP';

3)select ' analyze table ' || A.TABLE_NAME || ' delete statistics ;' from all_tables A where A.OWNER='BPMP';

執行這三條語句,將 查詢產生的結果(這里相當於自動生成sql語句),復制出來,最后一起執行

1)重新對表進行分析統計 2)3)是對表的索引記錄重新分析統計和清除。

 

參考:http://www.hongyanliren.com/2014m12/21735.html

這里還有一種解決方法(我看不懂,不移過來了):http://blog.csdn.net/tianlesoftware/article/details/6251652

4)

修改 Oralce 客戶端的字符集

Set nls_lang=simplified Chinese_china.zhs16gbk

Set nls_lang=AMERICAN_AMERICA.ZHS16GBK

注:某篇博客說字符串的編碼的原因,實際上不是。這樣的設置 只是將提示信息 由英文變成了中文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM