前言:
今天想要把 當前用戶下的數據庫 導出來,使用命令
導出數據庫可用語句:
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
注:某篇博客說字符串的編碼的原因,實際上不是。這樣的設置 只是將提示信息 由英文變成了中文