最近發現雲服務器上的Oracle 11g在導出時報錯,如下:
...
. 正在導出后期表活動
. 正在導出實體化視圖
. 正在導出快照日志
EXP-00008: 遇到 ORACLE 錯誤 1455
ORA-01455: 轉換列溢出整數數據類型
EXP-00000: 導出終止失敗
從網上搜了半天,有很多種說法:
1. 版本問題,說10g的導出11g的就有這個問題,但是我的客戶端和服務器采用的是相同的版本,所以不存在版本問題。有的還說是32位和64位的問題,我的Oracle是32位,客戶端也是32位,同一台設備上,所以應該是和版本無關。
2. Exp加參數,很多人提出加各種參數,包括:
Direct=y
INDEXES=n STATISTICS=none
不管是單獨還是聯合使用,都無效還是報錯。
3、數據問題,我干脆不導出數據,只導出數據庫結構,仍然報錯,看來與數據無關。
靜下來考慮了半天,看到是快照日志出錯,但是我的數據庫中沒有建立快照啊?后來反應過來了,雖然沒有快照,但是建立有物化視圖(MATERIALIZED VIEW),會不會是物化視圖的問題?
刪除物化視圖后導出,一切正常,說明還是物化視圖導出導致的錯誤,真是個大坑啊,這些導出文件在重新導入時都要報錯,備份工作算是白做了。幸好發現得早!
2015.3.18
今天某用戶的數據導出又開始報上述錯誤了,檢查了一下,發現某個物化視圖采用了提交更新模式:
CREATE MATERIALIZED VIEW V_INBED_BILL_CHECK_TOTAL
REFRESH COMPLETE ON COMMIT
AS ...
由於必須開啟日志:
--建立物化視圖日志,將涉及的字段序列化
CREATE MATERIALIZED VIEW LOG ON T_CHECK_BILL WITH ROWID,
SEQUENCE(ORG_ID,BATCH_ID,SI_TYPE_ID,HOSP_ID,CHECK_RULE_ID,INBED_BILL_ID,PRES_BILL_ID,PSN_ID,CHECK_ITEM_AMT,CHECK_ITEM_CNT,CHECK_DEDUC_AMT)
INCLUDING NEW VALUES;
今天重新建立物化視圖,全部采用手工更新模式,所以重建物化視圖為:
CREATE MATERIALIZED VIEW V_INBED_BILL_CHECK_TOTAL
REFRESH ON DEMAND
AS ...
在導出數據時,刪除物化視圖后導出仍然報錯,發現沒有執行原來的刪除命令:
DROP MATERIALIZED VIEW LOG ON T_CHECK_BILL;
執行該命令后,報錯消失。
所以正確的理解應該是:
建立物化視圖過程中,如果開啟了物化視圖日志,導出時將會報”ORA-01455”的錯誤,導致導出失敗。刪除物化視圖日志可以解決該問題。